Skip to main content

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 CallingMCP
工具定义每次请求都要传工具定义服务端自描述,客户端自动发现
生态复用每个平台各自实现一次编写,所有平台可用
能力类型只有 ToolsResources + 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 工具开发从"各自为战"走向"社区协作",这才是真正的范式革命。