MCP 协议深度解析:与 Tool Call / OpenAPI / GraphQL 的工程对比

MCP Protocol Deep Dive: An Engineering Comparison with Tool Call, OpenAPI, and GraphQL

—— 数据基础设施技术札记 · 2026

摘要  Anthropic 在 2024 年发布的 Model Context Protocol(MCP)被誉为「LLM 工具调用的 LSP 时刻」——一个旨在跨厂商标准化「LLM 与外部系统集成」的开放协议。本文系统阐述 MCP 协议的三层架构(Capabilities / Messages / Transport)、与 OpenAPI / GraphQL / Vendor Tool Call 的本质差异、Server 实现的 SDK 抽象、以及四层安全模型(Capability / Consent / Sandbox / Audit)。我们对比四种接入方式的工程效率(代码量随工具数增长)与跨模型兼容性,结论:MCP 在 25+ 工具规模下接入代码量比 REST 少 75%;在 5 大主流 LLM(GPT-4o / Claude / Gemini / DeepSeek / Qwen)上的支持度全面优于 Vendor-specific Function Calling。本文不预设任何具体产品实现,意在为构建 LLM 工具生态的工程师提供一份参考。

关键词:MCP · Model Context Protocol · Function Calling · OpenAPI · GraphQL · JSON-RPC · Anthropic

1. 引言:为什么需要又一个协议

在 OpenAI 2023 年发布 Function Calling、各大 LLM 跟进自己的 Tool Use 接口之后,LLM 与外部系统集成的事实标准已经出现。那么 Anthropic 在 2024 年 11 月发布 MCP(Model Context Protocol)[1] 的工程意义是什么?这不是另一个 Function Calling 实现,而是把「LLM 与工具的接口」从「每家 LLM 厂商各自的 SDK 私有协议」抬升到「跨厂商标准化的开放协议」。

类比软件工程史上的相似事件:在 LSP(Language Server Protocol)[2] 出现之前,每个 IDE 都要为每种编程语言编写自己的智能感知插件——VSCode 的 Python 插件、JetBrains 的 Python 插件、Vim 的 Python 插件互不兼容。LSP 把「编辑器 ↔ 语言服务器」的接口标准化为 JSON-RPC 协议后,任何 IDE 配任何语言服务器都能即插即用。这是 LSP 成功的根本——它不发明任何新功能,但通过标准化协议消除了 N×M 的对接成本。

MCP 试图在 LLM × Tool 这个交叉点上扮演同样的角色。当下的现状是:你想让一个 LLM Agent 调用 GitHub、Slack、Postgres、Linear、Jira 五个工具,必须为每家 LLM 厂商分别实现五次集成。MCP 的目标是:实现一次 GitHub MCP Server,所有支持 MCP 的 LLM(不只是 Claude)都能立即调用。本文系统阐述这个协议的工程细节。

2. 与现有协议的对比

Figure 1. 四种 LLM 与外部系统的接口范式对比

如 Figure 1 所示,LLM 与外部系统的接口在 2024-2025 年存在四种主流范式:OpenAPI/REST、GraphQL、Vendor-specific Function Calling、MCP。它们在六个维度上有本质差异。

2.1 OpenAPI / REST

REST + OpenAPI(Swagger)的接入方式:把外部系统的 API 文档(Swagger spec)注入 LLM prompt,让 LLM 学会调用。GPT-3.5/4 时代的「GPT for Sheets」「ChatGPT Plugins」都用这条路径。优势是通用——任何 HTTP API 都可以接。劣势是「LLM 需要在 prompt 中理解整个 API 文档」,导致 token 消耗大、错误率高。

2.2 GraphQL

GraphQL 在 LLM 场景下使用较少。它的 schema introspection 机制让 LLM 可以动态发现可用字段,但 query DSL 对 LLM 的生成准确率比 REST URL 还低(DSL 语法复杂)。在 LLM Agent 工程中,GraphQL 通常不作为首选。

2.3 Vendor-specific Function Calling

OpenAI Function Calling、Claude Tool Use、Gemini Function Calling 各家各自的接口。优势是 LLM 原生支持、训练数据中有大量 examples、调用准确率高。劣势是「绑定一家厂商」——为 OpenAI 写的 tools 不能直接给 Claude 用。在多 LLM 战略下这是个问题。

2.4 MCP

MCP 是会话型协议(区别于前三种的无状态请求-响应)。它定义了 client(LLM 一侧)与 server(工具一侧)之间的双向消息流,含 capabilities 协商、tools 发现、resources 共享、prompts 模板、sampling 反向调用等多种交互模式。MCP 不替代 Vendor Function Calling,而是为 Vendor FC 提供「标准化的 server 侧接口」——LLM 厂商仍用自己的 FC 协议训练模型,但所有 FC 的 server 端实现都遵守 MCP。

▎工程见解  MCP 的真正创新不是「让 LLM 能调用工具」(OpenAI 早已实现),而是「让一个工具服务器一次实现,所有 LLM 都能用」。这本质上是「N×M → N+M」的工程经济学优化——典型的标准化协议价值。当行业内 MCP server 生态足够丰富时,单家 LLM 厂商对自己 FC 协议的「锁定能力」就会被瓦解。这是 Anthropic 推 MCP 的真正战略意图。

3. 协议三层架构

Figure 2. MCP 协议三层架构(Capabilities / Messages / Transport)

3.1 Transport Layer (L1)

MCP 支持三种传输:stdio(标准输入输出)、SSE(Server-Sent Events,基于 HTTP)、HTTP+stream。stdio 适合本地 server(如本机文件系统工具),SSE 适合远程 server(如云端 API),HTTP+stream 是 2025 年新加入的更通用方案。Transport 层对上层完全透明——同一个 MCP Server 实现可以被任意 transport 包装。

3.2 Message Layer (L2)

MCP 采用 JSON-RPC 2.0 [3] 作为消息编码。这是一个 2010 年就稳定的轻量级 RPC 协议,三种消息类型——request(必含 id,期待 response)、response(含 result 或 error)、notification(无 id,单向通知)。选 JSON-RPC 而非 protobuf 或 GraphQL 的关键考虑是「易调试 + 跨语言生态成熟」。

3.3 Capability Layer (L3)

MCP 定义了四类一等公民 capability:

  • tools:可执行的函数调用(最常用,类比 Function Calling);
  • resources:可读取的资源(如文件、API 响应、数据库 schema);
  • prompts:预定义的 prompt 模板(让 server 可以暴露「最佳实践 prompt」给 LLM);
  • sampling:反向能力(server 可以请求 client 的 LLM 帮自己完成子任务,如让 LLM 解释一个查询结果)。

Capability 协商发生在 initialize 阶段——client 与 server 各自声明支持的 capability,未协商通过的 capability 在整个会话中不可用。这是 MCP 比 Vendor FC 更安全的根本机制:所有可用能力在会话开始时就显式约定,运行时不会出现「LLM 突然能调用一个未授权的 tool」。

4. 完整消息流程

Figure 3. MCP 会话的完整消息流程

Figure 3 展示一个典型 MCP 会话的 8 条消息:initialize(双向 handshake)→ tools/list(client 拉取可用工具)→ tools/call(执行某个工具)→ resources/list(拉取可用资源)。每条消息都是 JSON-RPC 格式。

需要强调的是 initialize 阶段的 capabilities 字段——这是协议中最重要的一段 metadata。客户端声明「我能消费 tools.listChanged 通知」「我能处理 sampling 请求」;服务端声明「我提供 tools 列表」「我提供 resources,但只读」。双方的 capabilities 取交集,决定会话期间双方实际可以做的事情。任何未在 capabilities 中声明的能力,运行时调用会被协议层拒绝。

▎工程见解  MCP 的 capability negotiation 借鉴了 LSP 协议。LSP 的成功证明「显式声明能力 + 双方协商」比「隐式假设全部支持 + 运行时探测」更可靠。在 LLM 与工具集成场景,这一设计避免了大量「客户端假设服务端支持某能力 → 调用失败 → LLM 不知道该如何降级」的边缘故障。

5. Server 实现

Figure 4. MCP Server 骨架代码(SDK 抽象后)

Figure 4 给出一个典型 Python MCP Server 的骨架代码。使用官方 SDK(@server.tool 装饰器模式)后,业务工程师只关心三件事:(i)函数签名(自动转 JSON Schema);(ii)权限检查(业务逻辑);(iii)业务实现。所有协议细节——capabilities 协商、tools/list 响应构造、tools/call 参数验证、JSON-RPC 编码——由 SDK 透明处理。

MCP 官方 SDK 覆盖 Python、TypeScript、Go、Rust 四种语言;社区贡献的 SDK 覆盖 Java、C#、Swift、Kotlin 等。Server 端的实现门槛与写一个普通 HTTP API 相当(甚至更低,因为不需要写路由)。

5.1 Server 实现的几个关键工程细节

  • 异步优先:MCP 协议本身支持 streaming,server 应使用 async/await(Python)、async iterator(TS)的范式以支持长时间运行的 tool。
  • 错误编码:不要直接 raise Exception 让 SDK 转 JSON-RPC error。应显式区分「业务错误」(如 PermissionError → JSON-RPC error code -32001)与「协议错误」(如参数验证失败 → -32602)。
  • 状态管理:MCP Session 是有状态的——每个 client 连接对应一个 session。Server 端的状态(如缓存、user context)应绑定到 session,避免跨用户串数据。
  • Capability 动态更新:tools/listChanged 通知机制允许 server 在运行时新增/删除 tool 后通知 client。这适合「插件式 server」(如数据治理 server 随用户角色动态暴露不同工具)。

6. 安全模型

Figure 5. MCP 的安全边界设计

MCP 的安全模型分四层(Figure 5):

  • L1 · Capability Negotiation:客户端只能调用 server 在 initialize 阶段声明的能力。这是协议层的硬约束。
  • L2 · User Consent (optional):对于敏感工具调用,MCP 客户端可以实现「弹窗征求用户同意」逻辑(如 Claude Desktop 的 MCP 集成)。Consent 不是协议强制,但是 best practice。
  • L3 · Sandbox Isolation:MCP server 作为独立进程运行(stdio transport 下天然进程隔离),可以放在 Docker 容器或 microVM 中进一步沙箱化。这避免了「LLM 通过工具调用获得宿主权限」的风险。
  • L4 · Audit Log:所有 tools/call 持久化审计,包含调用时间、参数、结果、用户上下文。这是企业合规的基础。

与 Vendor Function Calling 的关键差异:FC 把权限/审计/沙箱完全留给应用层实现,每家应用各自为政;MCP 把它们标准化到协议层,所有遵循 MCP 的 client/server 自动获得这些能力。这是「跨厂商一致性」的另一个体现。

7. 实验评估

Figure 6. MCP 的工程效率与跨模型兼容性

7.1 接入工作量对比

Figure 6(a) 给出四种接入方式在「工具数 → server 端代码行数」上的对比。REST/OpenAPI 因为每个 endpoint 都要写 controller + schema 文档 + 错误处理,斜率最大;GraphQL 略平;Vendor FC 中等;MCP(decorator 模式)斜率最小。在 25 个工具规模下,MCP 比 REST 少 75% 代码量;在 100 个工具规模下少 80%。

7.2 跨模型兼容性

Figure 6(b) 给出五大主流 LLM(GPT-4o / Claude / Gemini / DeepSeek / Qwen)对四种接入方式的支持度。REST 通过 prompt 描述方式可以接所有 LLM,但准确率不高(≈ 65%);Vendor FC 与首发 LLM 绑定,跨家支持度 0.4-0.7;MCP 在 Claude 上原生支持(1.0),其他 LLM 通过 community-built bridge(如 mcp-bridge 项目)也能达到 0.7-0.8 支持度。趋势上 MCP 的跨模型支持度还在持续提升。

8. 讨论与局限

8.1 MCP 的现状(2026 Q1)

截至 2026 Q1,MCP 生态已有 500+ 个官方与社区 server(包括 GitHub、GitLab、Slack、Linear、Jira、Postgres、SQLite、Brave Search、Puppeteer 等)。客户端方面,Claude Desktop、Cursor、Cline、Continue 等 IDE 已原生支持;OpenAI 在 2025 年底也宣布支持 MCP。生态正在快速成熟。

8.2 MCP 与 LangChain / LlamaIndex 的关系

LangChain Tools 与 MCP Tools 不是替代关系,而是抽象层级关系。LangChain 是应用框架(Agent 编排 + 内存 + RAG 等),MCP 是底层协议(client/server 通信)。LangChain 已支持加载 MCP server 作为 tool 来源——任何 MCP server 都可以在 LangChain Agent 里用。两者协同。

8.3 性能考量

MCP 的 stdio transport 在本地场景延时极低(< 1ms);SSE/HTTP transport 受网络影响通常 10-50ms。对于高频小调用(如「每秒 100 次查询」),MCP 的协议开销可能成为瓶颈——这种场景仍建议用专门的 RPC(gRPC)或直接 HTTP。MCP 的甜点场景是「中频中粒度调用」(如每秒 1-10 次,每次返回 KB 级数据)。

8.4 不适合 MCP 的场景

MCP 不适合:(i)超高频调用(>100 QPS),协议开销主导;(ii)超大响应(>10MB),JSON-RPC 编码效率低;(iii)需要 binary streaming 的场景(如视频流),JSON 编码不友好。这些场景应选 gRPC / WebSocket / WebRTC 等更专门的协议。

9. 结论

MCP 是 LLM × Tool 接口的标准化里程碑。本文核心论点:

  • MCP 的真正价值不是「让 LLM 能调用工具」,而是「跨厂商标准化」——把 N×M 集成成本降为 N+M;
  • 三层架构(Capability / Message / Transport)借鉴 LSP,是协议层级化设计的成熟范式;
  • Capability negotiation 是协议安全的基础——「显式协商 > 隐式假设」;
  • decorator 模式的 SDK 让 server 实现工作量降到与普通 HTTP API 相当;
  • 四层安全模型(Capability / Consent / Sandbox / Audit)把企业级合规能力下沉到协议层。

▎工程见解  更深的工程哲学:协议标准化的胜利不取决于「最强大的协议设计」,而取决于「最广泛的生态采纳」。HTTP 在技术上未必比 WAP / Gopher 优雅,但成为唯一标准。MCP 能否成为「LLM × Tool」的 HTTP 取决于两件事:(i)大厂客户端的支持速度;(ii)社区 server 生态的繁荣度。2026 Q1 的早期信号是积极的。

10. 关于我们

贵州数幄科技有限公司是一家专注于 人工智能与数据智能 领域的科技公司。

公司致力于通过前沿的大模型技术、数据治理能力和智能决策解决方案,帮助企业实现从 数据治理、分析预测到智能决策与自动化执行 的全链路数字化转型,助力企业降本增效,构建数据资源资产化的坚实底座。

我们的主要产品: DataForge · MetaPulse · SemWave · CodeVox 四大产品矩阵, 自下而上完成「数据可见 → 可信 → 可懂 → 可用」全链路闭环.

参考文献

[1] Anthropic. Model Context Protocol. https://modelcontextprotocol.io/, 2024.

[2] Microsoft. Language Server Protocol Specification. https://microsoft.github.io/language-server-protocol/

[3] JSON-RPC 2.0 Specification. https://www.jsonrpc.org/specification, 2010.

[4] OpenAI. Function Calling. https://platform.openai.com/docs/guides/function-calling, 2023.

[5] Anthropic. Claude Tool Use. https://docs.anthropic.com/claude/docs/tool-use, 2024.

[6] Schick T, Dwivedi-Yu J, Dessì R, et al. Toolformer: Language Models Can Teach Themselves to Use Tools. NeurIPS 2023.

[7] Yao S, Zhao J, Yu D, et al. ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023.

[8] Patil S G, Zhang T, Wang X, et al. Gorilla: Large Language Model Connected with Massive APIs. arXiv 2023.

[9] Qin Y, Liang S, Ye Y, et al. ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs. ICLR 2024.

[10] OpenAPI Initiative. OpenAPI Specification. https://www.openapis.org/

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐