财务合同MCP实践

京东云开发者
• 阅读 10

作者:CHO 李航

一、背景:

随着MCP的普及,能否从业务角度,以MCP化的交互方式让业务简单通过自然语言描述进行对系统的操作,从而带来成本更低更便捷更快的体验。

二、实现功能:

1.根据合同状态或编号查询合同信息:

i. question: 请帮我查询待签署的合同

财务合同MCP实践

ii. 通过MCP client进行MCP匹配调用

财务合同MCP实践

iii. 用户确认后调用合同查询MCP server 财务合同MCP实践

1.实现业务合同延期处理:

i. 通过自然语言描述我希望延期的合同

财务合同MCP实践

ii. 通过MCP client进行MCP匹配调用-如果不在上文中的合同列表内则大模型会先进行查询确保合同有效 财务合同MCP实践

iii. 查询结束自动调用延期MCP server 财务合同MCP实践

iiii. 返回相应结果:已成功延期 财务合同MCP实践

iiiii. 业务系统验证-成功🏅

三、代码实现

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const QUERY_CONTRACT = "xxxxxxx";
const DELAY_CONTRACT = "xxxxxxx";

// Create server instance
const server = new McpServer({
    name: "contract",
    version: "1.0.0",
    capabilities: {
        resources: {},
        tools: {},
    },
});

// Helper function for making API requests
async function makeRequest(url, params) {
    const headers = {
        "X-Requested-With": 'XMLHttpRequest',
        "content-type": 'application/json',
    };
    try {
        const response = await fetch(url, {
            method: 'POST',
            headers: headers,
            body: JSON.stringify(params),
            credentials: 'include',
        });
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return (await response.json());
    }
    catch (error) {
        console.error("Error making Contract request:", error);
        return null;
    }
}
// Format alert data
function formatAlert(feature) {
    const props = feature;
    return [
        `合同号: ${props.contractNumber || "Unknown"}`,
        `合同id: ${props.id || "Unknown"}`,
        `版本号: ${props.version || "Unknown"}`,
        `创建人: ${props.creator || "Unknown"}`,
        `合同名称: ${props.name || "Unknown"}`,
        `合同主体: ${props.ouName || "Unknown"}`,
        `合同类型: ${props.typeName || "Unknown"}`,
        `交易方: ${props.refPartiesName || "Unknown"}`,
        `有效日期至: ${props.endTime || "Unknown"}`,
        "---",
    ].join("\n");
}
const statusDict = {
    xx: xx
};
// Register tools
server.tool("获取合同列表", "获取某种状态或某个合同的合同列表", {
    state: z.string().describe("两或三字的合同状态 (e.g. xx, xx)"),
    contractNumber: z.string().describe("合同号 (e.g. xxxxxxx,xxxxxxxx,xxxxxxx)"),
}, async ({ state, contractNumber }) => {
    const statusCode = statusDict[state];
    const alertsData = await makeRequest(QUERY_CONTRACT, { status: statusCode, pageIndex: 1, pageSize: 10, searchSource: 0, contractNumber: contractNumber });
     // 
        ......        
        省略业务逻辑
        ......
    //
});
server.tool("合同延期", "对指定合同进行延期操作", {
    contractId: z.string().describe("合同id (e.g. 41556890,41556953)"),
    contractNumber: z.string().describe("合同号 (e.g. PE2025A3709738,BEC2025A3709735)"),
    version: z.string().describe("版本号 (e.g. 1,2)"),
    endTime: z.string().describe("有效日期至 (e.g. 2023-08-15 12:00:00)"),
}, async ({ contractId, contractNumber, version, endTime }) => {

    const alertsData = await makeRequest(DELAY_CONTRACT, { endTime: newEndTime, version, contractNumber, contractId });
    // 
        ......        
        省略业务逻辑
        ......
    //
});

async function main() {
    const transport = new StdioServerTransport();
    await server.connect(transport);
    console.error("Contract MCP Server running on stdio");
}
main().catch((error) => {
    console.error("Fatal error in main():", error);
    process.exit(1);
});
;
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
随机高并发查询结果一致性设计实践
物流合约中心是京东物流合同管理的唯一入口。为商家提供合同的创建,盖章等能力,为不同业务条线提供合同的定制,归档,查询等功能。由于各个业务条线众多,为各个业务条线提供高可用查询能力是物流合约中心重中之重。同时计费系统在每个物流单结算时,都需要查询合约中心,确保商家签署的合同内容来保证计费的准确性。
Wesley13 Wesley13
3年前
Java iText+FreeMarker生成PDF(HTML转PDF)
1.背景在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等。方便用户查看,下载,打印。目前常用的解决方案是,把相关数据信息,生成对应的pdf文件返回给用户。!(https://static.oschina.net/uploads/space/2017/0507/202942_6jpZ_14059
Stella981 Stella981
3年前
Hibernate Annotations @Any 使用场景
使用hibernate时,你是否遇到如下蛋疼大场景@Entity@Table(name"contr_Contract")@Cache(usageCacheConcurrencyStrategy.READ_WRITE)@MetaData(value"合同")publicclassCont
系统存储架构升级分享
一、业务背景系统业务功能:系统内部进行数据处理及整合,对外部系统提供结果数据的初始化(写)及查询数据结果服务。系统网络架构:•部署架构对切量上线的影响\内部管理系统上线对其他系统的读业务无影响•分布式缓存可进行单独扩容,与存储及查询功能升级无关•通过缓存层
电子合同一站式解决方案 | 京东云技术团队
一:平台定位和优势(为什么建)1.1、平台定位由京东科技业务中台主导发起,联合法律部、安全部共建,旨在为业务提供电子合同管理的中台化能力,当前已形成一套成熟的“全线上、全生命周期电子合同管理系统”,可提供包括合同模板创建、模板预览、合同生成、合同预览、合同
京东云开发者 京东云开发者
7小时前
EI与MCP的故事
作者:CHO孔令晗EIFuture,AINow!🎉🎉🎉MCP能做什么?先简单唠叨几句,试想一下,在MCP在之前,如果我们模型的产出更符合我们的预期,我们可能会将所需的数据上下文贴到Prompt中,但随着我们对产出的要求越来越高,CV大法的方式将信息添
交易日均千万订单的存储架构设计与实践 | 京东物流技术团队
一、订单系统概述1.1业务范围服务业务线:快递、快运、中小件、大件、冷链、国际、B2B合同物流、CLPS、京喜、三入三出(采购入、退货入、调拨入、销售出、退供出、调拨出)等1.2订单中心价值1、解耦(提升系统稳定性)原系统:交易与生产耦合在一起,业务新增需
新支点小星 新支点小星
1年前
CNAS中兴新支点——性能测试的流程分享
1)售前与委托单位就测评项目进行前期沟通,签署《保密协议》,接收客户提交的资料,双方签署《软件技术测试服务合同》。客户提交资料如下:软件测试委托表、软件产品测试功能列表;①用户手册、操作、安装、说明、维护手册等;②样品安装光盘;③设计文档、数据库文档、相关
系统存储架构升级分享
一、业务背景系统业务功能:系统内部进行数据处理及整合,对外部系统提供结果数据的初始化(写)及查询数据结果服务。系统网络架构:部署架构对切量上线的影响\内部管理系统上线对其他系统的读业务无影响分布式缓存可进行单独扩容,与存储及查询功能升级无关通过缓存层的隔离