作者:CHO 李航

一、背景:

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

二、实现功能:

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

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

在这里插入图片描述

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

在这里插入图片描述

iii. 用户确认后调用合同查询MCP server
在这里插入图片描述

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

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

在这里插入图片描述

ii. 通过MCP client进行MCP匹配调用-如果不在上文中的合同列表内则大模型会先进行查询确保合同有效
在这里插入图片描述

iii. 查询结束自动调用延期MCP server
在这里插入图片描述

iiii. 返回相应结果:已成功延期
在这里插入图片描述

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);
});
;

京东云开发者
3.4k 声望5.5k 粉丝

京东云开发者(Developer of JD Technology)是京东云旗下为AI、云计算、IoT等相关领域开发者提供技术分享交流的平台。