本地工具已经能查询订单,但你希望网页助手、桌面应用和 IDE 都能使用它。如果每个应用都复制一份工具定义和调用适配代码,升级时容易不一致。
可以把能力集中到一个服务,客户端以统一方式发现名称、参数与结果。这就是 MCP 在此处承担的工作。它把能力连接标准化,业务函数内部仍然需要自己处理订单授权与错误。
三个角色沿着请求怎样协作
Host 是用户使用的模型应用,负责会话、工具选择范围、权限交互和结果呈现。Client 是 Host 中负责 MCP 协议的组件。Server 暴露工具、资源或提示,内部访问数据库、文件或其他服务。
例如 Host 先向 shop Server 查询工具列表,将 get_order 转换成模型工具定义。模型生成 call-01 后,Host 校验当前允许调用,Client 发出 MCP 请求 42,Server 查订单并返回,Host 将结果对应到 call-01。
Server 不需要拿到全部用户聊天才能执行一次查询。只应接收完成当前工具所需的参数和获准上下文。Host 连接多个 Server 时,还要区分同名工具及各自凭据。
JSON-RPC 在这里表达什么
JSON-RPC 请求通过 method 指明方法,通过 params 传入参数,通过 id 关联响应。MCP 在这种消息形式上定义 tools/list、tools/call 等语义。
下面是基于 2026-07-28 的教学请求,客户端信息使用虚构值,实际序列化交给 SDK:
{
"jsonrpc": "2.0",
"id": 42,
"method": "tools/call",
"params": {
"name": "get_order",
"arguments": {"order_id": "A1042"},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {"name": "shop-host", "version": "1.0"},
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}
函数参数在 arguments 中,协议元数据在 _meta 中;把 tenant_id 填进元数据也不会自动产生身份认证。返回响应使用相同 JSON-RPC id,但其中的工具内容还要由 Host 转成模型结果。
通知没有普通请求那样的响应配对,不能把每一条日志都当成请求。支持的通知方向与方法取决于协议版本,不能直接把通用 JSON-RPC 的所有可能性当成 MCP 当前允许的行为。
当前版本与旧教程为什么不同
本系列固定讲解 MCP 2026-07-28。该版本采用自包含请求与逐请求版本、能力信息,旧版的 initialize/initialized 和协议 Session 不再是当前主线。Client 可以先调用 server/discover,也可以直接发送请求并处理版本不支持错误。官方版本说明
这里“可以不调用发现”不等于 Server 可以随意不实现规范要求的发现方法。能力可发现、客户端是否提前发现、某次操作是否被授权,也是三个不同问题。
旧 Server 仍可能需要握手。SDK 提供的兼容路径要结合实际对端和版本确认,不能删除所有旧逻辑后宣称任何客户端都能连接。协议版本与 Python 包版本也不是同一数字:本文 SDK 固定为 2.1.1。
无状态协议不等于无状态业务
请求不依赖协议会话,并不意味着售后任务、审批或长任务没有状态。它们可以保存在业务数据库中,由明确的任务 handle 或操作 ID 关联。
如果 Server 把草稿藏在某个连接对应的内存字典,下一次请求落到另一实例就找不到。可以把 draft_id 返回给 Host,后续请求明确引用,并在服务端检查所有权。
HTTP 连接池仍然可能存在,缓存仍然可能存在。移除协议 Session 不会替你解决业务数据一致性,更不会消除授权和共享存储需求。
与普通 HTTP API 怎样组合
已有订单 API 可以由 MCP 工具内部调用。OpenAPI 描述普通 HTTP 服务的路径、参数与响应;MCP 提供面向 Host 的工具、资源和提示发现方式。二者可以共同服务于同一业务能力。
把所有 OpenAPI 操作自动导成模型工具未必合适。接口可能过于底层、参数需要凭据、返回含敏感字段;需要筛选和转换成清楚的任务契约。
如果只有一个本地函数且没有复用需求,直接注册就足够。MCP 增加进程或网络边界、版本与连接管理,收益应来自明确的能力共享需求。
A2A 又处在哪一层
当对方是能够独立接受目标、推进任务、请求补充信息并返回产物的 Agent,A2A 提供任务与消息交互机制;普通订单查询不必包装成长任务 Agent。A2A 核心概念
MCP 也可通过扩展承载长操作,因此不能只按耗时长短选择协议。更重要的是对方提供一个能力调用,还是接受一个具有独立任务语义的委派。
一个 Agent 可以通过工具创建 A2A 任务,任务内部又使用 MCP 查询资料。记录中关联 A2A Task ID、MCP 请求 ID 和业务操作 ID,但不要互相替代。
内存连接和真实传输要分开看
Python SDK 的 Client(server_object) 可直接在进程内分发,不经过完整 JSON-RPC 帧传输。它适合观察注册和结果形状,却不能证明 stdio framing、进程启动或远程认证已经正确。
本系列因此提供 mcp_client_demo.py下载 的内存与 stdio 两种模式。前者理解接口,后者运行独立 Server 进程。它们都未在本次写作中执行。
当你能沿一个请求指出 Host、Client、Server 分别做了什么,再看原语与传输就不会把协议能力误当成模型能力。
继续阅读
下一篇:MCP 不只有工具:Resources、Prompts 与多轮请求。
下载文件、依赖与运行边界见配套指南下载。