LabHub

博客

Model Context Protocol(MCP)参考手册 — 将 AI 连接到外部世界的开放标准

한국어English日本語中文

引言 — MCP 是什么,解决什么问题

Model Context Protocol(MCP),用官方文档的话说,是“用于将 AI 应用连接到外部系统的开源标准”。它统一了 Claude、ChatGPT 这类应用接入数据源(如本地文件、数据库)、工具(如搜索、计算器)、工作流(如特化的提示)的方式。文档把它比作“AI 应用的 USB-C 端口”——就像线缆规格被统一成一种,连接方式也被统一成一种。

为什么需要标准?这常被称为 M×N 问题。当有 M 个 AI 应用、想接入 N 个工具与数据源时,如果没有标准,就得手工编写 M×N 个各不相同的集成。一旦有了一个通用协议,这笔成本就降到 M+N——服务器只做一次,所有会说该协议的客户端都能用;客户端只要实现协议,就能接上所有服务器。用文档的话说,就是“一次构建,处处集成(build once, integrate everywhere)”。MCP 表示这个思路借鉴自 Language Server Protocol(LSP)。正如 LSP 把“编辑器 × 语言”的组合整理成一个标准,MCP 整理的是“AI 应用 × 工具”的组合。

MCP 由 Anthropic 于 2024 年 11 月公开并开源,最初连同 Python、TypeScript SDK 以及面向 Google Drive、Slack、GitHub、Git、Postgres、Puppeteer 的服务器一起发布。此后 OpenAI 和 Google DeepMind 也相继采用,使它事实上成为行业标准。

架构 — 主机、客户端、服务器,以及传输

MCP 是客户端-服务器结构,参与者被定义为三方:

核心规则是“一个服务器对应一个客户端”。主机为每个接入的服务器创建一个专用客户端,各自维持独立的连接。VS Code 同时接入文件系统服务器和 Sentry 服务器时,内部就会生成两个客户端对象。

协议分为两层。数据层(data layer)是基于 JSON-RPC 2.0 的交换协议,定义生命周期管理和原语(工具、资源、提示、通知);传输层(transport layer)处理实际的通信通道与认证。连接是有状态的(stateful),由客户端用 initialize 请求协商 protocolVersion 和彼此的能力(capabilities),准备就绪后再用 notifications/initialized 通知对方,连接由此开始。

传输有两种:

为了让同一条 JSON-RPC 消息在任何传输上都能原样通行,传输层把通信细节从协议中剥离开来。

三种原语 — 工具、资源、提示

原语是 MCP 中最重要的概念,而其核心就是服务器公开的这三种。它们的区别在于“由谁主导”:

资源 URI 分为固定型(直接资源)和参数型(模板)两类(仅作说明):

file:///Users/me/notes.md          # 直接资源 (固定 URI)
calendar://events/2026             # 直接资源
weather://forecast/{city}/{date}   # 资源模板 (参数)

它遵循规整的模式:发现用 */list、获取用 */get、执行用 tools/call。列表是动态的,因此当服务器的工具发生变化时,可以用 notifications/tools/list_changed 之类的通知告知客户端。

反过来,也有客户端向服务器公开的原语:

如何构建服务器

构建服务器的本质,是决定“把什么公开为工具、什么公开为资源、什么公开为提示”。动作归为工具,要读取的上下文归为资源,定型的工作流归为提示。官方 SDK 有 TypeScript、Python、C#、Go(Tier 1),Java、Rust(Tier 2),Swift、Ruby、PHP、Kotlin(Tier 3),它们都按各自语言的惯用法提供相同的功能。具体 API 因 SDK 而异,所以要查阅各语言的文档。

工具定义由名称、说明、输入 schema 组成。以下是官方文档中示例的形态(仅作说明):

{
  "name": "searchFlights",
  "description": "Search for available flights",
  "inputSchema": {
    "type": "object",
    "properties": {
      "origin": { "type": "string", "description": "Departure city" },
      "destination": { "type": "string", "description": "Arrival city" }
    },
    "required": ["origin", "destination"]
  }
}

客户端先用 tools/list 接收这些定义并注册到 LLM,当模型选中某个工具时,再用 tools/call 执行。实际来回传递的 JSON-RPC 是这样的形态(仅作说明):

{ "jsonrpc": "2.0", "id": 3, "method": "tools/call",
  "params": { "name": "weather_current",
              "arguments": { "location": "San Francisco", "units": "imperial" } } }

响应以 content 数组返回,可以容纳文本、图像、资源等多种格式。开发和调试时,官方的 MCP Inspector参考服务器合集 是很好的起点。

取舍与成熟度 — 诚实的梳理

MCP 的吸引力很清晰。集成只需做一次,而且像 LSP 那样,整个生态共享同一套规格。不过也有需要冷静看待的地方。

结语

MCP 的核心不是炫目的新技术,而是“枯燥的标准化”,而价值恰恰就在这里。只要理解工具、资源、提示这三种原语,以及 JSON-RPC 这层薄薄的规格,任何客户端与任何服务器都能以同样的方式对接。如果你是想把智能体接入真实系统的工程师,那么在挑选框架之前,先把这一层协议理解透,往往能受用更久。

参考资料

评论

还没有评论。

登录后即可发表评论