2.2 MCP:模型上下文协议
MCP(Model Context Protocol)是一种标准化协议,用来让大模型以统一的方式连接外部工具、数据源和服务,从而获取上下文信息并执行操作。
MCP 解决的核心问题
工具生态的碎片化现状
在 MCP 出现之前,工具集成是这样的:
Claude Code → 自己的工具格式
OpenAI GPT → 自己的 Function Calling 格式
LangChain → 自己的 Tool 抽象
AutoGPT → 自己的插件系统
...
问题:
- 每个平台都要重新实现一遍工具
- 工具不能跨平台复用
- 生态重复建设,社区力量分散
MCP 的愿景:一次编写,到处运行
写一个 MCP 工具
↓
可以在所有支持 MCP 的 Agent 平台中使用
↓
Claude Code、Cursor、Cline、Any...
MCP 核心概念与架构
MCP 的三层架构
┌─ ────────────────────────────────────────┐
│ Client(客户端) │
│ Claude Code / Cursor / 自定义 Agent │
└────────────────┬────────────────────────┘
│
┌────────────────▼────────────────────────┐
│ MCP Protocol(协议层) │
│ JSON-RPC 2.0 + 标准化消息格式 │
└────────────────┬────────────────────────┘
│
┌────────────────▼────────────────────────┐
│ MCP Servers(服务端) │
│ 文件系统 / Git / 数据库 / 自定义服务 │
└─────────────────────────────────────────┘
标准化工具体系
MCP 定义了三种核心能力类型:
| 能力类型 | 作用 | 示例 |
|---|---|---|
| Resources | 提供数据上下文 | 读取文件、查询数据库、访问 API |
| Tools | 执行具体操作 | 运行命令、发送邮件、创建 Issue |
| Prompts | 预制提示模板 | 代码评审模板、数据分析模板 |
MCP 服务端开发
最简单的 MCP Server
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
@mcp.resource("blog://posts/latest")
def get_latest_post() -> str:
"""Get the latest blog post"""
return "# Latest Post\nHello MCP!"
if __name__ == "__main__":
mcp.run()
核心能力详解
1. Tools:可执行的操作
@mcp.tool()
def search_file(pattern: str, path: str = ".") -> list:
"""
搜索文件内容
Args:
pattern: 搜索的正则表达式
path: 搜索起始路径
Returns:
匹配结果列表
"""
results = []
# 实现搜索逻辑
return results
Tool 的设计要点:
- 参数类型注解必须完整
- 文档字符串清晰说明用途
- 返回结构化、易理解的数据
2. Resources:数据源
# 静态资源
@mcp.resource("config://settings")
def get_settings():
return load_config_file()
# 带参数的动态资源
@mcp.resource("user://{user_id}/profile")
def get_user_profile(user_id: int):
return db.query(f"SELECT * FROM users WHERE id = {user_id}")
# 可列出的资源
@mcp.list("docs://")
def list_documents():
return [f"docs://{f}" for f in os.listdir("docs")]
Resource 的优势:
- Agent 可以发现可用的数据源
- 统一的 URI 格式访问
- 自动缓存和增量更新
3. Prompts:提示模板
@mcp.prompt()
def code_review(code: str, language: str = "python") -> str:
"""
代码评审提示模板
Args:
code: 要评审的代码
language: 代码语言
"""
return f"""
请对以下 {language} 代码进行评审:
{code}
评审维度:
1. 代码质量与可读性
2. 潜在的 Bug
3. 性能优化建议
4. 安全风险
"""
配置与部署
在 Claude Code 中配置 MCP Server:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "your-token-here"
}
},
"my-custom-server": {
"command": "python",
"args": ["/path/to/my_server.py"]
}
}
}
MCP 最重要的价值
1. 工具生态的复用
之前:A 项目写了一个 GitHub 工具,B 项目要用?抄过去...
现在:写一个 MCP GitHub Server,所有 Agent 都可以用!
社区生态效应:
- 官方维护常用服务(文件系统、Git、GitHub、Postgres...)
- 社区贡献各种垂直领域工具
- 形成正向循环,生态越来越丰富
2. 能力渐进式披露
MCP 不是一次性把所有能力都给模型,而是按需发现:
Agent:我需要读取文件
→ 发现 filesystem MCP Server
→ 列出可用的资源
→ 读取需要的文件
Agent:我需要查数据库
→ 发现 postgres MCP Server
→ 查看有哪些表
→ 执行查询
3. 标准化带来的可靠性
统一的协议意味着:
✅ 统一的错误处理机制
✅ 统一的认证与权限控制
✅ 统一的日志与审计
✅ 统一的测试与验证工具
典型 MCP Server 场景
1. 开发环境集成
MCP Servers for 开发者:
- 🔧 项目文件系统
- 📝 Git 版本控制
- 🐙 GitHub/GitLab
- 🗄️ 数据库访问
- 🏃 命令执行
- 📦 包管理器
2. 企业内部集成
MCP Servers for 企业:
- 📊 数据仓库 / BI
- 📋 Jira/Confluence
- 👥 HR 系统
- 💰 财务系统
- 📧 邮件系统
3. 个人助理场景
MCP Servers for 个人:
- 📅 日历
- 💬 即时通讯
- ☁️ 云存储
- 🎵 媒体服务
- 🏠 智能家居
MCP vs 传统工具调用
| 维度 | 传统 Function Calling | MCP |
|---|---|---|
| 工具定义 | 每次请求都要传工具定义 | 服务端自描述,客户端自动发现 |
| 生态复用 | 每个平台各自实现 | 一次编写,所有平台可用 |
| 能力类型 | 只有 Tools | Resources + Tools + Prompts |
| 发现机制 | 无,手动配置 | 运行时动态发现能力 |
| 标准化 | 各平台格式不统一 | 统一的协议标准 |
| 安全边界 | 简单的白名单 | 结构化的权限控制 |
MCP 的未来展望
1. MCP Marketplaces
类似 App Store 的工具市场:
- 搜索和发现 MCP Servers
- 评分和评价系统
- 安全审计与认证
- 一键安装使用
2. 跨平台能力标准
MCP 可能成为 Agent 能力的事实标准:
"这个 Agent 支持哪些能力?"
→ 看它支持哪些 MCP Servers
3. 服务组合与编排
多个 MCP Servers 组合使用:
GitHub + 邮件 + CI/CD = 自动化代码评审 Agent
数据库 + 图表 + Slack = 数据分析报告 Agent
MCP 最重要的贡献不是技术,而是生态。它让 Agent 工具开发从"各自为战"走向"社区协作",这才是真正的范式革命。