使用 ChatGPT 或 Claude 时,总会有些不尽如人意的时刻。模型很聪明,却看不到我的数据库,也读不了公司内部 Wiki。
因此,大家开始直接连接 API。但不同模型和工具的集成方式各不相同,组合越多,集成代码就会呈指数增长。
MCP(Model Context Protocol)就是为了解决这个问题而出现的标准。简单来说,它是将外部工具和数据接入 AI 模型的通用规范,常被称为“AI 界的 USB-C”。
本文将介绍 MCP 究竟解决了什么问题、采用前后的集成工作有何变化、它的内部结构与 function calling 有何不同,以及现在值得立即接入的代表性服务器。
先从核心摘要开始。
- MCP 是连接 AI 与外部工具的开放标准协议(由 Anthropic 于 2024 年 11 月发布)。
- 直接集成需要数百行代码的工作,有了 MCP 服务器后只需几行配置即可完成。
- 它并不替代 function calling,而是在其之上标准化并复用工具的一层。
- 随着 OpenAI 和 Google 也采用它,MCP 实际上已成为行业标准,服务器生态正在快速发展。
MCP 解决的问题:M×N 集成地狱
先看看 MCP 出现之前的情况。
如果有 M 个 AI 应用和 N 个要连接的工具,就需要 M×N 份集成代码。Claude、ChatGPT 和 Cursor 的 GitHub 集成都必须分别开发。
MCP 在两者之间加入了标准规范。工具端只需创建一次 MCP 服务器,AI 应用端只需实现一次 MCP 客户端。M×N 变成 M+N。
想想 USB-C 出现以前,每台设备都要携带不同充电线的日子就明白了。MCP 统一的就是这套线缆规范。
不过,只看 M+N 之类的公式,可能还难以直观感受差异。用两种方式实现同一个功能,区别就会很明显。
同一功能:采用前后对比
假设我们要构建“一个查询 GitHub issue 并回答问题的 AI”。
在 MCP 之前,以下工作都由你负责。
- 定义工具 schema:直接以 JSON schema 编写“list_issues 接收 owner、repo 和 state”。
- 编写实际调用代码:GitHub REST API 客户端、令牌管理和分页处理。
- 实现执行循环:模型调用工具后接收结果,再返回给模型的往返代码。
- 在每个应用中重复上述工作:Claude 集成一份,公司内部聊天机器人再一份。
仅查询 issue,加上样板代码就要数百行;每增加一个工具,都要重复 1~3 次。
有了 MCP,只需这样就结束了。
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}
schema、API 调用、身份验证和错误处理都已内置在服务器中。你只需注册服务器,然后说:“总结这个仓库最近的 bug issue。”
| 项目 | 直接集成 | 使用 MCP 服务器 |
|---|---|---|
| 编写代码 | schema、调用和循环共数百行 | 5 行配置 |
| 身份验证与错误处理 | 自行实现 | 内置于服务器 |
| 添加其他 AI 应用 | 从头重做 | 复用同一服务器 |
| 添加工具 | 修改代码并重新部署 | 只需更新服务器 |
最后一行尤其重要。即使服务器新增功能,你这边的代码也一行不用改,这就是标准化的力量。
内部结构:主机、客户端和服务器
MCP 有三个角色。
| 组件 | 作用 | 示例 |
|---|---|---|
| 主机 | 用户使用的 AI 应用 | Claude Desktop, Cursor |
| 客户端 | 在主机内与服务器进行一对一通信 | 内置于主机 |
| 服务器 | 公开工具和数据的程序 | GitHub 服务器、数据库服务器 |
一个主机可以启动多个客户端,每个客户端连接一个服务器。通信规范是 JSON-RPC 2.0;本地进程使用 stdio,远程连接使用 HTTP 流式传输。
服务器公开的功能分为三类。
- 工具(tools):模型调用的函数,例如“创建 issue”和“执行查询”。
- 资源(resources):模型读取的数据,例如文件内容和数据库 schema。
- 提示(prompts):服务器预先准备的提示模板。
关键在于运行时查询工具列表。客户端连接服务器后会问“你能做什么?”,服务器则返回工具列表和 schema。这就是服务器更新后代码仍能保持不变的原因。
它和 function calling 有什么不同?
读到这里,你可能会问:“这不是早就能用 function calling 做到了吗?”
它们处于不同层级。function calling 是与模型对话的规范:“模型,这些函数可用,需要时请以调用格式回复。”函数如何实现、从哪里获取,完全由开发者负责。
MCP 是发布和复用这些函数的规范。它将工具实现、身份验证和文档打包成服务器,让任何 AI 应用都能接入使用。
如果说 function calling 是“函数调用语法”,MCP 就是“包含函数的库生态”。实际上,MCP 客户端在内部直接使用 function calling。两者不是替代关系,而是上下层关系。
因此,“function calling 和 MCP 该用哪个?”这个问题本身并不成立。只在一个应用中使用几个函数时,直接实现 function calling 就够了;如果要在多个应用中复用,或使用别人创建的工具,就应该选择 MCP。
现在值得立即接入的代表性服务器
生态发展迅速,大多数常用工具都已经有对应服务器。这里挑出五个反响较好的选项。
| 服务器 | 可以做什么 |
|---|---|
| Playwright | AI 直接操作浏览器:点击、输入、截图 |
| Figma | 读取设计稿并转换为前端代码 |
| Notion | 搜索和整理文档、会议纪要,并创建页面 |
| GitHub | 查询和创建 issue、PR,并搜索代码 |
| Supabase(Postgres) | 使用自然语言查询数据库并了解 schema |
如果只能选一个,我会选 Playwright。接入后试着说:“进入这个网站,填写注册表单并截图。”看到 AI 打开浏览器,实际点击和输入后,就不需要再解释为什么连接工具会改变游戏规则了。它还可以直接用于 E2E 测试自动化和重复性网页任务。
对于前端开发者来说,Figma 也非常有感。过去需要看着设计稿手动转换为标记的工作,会变成让能够直接读取设计稿的 AI 完成:“把这个 frame 做成 React 组件。”
注意事项与局限
它并非万能。下面也看看实际工作中需要注意的问题。
首先是安全性。MCP 服务器是向模型授予执行权限的通道,因此接入不可信的服务器可能因提示注入而导致数据泄露。最安全的做法是只使用官方注册表或经过验证的服务器。
还存在上下文成本。连接的服务器越多,工具定义占用的上下文窗口就越大,反而可能降低模型性能。正如表格所示,最好只连接当前需要的工具。
总结
MCP 并不是让“模型变得更聪明”的技术,而是将“模型能够触及的范围”标准化。把直接集成需要数百行代码的工作变成几行配置,并建立一个可以直接接入他人创建的工具生态,这两点才是本质。
下一篇文章将整理经常与 MCP 比较的 Claude Code Skill 和子代理分别扮演什么角色。

![[MCP·Skill #1] 什么是 MCP 服务器?从连接方法到安全注意事项 封面图](/assets/images/posts/45e71f91-f21d-492e-a6da-e0ffc8d4af18/1.jpg)