你有没有遇到过这样的场景:希望 AI 助手能读取你的本地文件、查询数据库、调用内部 API,却发现每个 AI 产品的集成方式都不一样?MCP(Model Context Protocol)正是为解决这个问题而生。
🎯 MCP 是什么#
Model Context Protocol(MCP) 是由 Anthropic 推出的开放协议,它标准化了 AI 应用与外部数据源、工具之间的通信方式。你可以把它理解为 AI 世界的”USB-C 接口”——一个统一的标准,让不同的 AI 应用和数据源能够即插即用。
┌─────────────┐ MCP ┌─────────────┐│ AI 应用 │ ◄──────────► │ 外部服务 ││ (Claude等) │ 标准协议 │ (文件/API) │└─────────────┘ └─────────────┘在 MCP 出现之前,每个 AI 应用都需要针对不同的数据源编写专门的集成代码。有了 MCP,只要数据源实现了 MCP Server,任何支持 MCP 的 AI 应用都能直接使用它。
为什么需要 MCP#
传统 AI 应用集成面临几个核心问题:
| 问题 | 传统方案 | MCP 方案 |
|---|---|---|
| 碎片化 | 每个 AI 产品各自实现插件系统 | 统一协议,一次实现到处使用 |
| 上下文隔离 | AI 无法访问本地数据 | 安全地暴露本地资源给 AI |
| 能力有限 | AI 只能生成文本 | AI 可以执行实际操作 |
| 维护成本 | N 个应用 × M 个数据源 | N + M 次实现 |
核心架构#
MCP 采用 Client-Server 架构:
┌─────────────────────────────────────────────────────┐│ Host ││ (Claude Desktop / IDE / 自定义应用) ││ ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ││ │ MCP Client │ │ MCP Client │ │ MCP Client │ ││ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │└─────────┼────────────────┼────────────────┼────────┘ │ │ │ ▼ ▼ ▼ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ MCP Server │ │ MCP Server │ │ MCP Server │ │ (文件系统) │ │ (数据库) │ │ (API) │ └────────────┘ └────────────┘ └────────────┘三个核心角色:
- Host:运行 AI 模型的应用程序(如 Claude Desktop、VS Code Copilot)
- Client:由 Host 创建,负责与 MCP Server 通信
- Server:暴露特定功能的服务,如文件访问、数据库查询等
一个 Host 可以连接多个 MCP Server,每个 Server 专注于一个领域。
三大核心原语#
MCP 定义了三种核心能力,也叫”原语”(Primitives):
1. Tools(工具)#
Tools 是 AI 可以调用的函数,让 AI 具备执行实际操作的能力:
// 示例:一个搜索文件的 Tool{ name: 'search_files', description: '在指定目录搜索匹配的文件', inputSchema: { type: 'object', properties: { path: { type: 'string', description: '搜索目录' }, pattern: { type: 'string', description: '文件名模式' } }, required: ['path', 'pattern'] }}🔶 注意:Tool 的调用需要用户确认(除非配置为自动执行),这是 MCP 的安全设计。
2. Resources(资源)#
Resources 是 Server 暴露给 AI 的数据,采用 URI 格式标识:
// 示例:暴露配置文件作为 Resource{ uri: 'file:///config/app.json', name: '应用配置', description: '当前应用的配置信息', mimeType: 'application/json'}Resources 是应用驱动的——由 Server 决定暴露哪些数据,AI 只能读取。
3. Prompts(提示)#
Prompts 是 预定义的交互模板,可以包含参数:
// 示例:代码审查 Prompt{ name: 'code_review', description: '生成代码审查建议', arguments: [ { name: 'code', description: '要审查的代码', required: true }, { name: 'language', description: '编程语言' } ]}Prompts 让用户可以快速启动特定类型的 AI 对话,比如”审查这段代码”、“解释这个错误”。
原语对比#
| 特性 | Tools | Resources | Prompts |
|---|---|---|---|
| 触发方 | AI 决定调用 | 应用/用户选择 | 用户选择 |
| 用途 | 执行操作 | 提供数据 | 预设模板 |
| 安全级别 | 需确认 | 只读 | 只读 |
| 典型场景 | 发邮件、写文件 | 读取配置、日志 | 代码审查模板 |
Transport 传输层#
MCP 支持两种主要的传输方式:
stdio(标准输入输出)#
适用于本地进程通信,Client 启动 Server 作为子进程:
Client ──stdin──► ServerClient ◄─stdout── Server特点:
- 简单可靠
- 适合本地工具
- 每个连接一个 Server 进程
Streamable HTTP#
适用于远程服务,支持 HTTP POST/GET 和 SSE(Server-Sent Events):
Client ──HTTP POST──► ServerClient ◄───SSE────── Server特点:
- 支持远程部署
- 可处理多客户端
- 支持流式响应
快速体验:配置 Claude Desktop#
让我们在 Claude Desktop 中配置一个 MCP Server,体验 MCP 的实际效果。
1. 安装 Claude Desktop#
从 claude.ai/download 下载并安装 Claude Desktop。
2. 配置 MCP Server#
Claude Desktop 的配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
添加一个官方的文件系统 Server:
{ "mcpServers": { "filesystem": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "/Users/你的用户名/Documents" ] } }}🔶 注意:将路径替换为你实际要授权访问的目录。
3. 重启并测试#
重启 Claude Desktop 后,你可以这样测试:
“请列出我 Documents 目录下的所有 markdown 文件”
Claude 会通过 MCP 调用 filesystem Server 的 Tool 来完成这个任务。
生态系统#
MCP 已经有丰富的官方和社区 Server 实现:
官方 Server:
@modelcontextprotocol/server-filesystem- 文件系统访问@modelcontextprotocol/server-github- GitHub 集成@modelcontextprotocol/server-postgres- PostgreSQL 数据库@modelcontextprotocol/server-slack- Slack 集成
支持 MCP 的客户端:
- Claude Desktop
- VS Code (通过扩展)
- Cursor
- Zed
- JetBrains IDE (GitHub Copilot)
下一步#
现在你已经了解了 MCP 的核心概念和架构。接下来的文章中,我们将:
- 从零搭建 MCP Server - 使用 TypeScript SDK 创建自己的 Server
- 深入 Tools - 掌握 Tool 的高级用法和最佳实践
- 探索 Resources 和 Prompts - 完整掌握 MCP 的三大原语
准备好开始构建了吗?