首页
学习
活动
专区
圈层
工具
发布

财务合同MCP实践

一、背景:

随着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 instanceconst server = new McpServer({   name: "contract",   version: "1.0.0",   capabilities: {       resources: {},       tools: {},   },});// Helper function for making API requestsasync 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 datafunction 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 toolsserver.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);});;

扫一扫,加入技术交流群

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OdpS9h4l5mRD_frcHkCPUcXw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券