MCP是什么?为什么需要它?
Model Context Protocol(MCP)是Anthropic在2024年底提出的开放协议,目标是标准化AI模型与外部工具/数据源的连接方式。在MCP之前,每个Agent框架都自定义工具调用接口——LangChain有tools格式,OpenAI有function calling schema,AutoGPT又是一套——导致工具开发者需要为每个框架写适配层。
MCP的价值主张很简单:一次开发,处处可用。写一个MCP Server,任何支持MCP的客户端都能调用。
协议架构
客户端-服务器模型
MCP采用客户端-服务器架构:
[Host App (Claude Desktop)]
├── MCP Client A ←→ [MCP Server A: 文件系统]
├── MCP Client B ←→ [MCP Server B: 数据库]
└── MCP Client C ←→ [MCP Server C: GitHub]
- Host:集成MCL客户端的应用(如Claude Desktop、IDE、Agent框架)
- MCP Client:在Host内部,每个连接维护一个客户端实例
- MCP Server:提供工具、资源、提示的独立进程
传输层
MCP支持两种传输方式:
- stdio:标准输入输出,适合本地工具(文件系统、本地数据库)
- SSE(Server-Sent Events):HTTP+SSE,适合远程服务
JSON-RPC 2.0作为消息格式,请求和响应都是标准的JSON-RPC消息。
消息类型
MCP定义了三种核心原语:
| 原语 | 方向 | 用途 |
|---|---|---|
| Tools | 模型→Server | 执行操作(查询数据库、调API) |
| Resources | Server→模型 | 提供数据(文件内容、配置) |
| Prompts | Server→用户 | 提供预设提示模板 |
工具定义格式
MCP Server通过tools/list端点声明可用工具:
{
"name": "search_docs",
"description": "搜索技术文档库",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "搜索关键词"
},
"limit": {
"type": "integer",
"default": 10,
"description": "返回结果数量"
}
},
"required": ["query"]
}
}
这个格式与OpenAI的function calling schema高度兼容,降低了迁移成本。
交互流程
一个完整的MCP工具调用流程:
- 初始化:Client连接Server,发送
initialize请求,协商协议版本和能力 - 发现工具:Client发送
tools/list,获取可用工具列表 - 模型决策:Host将工具描述注入prompt,模型决定是否调用工具
- 执行工具:模型输出工具调用请求,Client通过
tools/call转发给Server - 返回结果:Server执行工具,返回结果给Client,Client传给模型
- 模型生成:模型基于工具结果生成最终回答
生态现状
已有MCP Server
- filesystem:本地文件读写
- github:GitHub API封装
- postgres/slack:数据库和消息平台集成
- puppeteer:浏览器自动化
- memory:知识图谱记忆存储
客户端支持
- Claude Desktop:最早的原生支持
- Cursor、Windsurf等AI IDE:已集成
- LangChain/LangGraph:通过适配层支持
- 开源Agent框架逐步跟进
实践:自建MCP Server
以Python SDK为例,创建一个简单的查询工具:
from mcp.server import Server
from mcp.types import Tool, TextContent
server = Server("my-weather-server")
@server.list_tools()
async def list_tools():
return [Tool(
name="get_weather",
description="查询城市天气",
inputSchema={
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
)]
@server.call_tool()
async def call_tool(name, arguments):
if name == "get_weather":
city = arguments["city"]
# 实际调用天气API
return [TextContent(type="text", text=f"{city}今天晴,25°C")]
MCP vs Function Calling
| 维度 | MCP | OpenAI Function Calling |
|---|---|---|
| 标准化 | 开放协议,跨厂商 | 厂商标准 |
| 传输 | 支持远程(SSE) | 仅API调用 |
| 动态发现 | 运行时发现工具 | 预定义工具列表 |
| 生态 | 开放,社区驱动 | 封闭在OpenAI生态 |
总结
MCP协议正在成为AI Agent连接外部世界的事实标准。它的设计哲学类似USB——一个统一的接口标准让无数设备即插即用。对于Agent开发者,MCP意味着可以专注于构建工具而不是适配框架;对于工具开发者,MCP意味着一次开发即可服务所有Agent生态。2026年,MCP的广泛采用将是Agent生态走向繁荣的关键基础设施。