掘金 人工智能 07月14日 11:05
MCP 从原理到实战:构建 LLM 可控工具世界
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

Model Context Protocol (MCP) 是一种专为大语言模型(LLM)设计的通用接口协议,旨在让模型安全、高效地调用工具和管理任务。MCP 统一了调用格式,支持权限控制、调用跟踪等功能,并被多家科技巨头采纳。它通过标准化、模块化和安全性设计,成为 LLM 与真实世界连接的关键桥梁,推动 Agent 系统的发展。

🌐 **MCP 的核心组成**: MCP 由 MCP Server、MCP Client 和 LLM Agent 组成。MCP Server 提供工具和数据资源,MCP Client 负责发现和调用这些资源,而 LLM Agent 则负责规划、推理和执行任务。整个流程基于 JSON-RPC 2.0 构建,实现了 LLM 与外部功能的无缝连接。

🧩 **MCP Server 的关键作用**: MCP Server 声明可用的工具、可访问的资源以及支持的提示。它通过 JSON Schema 格式定义工具的输入参数结构和约束,包括数据类型、枚举值和示例,确保模型能够正确理解和使用这些工具。MCP Server 还支持权限控制、调用跟踪等安全特性。

🔐 **MCP Client 的核心功能**: MCP Client 运行在 LLM 所在的上下文中,负责自动发现 MCP Server、查询其功能并发起调用请求,最后将返回结果转换为 LLM 可以理解的自然语言。OpenAI 的 Agents SDK 已经内置了 MCP Client,未来将集成到更多应用中,方便开发者使用。

🤖 **MCP 的优势与挑战**: MCP 提供开放的生态,但同时也引入了新的安全风险,如 Tool Injection 和 Prompt Injection。为了应对这些挑战,微软等公司正在构建 MCP 能力注册中心,并引入权限认证、可调用范围管理等机制,以确保 MCP 的安全性和可靠性。

基于最新 MCP 规范(Schema Version:2025-06-18)

随着大语言模型(LLM)成为智能系统核心引擎,模型“能理解”远比“能调用”来得更快。如何让模型可靠地调用工具、管理任务、处理资源,逐渐成为构建 Agent 系统的基础挑战。Model Context Protocol(MCP)应运而生,它提供了一套清晰、通用的调用契约,使 LLM 能够安全、高效、语义一致地与服务接口交互。Model Context Protocol(MCP) 由 Anthropic 于 2024 年底提出,随后被 OpenAI、Microsoft、Google 等巨头采纳,MCP 已成为连接 LLM 与真实世界能力的桥梁。它是 Function Calling 的演进,也是 Agent 系统迈向实用的重要支撑。

(图像来自:github.com/open-interp…

1 什么是 MCP?

Model Context Protocol(MCP) 是一种专为 LLM 打造的通用接口协议,基于 JSON-RPC 2.0 构建,目标是在不绑定厂商的前提下,让任何模型都可以发现、调用外部功能(tools)和数据资源(resources),统一接入各种工具链。

它的核心设计理念包括:

1.1 MCP 的三大核心组成

sequenceDiagram    title MCP 协议下 LLM 工具调用与响应流程        participant User    participant MCPClient as MCP-Client    participant LLM    participant MCPServer as MCP-Server    User ->> MCPClient: 发送请求    MCPClient ->> LLM: 传递用户查询及工具描述 [1,2](@ref)    LLM -->> MCPClient: 返回需调用的工具指令    MCPClient ->> MCPServer: 执行工具调用(HTTP/SSE/stdio)[1](@ref)    MCPServer -->> MCPClient: 返回执行结果    MCPClient ->> LLM: 传递工具执行结果 [2](@ref)    LLM -->> MCPClient: 生成自然语言响应    MCPClient -->> User: 返回最终响应

1. MCP Server —— 能力的提供者

MCP Server 是一个“对外注册能力和数据”的服务节点。它通过 JSON Schema 格式声明:

2. MCP Client —— 模型端的接入适配器

MCP Client 运行在 LLM 所在的上下文中,负责:

OpenAI 的 Agents SDK 已经内置了 MCP Client,未来也可能集成到更多应用中,如 VSCode Copilot、Windows Copilot、浏览器助手等。

3. LLM Agent —— 思考 + 执行的主体

Agent 是具备规划、推理、多步执行能力的 LLM 应用。例如:

过去这些流程要写死在程序中,现在只需通过 MCP 发现 +调用即可。

sequenceDiagram    title 多MCP智能体复杂任务编排流程    participant User as 用户    participant Agent as 智能体    participant MCP1 as 规划引擎 MCP Server    participant MCP2 as 地址解析 MCP Server    User ->> Agent: 提交任务(如:配送最优路径生成)    Agent ->> Agent: 分解任务、规划调用流程    Agent ->> MCP2: 地址标准化(解析文本为结构化地址)    MCP2 -->> Agent: 返回标准地址对象        Agent ->> MCP1: 调用规划引擎(输入结构化地址等参数)    MCP1 -->> Agent: 返回初步规划方案    Note right of Agent: 智能体判断结果是否符合业务约束    Agent ->> Agent: 若不满足,则调整约束参数    Agent ->> MCP1: 重新调用规划引擎    alt 需要再次解析新地址        MCP1 ->> MCP2: 触发新一轮地址解析        MCP2 -->> MCP1: 返回新地址对象    end    MCP1 -->> Agent: 返回多种备选规划方案    Agent -->> User: 交付最终多方案规划结果

1.2 Function Calling 与 MCP 有什么不同?

功能Function Calling(OpenAI)MCP(开放协议)
接入方式开发者自定义 schemaJSON-RPC 标准化
适配对象ChatGPT 系列任意 LLM
功能列表静态注册动态发现(list_tools)
安全机制需自行实现支持取消 / 权限管理
工具执行方通常是 OpenAI 服务器用户本地或远程 MCP Server
生态整合专属 API开放注册中心(Microsoft、Claude、Gemini 等通用)

简而言之,Function Call 是 OpenAI 的“私有厨房”,MCP 是全世界都可以使用的“厨房标准化接口”。虽然 MCP 带来了灵活开放的生态,但它也引入了新的攻击面,例如:

因此,微软正在将 MCP 接入 Windows 系统安全沙盒中(AI Foundry);OpenAI 和 Anthropic 也在构建 MCP 能力注册中心,并引入权限认证、可调用范围管理等机制。

项目内容
协议名称Model Context Protocol(MCP)
发布者Anthropic,OpenAI,Microsoft 等联合
功能定位统一 LLM 调用外部工具与数据源的接口协议
技术基础JSON-RPC 2.0 + JSON Schema
关键组件MCP Server、MCP Client、Agent
典型用途文件管理、数据库操作、自动化助手、浏览器插件
替代方案OpenAI Function Calling(功能较弱)
安全风险Prompt Injection、恶意 Server、权限失控等

1.3 参考

2 MCP Server 接口设计示例

基于最新 MCP 规范(截至 2025‑06‑18)

2.1 MCP Manifest(/manifest.well-known/mcp/manifest

MCP Manifest 是模型调用服务的“蓝图”,它不仅描述可用工具的参数结构,也包含调用行为提示、版本信息、资源结构等关键元信息。建议每个 MCP 服务通过 /manifest.well-known/mcp/manifest 提供静态清单,以供模型在调用前理解其能力边界。

{  "schema_version": "2025-06-18",  "name": "vrp-planner-mcp",  "title": "VRP Planner",  "description": "多约束多车辆智能调度规划引擎",  "version": "1.2.0",  "last_updated": "2025-07-14T03:00:00Z",  "capabilities": {    "callback": {      "field": "callback_url",      "methods": ["webhook"],      "description": "支持异步任务完成后的 Webhook 通知"    },    "notifications": {      "supported": true,      "events": ["progress", "complete", "cancelled"]    },    "elicitation": {}  },  "oauth": {    "resource_metadata": "https://auth.example.com/.well-known/oauth-authorization-server",    "resource_indicators_supported": true  },  "tools": [    {      "name": "create_scenario",      "title": "Create Scenario",      "description": "创建配送场景,包括车辆和工单",      "inputSchema": { "$ref": "#/components/schemas/Scenario" },      "returns": {        "type": "object",        "properties": {          "scenario_id": { "type": "string", "example": "scenario-123" }        },        "required": ["scenario_id"]      },      "annotations": {        "readOnlyHint": false,        "destructiveHint": false,        "idempotentHint": false,        "openWorldHint": false      },      "_meta": {        "example": {          "name": "北京城配",          "planning_date": "2025-07-15",          "agents": [{ "id": "veh-1", "capacity": 100 }],          "tickets": [{ "id": "t-1", "location": "LOC_A", "demand": 20 }]        }      }    },    {      "name": "solve_vrp",      "title": "Solve VRP",      "description": "提交 VRP 求解任务",      "inputSchema": {        "type": "object",        "properties": {          "scenario_id": { "type": "string", "example": "scenario-123" },          "solve_time": { "type": "string", "default": "PT30S", "pattern": "^PT\\d+S$", "example": "PT60S" },          "callback_url": { "type": "string", "format": "uri", "example": "https://example.com/webhook" }        },        "required": ["scenario_id"]      },      "returns": {        "type": "object",        "properties": {          "job_id": { "type": "string", "example": "job-abc-123" },          "submitted_at": { "type": "string", "format": "date-time", "example": "2025-07-14T03:10:00Z" }        },        "required": ["job_id", "submitted_at"]      },      "annotations": {        "readOnlyHint": false,        "destructiveHint": false,        "idempotentHint": true,        "openWorldHint": false,        "callbackSupport": true      }    },    {      "name": "query_vrp_status",      "title": "Query VRP Status",      "description": "查询 VRP 求解进度与状态",      "inputSchema": {        "type": "object",        "properties": {          "job_id": { "type": "string", "example": "job-abc-123" }        },        "required": ["job_id"]      },      "returns": {        "type": "object",        "properties": {          "job_id": { "type": "string", "example": "job-abc-123" },          "status": { "type": "string", "enum": ["SOLVING", "FAILED", "COMPLETED"], "example": "SOLVING" },          "progress": { "type": "integer", "minimum": 0, "maximum": 100, "example": 45 }        },        "required": ["job_id", "status", "progress"]      },      "annotations": {        "readOnlyHint": true,        "destructiveHint": false,        "idempotentHint": true,        "openWorldHint": false      }    },    {      "name": "cancel_vrp_job",      "title": "Cancel VRP Job",      "description": "取消正在进行的 VRP 求解任务",      "inputSchema": {        "type": "object",        "properties": {          "job_id": { "type": "string", "example": "job-abc-123" }        },        "required": ["job_id"]      },      "returns": {        "type": "object",        "properties": {          "cancelled": { "type": "boolean", "example": true },          "cancelled_at": { "type": "string", "format": "date-time", "example": "2025-07-14T03:12:00Z" }        },        "required": ["cancelled", "cancelled_at"]      },      "annotations": {        "readOnlyHint": false,        "destructiveHint": true,        "idempotentHint": true,        "openWorldHint": false      }    }  ],  "components": {    "schemas": {      "Scenario": {        "type": "object",        "properties": {          "name": { "type": "string", "example": "北京城配" },          "planning_date": { "type": "string", "format": "date", "example": "2025-07-15" },          "agents": {            "type": "array",            "items": { "$ref": "#/components/schemas/Agent" }          },          "tickets": {            "type": "array",            "items": { "$ref": "#/components/schemas/Ticket" }          }        },        "required": ["name", "planning_date", "agents", "tickets"]      },      "Agent": {        "type": "object",        "properties": {          "id": { "type": "string", "example": "veh-1" },          "capacity": { "type": "integer", "example": 100 }        },        "required": ["id", "capacity"]      },      "Ticket": {        "type": "object",        "properties": {          "id": { "type": "string", "example": "t-1" },          "location": { "type": "string", "example": "LOC_A" },          "demand": { "type": "integer", "example": 20 }        },        "required": ["id", "location", "demand"]      }    }  }}

清单说明

capabilities

capabilities.callback

声明服务端支持客户端提供 callback_url,用于异步通知任务完成或失败。适用于长任务(如 solve_vrp),当任务完成时,服务端会向客户端的 callback_url 发 POST 通知,无需客户端主动查询状态。

典型结构

"capabilities": {  "callback": {    "field": "callback_url",    "methods": ["webhook"],    "description": "支持异步任务完成后的 Webhook 通知"  }}

MCP 支持异步调用,推荐使用 Webhook 模式回调模型:

capabilities.notifications

声明服务端支持通过 Streamable HTTP + Notifications 向客户端推送事件(例如:进度更新、完成通知、取消确认),客户端实时接收,无需轮询。

典型结构

"capabilities": {  "notifications": {    "supported": true,    "events": ["progress", "complete", "cancelled"]  }}

工具注解(Tool Annotations)

**工具注解(Tool Annotations)**是对每个工具行为的元信息提示,帮助 Client 和 LLM 更安全、高效地使用这些工具:

假设有一个工具 delete_file

{  "name": "delete_file",  "annotations": {    "readOnlyHint": false,    "destructiveHint": true,    "idempotentHint": true,    "openWorldHint": false  }}
Hint 名称类型含义说明使用场景示例
destructiveHintboolean是否会对系统产生破坏性修改,如删除、修改、重命名、发起变更等操作。删除任务、取消订单、修改配置等
idempotentHintboolean幂等性提示:重复调用不会改变最终结果,可安全重试。删除资源(已删也视为成功)、查询状态等
readOnlyHintboolean是否为只读操作,即不对系统状态产生任何更改。查询状态、获取详情、列表获取等
openWorldHintboolean是否访问开放系统或外部世界,如互联网或跨系统调用,涉及安全边界时应标记为 true访问外部 API、调用外部模型、发送通知等
callbackSupportboolean?(可选)是否支持异步回调机制(如 webhook),便于客户端获知操作完成。异步求解任务、模型执行任务等

注:

OAuth 授权配置

Manifest 中需包含 OAuth 授权相关元数据,如:

"oauth": {  "resource_metadata": "https://auth.example.com/.well-known/oauth-authorization-server",  "resource_indicators_supported": true}

授权流程

具体OAuth配置推荐使用Keycloak。

2.2 MCP JSON‑RPC 接口

tools/list(获取工具清单)

请求

{ "jsonrpc":"2.0","id":"1","method":"tools/list","params":null }

响应

{ "jsonrpc":"2.0","id":"1","result": [/* manifest.tools 的内容 */] }

客户端可使用该接口动态发现工具,构建调用选项。

tools/call(调用工具执行)

请求样例

{  "jsonrpc":"2.0",  "id":"2",  "method":"tools/call",  "params": {    "name": "solve_vrp",    "arguments": { "scenario_id":"uuid-abc","solve_time":"PT60S" }  }}

method 字段表明调用工具,服务端据此找到对应工具并执行。

响应(正常)

{ "jsonrpc":"2.0","id":"2","result": { "job_id":"job-001","submitted_at":"2025-07-13T10:05:00Z" } }
错误处理结构

推荐将错误编号、类型描述和上下文信息统一返回

响应(错误)

{  "jsonrpc":"2.0",  "id":"2",  "error": {    "code": 4002,    "type": "MissingParameter",    "message": "参数 scenario_id 缺失",    "traceId": "abc-123"  }}
任务取消

请求

{  "jsonrpc": "2.0",  "id": "3",  "method": "tools/call",  "params": { "name": "cancel_vrp_job", "arguments": { "job_id": "job-001" } }}

同步响应

{  "jsonrpc": "2.0",  "id": "3",  "result": { "cancelled": true, "cancelled_at": "2025-07-13T10:07:00Z" }}

随后服务端也会通过 notifications/cancelled 主动推送事件

Notifications(事件推送,取代持续轮询)

对于可能长时间运行的工具操作,应考虑提供状态查询和取消的机制:

进度推送

{  "jsonrpc": "2.0",  "method": "notifications/progress",  "params": { "job_id": "job-001", "progress": 80 }}

完成推送

{  "jsonrpc": "2.0",  "method": "notifications/complete",  "params": { "job_id": "job-001", "result": { /* 求解结果数据 */ } }}

取消推送

{  "jsonrpc": "2.0",  "method": "notifications/cancelled",  "params": { "job_id": "job-001", "cancelled_at": "2025-07-13T10:07:00Z" }}

推荐工作流

    客户端 POST tools/call 启动作业,并开启 SSE 通道(或通过 Streamable HTTP 持续接收事件)。服务器通过 notifications/progressnotifications/completenotifications/cancelled 等推送任务实时状态,客户端无需主动轮询 query_vrp_status,只在断线或异常时可手动查询。取消任务,依然通过 tools/call + cancel_vrp_job 工具实现。

2.3 资源接口

根据 MCP 2025‑06‑18 最新规范,结合 Notifications 与 Streamable HTTP 推荐实践,对资源接口与设计要点进行了调整和补充。最终优化内容如下:

MCP 资源(Resource)代表服务可提供的结构化数据内容,包括文件、API 响应、数据库记录等,均以唯一 URI 或 URI 模板标识。Manifest 中可统一声明资源类型及其 JSON Schema。

资源类型与 URI 命名

资源 URI 应规范命名,例如:

所有资源均应采用清晰的协议前缀(如 file://db://logs://),便于客户端识别来源和处理方式。若资源涉及敏感字段,manifest 中可使用 "x-sensitive-fields": ["user_id", "price"] 提示客户端脱敏或限制暴露。

资源列表接口

resources/list (获取资源清单)

请求:

{ "jsonrpc": "2.0", "id": "5", "method": "resources/list", "params": null }

响应:

{  "jsonrpc": "2.0",  "id": "5",  "result": [    {      "uri": "file:///var/reports/plan-2025-06.pdf",      "name": "6月调度执行报告",      "mimeType": "application/pdf",      "size": 2183344    },    {      "uriTemplate": "logs://vrp/{date}",      "name": "VRP 系统调度日志",      "mimeType": "text/plain"    }    // ...更多资源  ]}

推荐每个资源项包含:uri/uriTemplatenamemimeTypesize(如可用)、description 等元数据。Manifest 可进一步通过 JSON Schema 规范资源结构。

资源读取接口

resources/read(读取资源内容)

请求:

{  "jsonrpc": "2.0",  "id": "6",  "method": "resources/read",  "params": { "uri": "logs://vrp/2025-07-13" }}

响应:

{  "jsonrpc": "2.0",  "id": "6",  "result": {    "content": "...2025-07-13 的日志内容...",    "mimeType": "text/plain"  }}

文本型内容用 content 字段返回,二进制内容(如图片、Excel等)建议以 base64 编码置于 blob 字段,并指明 mimeType。复合资源可返回数组,如目录下多个文件。

2.4 调用生命周期

sequenceDiagram    autonumber    participant 智能体 Agent    participant MCP服务端    participant SSE通道    participant WebHook接口(callback_url)    %% 工具发现与调用    智能体 Agent->>MCP服务端: tools/list → 获取工具清单    MCP服务端-->>智能体 Agent: 返回 tools + inputSchema    智能体 Agent->>MCP服务端: tools/call → 提交 solve_vrp 调用(附带 callback_url)    MCP服务端-->>智能体 Agent: 返回 job_id:"job-001",任务提交成功    %% 主流程:使用 SSE 实时获取进度    智能体 Agent->>SSE通道: 建立 SSE 通道,监听任务进度    SSE通道-->>智能体 Agent: notifications/progress → 任务进度 20%    SSE通道-->>智能体 Agent: notifications/progress → 任务进度 80%    SSE通道-->>智能体 Agent: notifications/complete → 任务完成结果    %% 可选分支 A:使用 Webhook 接收通知    MCP服务端-->>WebHook接口(callback_url): notifications/complete → POST 最终结果    %% 可选分支 B:Agent 主动轮询获取结果    智能体 Agent->>MCP服务端: tools/call → query_status 查询任务状态    MCP服务端-->>智能体 Agent: 返回任务完成状态 + 结果数据

2.5 实践建议

2.6 参考

3 动态生成满足类型约束的输入数据

MCP 的一大优势在于模型能够根据 manifest 自动构造正确格式的工具输入。为实现这一点,必须确保类型约束明确上下文提示充分,使 LLM 在决策调用时能够“填空作答”,动态生成合法的 JSON 参数。

3.1 Schema 驱动输入生成

当客户端(LLM 主机)获取 MCP 服务的 manifest 后,会解析出各工具的参数Schema。在对话过程中,如果模型决定使用某工具,它会按照 Schema 组织参数。

3.2 复杂对象的生成

当工具参数本身是复杂结构(如 Scenario 场景对象,包含嵌套字段),需要模型一次性构造嵌套 JSON。为辅助模型:

3.3 传统业务数据映射

企业的数据分散在多张表、多个系统里,如果不能方便地把这些数据整理成标准的 JSON 格式,LLM 智能体就无法顺利调用算法和工具。只有把数据结构统一好,智能体才能理解业务、自动执行任务,让企业的数据真正用起来、发挥出更大的价值。在这里提出一种五步对接方法,具体如下:

A 读取 MCP manifest 的 inputSchema

B 导出业务数据表的记录(JSON格式)

C 设计提示词,引导 LLM 自动生成转换代码

D 测试用例驱动 Schema 校验与逻辑校验

E 脚本的集成或 Function 化,为 LLM/Agent 提供标准化业务数据

实践建议

最大限度利用 LLM 自动化能力,减少人工编码与维护负担。

需要关注的风险

3.4 验证与纠错

服务端在接收到模型生成的输入后,应对其进行验证,确保满足 Schema 约定。可以借助 JSON Schema 校验库或静态类型工具(如 Pydantic)进行检查,在发现缺失字段或类型不符时返回结构化错误,让模型明白哪里不合规。模型通常会依据错误信息重试,并修正输出以满足约束。因此,清晰的错误反馈也是动态生成正确输入的重要环节。

此外,模型可能会依赖上下文动态调整输入。例如某些工具manifest是动态的,只有满足一定条件才出现额外参数。模型需要先通过 tools/list 获取最新Schema,再生成输入。这要求客户端实现上每次对话开始或 manifest 有变动时都刷新模型对工具的认知。Anthropic Claude 等实现支持 notifications/tools/list_changed 来通知工具列表变化,模型据此更新调用策略。

总结来说,让模型动态地产生合规输入的关键在于:完善的模式定义充分的语义提示。通过 MCP manifest,将输入输出格式精确定义,并辅以描述和示例,LLM 就能在推理中自动拟合这些约束,构造出满足类型要求的 JSON 对象。这种能力使智能代理能够安全地调用复杂操作(如规划场景Scenario的创建等)而不需要硬编码每种接口格式,大大提高了系统的灵活性和健壮性。

3.5 参考

4 降低 LLM Token 消耗的策略

在集成 MCP 工具时,需要密切关注上下文 Token的消耗,因为每增加一个工具及其说明,都会占用模型的提示窗口,进而增加费用和延迟。

综合以上策略,核心在于减少模型上下文中无效或次要的信息。每一次Agent-LLM交互都会消耗token并产生成本和时延,所以应努力让每个token都“物有所值”。通过精简工具和数据、聪明地调度何时提供何种信息,以及技术手段如缓存和监控,开发者可以将LLM集成的开销降到最低。正如经验所示,一个适度提供精确信息的MCP集成,能以更低的token成本获得更高质量的结果。

4.1 参考

5 接口重构

将传统微服务功能暴露为 MCP 工具,有时需要调整接口设计,以符合 MCP 的统一规范和 JSON Schema 要求。这种适配如果逐个手工改造,工作量和风险都很高。例如,一个老系统可能有众多 REST API,各自返回格式不同,也缺少机器可读的契约说明。那么要把它们纳入 MCP,就需为每个API编写 Schema、提供描述,并统一通过 manifest 公布——相当于对接口进行重构和数据格式转换。这被视为MCP落地的一大挑战之一。

5.1 接口重构是否必要

好消息是,未必需要对每个微服务API大动干戈。业界已经出现多种MCP 适配层和自动化工具,帮助将现有接口快速包装为 MCP 工具,尽量减少人工重构:

因此,一般不建议为适配 MCP 而彻底推倒重写现有接口。相反,可以增设一层 MCP 接口或使用工具将它们包装起来。在保持原有微服务不变的情况下,通过 MCP Server 将其功能暴露给 LLM。这避免了高昂的系统重构代价和潜在风险。

Quarkus 提供的 MCP Server 扩展

安全认证支持

支持多种通信形式

快速上手示例

<dependency>  <groupId>io.quarkiverse.mcp</groupId>  <artifactId>quarkus-mcp-server-sse</artifactId>  <version>1.2.0</version></dependency>
@ApplicationScopedpublic class ServerFeatures {  @Tool(description = "Convert text to lowercase")  String toLower(@ToolArg(description="Text") String input) {    return input.toLowerCase();  }  @Resource(uri="file:///data/config.json")  BlobResourceContents config() { /* load file */ }}

启动 Quarkus 应用后,它会自动:

5.2 何时需要重构

然而,在某些情况下适度的接口重构是值得的:

理想情况下,通过 MCP,我们希望实现工具接口统一与现有系统解耦。完全重构虽非必须,但一定程度的契约梳理不可避免。建议的路径是:

正如 MCP 标准所强调的,清单化的工具接口使不同语言、平台的系统都能无缝衔接,大幅减少“N对M”集成的负担。通过聪明地利用现有资源并适度演进接口设计,我们无需大规模重写代码,就能让智能规划引擎畅通无阻地调用各种微服务,实现AI时代的微服务生态升级。

5.3 参考

6 结语

MCP 协议为构建“模型可调用世界”奠定了基础,它规范了工具、资源、任务执行与异步反馈等关键组件,是实现 Agent-to-System 协同的核心协议之一。但 MCP 聚焦于“操作层”的接口设计,而在真正面向用户的场景中,还需与可视化交互、用户意图理解、流程指引等机制结合。

因此,我们正在探索另一项关键协议 —— AG‑UI 协议,它旨在为 Agent 提供画布式、组件化的 UI 指令与数据绑定机制,使 LLM 不仅能调用工具,还能动态驱动 UI,让“人机共创”成为现实。

下一篇文章将全面介绍 AG‑UI 协议设计与实现,敬请期待。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP LLM Agent 工具调用 JSON-RPC
相关文章