🔌 什么是 MCP?
The Model Context Protocol(MCP) 是由 Anthropic 于 2024 年 12 月发布的一个开放标准,定义了连接 AI 模型到外部工具、数据源和服务的通用接口。在 MCP 之前,每个 AI 集成都需要定制的、一次性的实现。 MCP 标准化了 AI 客户端与外部能力的通信方式——因此一次集成即可适配任何兼容的 AI 系统。
MCP 是一种客户端-服务器协议: MCP 客户端 是希望使用外部能力的 AI 系统(例如 Claude、Cursor、带 Copilot 的 VS Code)。 MCP 服务器 是通过标准化 API 向外部能力(例如 GitHub、数据库、文件系统、浏览器)暴露这些能力的服务,任何 MCP 客户端都可以使用这些 API。
🔋 USB-C 比喻
在 USB-C 出现之前,每个设备都有自己的专有接口——手机充电器不能用于笔记本,显示器线缆不能用于存储设备。USB-C 通过一个通用标准解决了这个问题:一个端口、一根线缆、无限设备。
在 MCP 出现之前的 AI 集成也是同样的混乱。将 Claude 连接到 GitHub 需要定制代码;将 GPT-4 连接到相同的 GitHub API 需要不同的定制代码。添加新工具意味着需要为每个 AI 平台从头重建集成。
MCP 就是 AI 的 USB-C。一套标准:
- 只需构建一次 MCP 服务器——任何 MCP 客户端都能使用它
- 采用新的 AI 模型——您现有的 MCP 服务器即可立即工作
- MCP 服务器生态独立于 AI 模型开发而增长
⚙️ MCP 的工作原理
MCP 使用基于传输层的 JSON-RPC 2.0 协议(本地服务器使用 stdio,远程服务器使用 HTTP/SSE)。通信遵循初始化、能力发现和请求处理的生命周期。
三大核心原语
| Primitive | 它暴露的内容 | Example |
|---|---|---|
| Tools | 模型可以调用的函数(模型控制) | search_github_issues、run_sql_query、send_email |
| Resources | 模型可以读取的数据(应用控制) | file:///workspace/src、db://customers/schema |
| Prompts | 可重用的提示模板(用户可控) | code-review、summarize-pr、explain-error |
通信流程
- 初始化: 客户端连接到服务器,交换协议版本和能力信息
- 发现: 客户端请求可用工具、资源和提示的列表
- 调用: AI 模型决定调用一个工具;客户端将请求发送到服务器
- 返回: 服务器执行操作并将结构化结果返回给客户端
- 继续: AI 模型整合结果并继续推理
传输选项
| Transport | 最适合 | Notes |
|---|---|---|
| stdio | 本地工具,CLI 集成 | 客户端将服务器作为子进程启动;设置最简单 |
| HTTP + SSE | 远程/云服务,共享团队 | 服务器独立运行;支持授权头(auth headers) |
| WebSocket | 实时双向(草案) | 为流式用例建议的方案 |
🔄 MCP 与 Function Calling 的比较
Function calling(工具调用)是内置于特定 AI API(OpenAI、Anthropic、Google)中的一项功能—— 允许您定义模型可以调用的自定义函数。MCP 是构建在 function calling 之上或并行的一层,负责标准化 这些函数如何被发现和连接.
| Function Calling | MCP | |
|---|---|---|
| Scope | 特定 API、每次请求绑定 | 跨平台,标准化 |
| Discovery | 在您的 API 调用中硬编码 | 动态——服务器发布能力 |
| Portability | 绑定到单一 AI 提供商 | 适用于任何兼容 MCP 的客户端 |
| Resources | 未标准化 | 一等原语(文件、数据库、URI) |
| 最适合 | 简单的单提供商用例 | 多工具、多模型的生产系统 |
在实践中,MCP 服务器通常在内部使用 function calling——MCP 提供发现和连接层,而 function calling 负责实际的 LLM 到工具的调用。
🏢 谁在支持 MCP
自 2024 年 12 月发布以来,MCP 的采纳速度很快。截至 2026 年 4 月,生态系统包括:
支持 MCP 的 AI 客户端
- Claude(Anthropic) — 在 Claude.ai 和 Claude Code 中原生支持 MCP
- Cursor — 用于代码感知 AI 助手的 MCP 服务器
- VS Code(GitHub Copilot) — 在 agent 模式下集成 MCP
- Windsurf(Codeium) — 支持 MCP 服务器
- Continue.dev — 开源的 IDE 助手,带有 MCP
流行的 MCP 服务器
- Filesystem — 读/写本地文件(官方 Anthropic)
- GitHub — 仓库、PR、问题、代码搜索
- PostgreSQL / SQLite — 数据库查询和模式探索
- Brave Search / Exa — 无需 API 密钥的网页搜索
- Puppeteer / Playwright — 浏览器自动化
- Slack / Linear / Notion — 生产力工具集成
🚀 开始使用 MCP
选项 1:使用现有的 MCP 服务器(5 分钟)
体验 MCP 的最快方式是使用带有预构建服务器的 Claude Desktop。 在以下位置编辑您的 Claude Desktop 配置: ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
}
}
} 选项 2:构建一个 MCP 服务器(30 分钟)
官方 SDK 可用于 TypeScript、Python 和 Kotlin:
// TypeScript MCP server example
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server({ name: "my-server", version: "1.0.0" });
server.setRequestHandler("tools/list", async () => ({
tools: [{
name: "get_weather",
description: "Get current weather for a city",
inputSchema: {
type: "object",
properties: { city: { type: "string" } },
required: ["city"]
}
}]
}));
server.setRequestHandler("tools/call", async (request) => {
const { city } = request.params.arguments;
// ... fetch weather data
return { content: [{ type: "text", text: `Weather in ${city}: sunny, 22°C` }] };
});
const transport = new StdioServerTransport();
await server.connect(transport); 🔐 MCP 安全注意事项
MCP 的强大之处在于赋予 AI 模型访问工具、文件和服务的能力——这也引入了开发者必须设计防范的安全风险。
| Risk | Description | Mitigation |
|---|---|---|
| 通过 MCP 的提示注入(Prompt injection) | 工具结果中的恶意内容操纵 AI | 对工具输出进行清理;使用单独的推理模型和动作模型 |
| 权限过大的服务器 | MCP 服务器拥有超过所需的权限 | 最小权限原则;尽可能只读 |
| 困惑的代理(Confused deputy) | AI 代替攻击者行事而用户不知情 | 对破坏性/不可逆操作进行人工确认(HITL) |
| 服务器供应链 | 恶意的第三方 MCP 服务器窃取数据 | 仅使用受信任、经过审计的服务器;审查服务器代码 |
如需深入了解 AI 安全漏洞——包括提示注入如何通过 MCP 工具结果被武器化——请参阅我们的指南: 提示注入详解.