MCP 协议深度解析:AI 时代的 USB-C 接口
MCP 协议深度解析:AI 时代的"USB-C 接口"
引言
如果你最近关注 AI 领域,一定听说过 MCP(Model Context Protocol,模型上下文协议)。Anthropic 在 2024 年底开源了它,短短几个月就在 GitHub 上收获了数万颗星。有人说它是"AI 应用的 USB-C 接口",有人说它是"LLM 时代的 HTTP 协议"。
那么 MCP 到底是什么?它解决了什么问题?本文将带你一探究竟。
一、背景:AI 模型的数据孤岛
大语言模型(LLM)的能力有目共睹,但它们面临一个根本性的限制:训练数据是静态的。
一个典型的 AI 助手可以流畅地回答历史、科学、编程等问题,但在以下场景中却无能为力:
- "帮我查一下今天的 Github Trending 仓库"
- "把我的这篇草稿发布到博客园"
- "读取我项目里的数据库 schema,然后生成对应的 API 接口"
这些操作需要模型与外部世界交互——访问实时数据、调用外部服务、操作本地文件。传统的做法是每个开发者自己实现一套工具调用协议,导致生态碎片化严重。
这就是 MCP 要解决的核心问题。
二、MCP 是什么
MCP(Model Context Protocol)是一个开放标准,定义了 AI 应用与外部数据源、工具之间通信的协议规范。它允许大模型安全、标准化地访问本地和远程资源。
用一句话概括:MCP 让任何 AI 客户端都能和任何外部工具/数据源对话,就像 USB-C 让任何设备都能连接任何外设一样。
三、核心架构
MCP 采用经典的 Client-Server 架构:
Host → MCP Client → MCP Server → 外部资源
- Host(宿主):AI 应用本身,如 Claude Desktop、VS Code 插件、自建 ChatBot
- MCP Client(客户端):运行在 Host 内部,负责与 Server 建立连接、发送请求
- MCP Server(服务端):独立进程,暴露特定的能力(工具、资源、提示模板)
- Transport(传输层):客户端和服务端之间的通信方式
传输层
MCP 支持两种传输协议:
| 传输方式 | 适用场景 | 说明 |
|---|---|---|
| stdio | 本地进程通信 | 通过标准输入输出,简单高效 |
| Streamable HTTP | 远程服务 | 支持 SSE 流式响应,适合跨网络场景 |
本地场景下,MCP Client 作为父进程启动 MCP Server 子进程,通过 stdin/stdout 进行 JSON-RPC 通信。远程场景下,通过 HTTP + SSE 实现请求和推送。
四、三大核心能力
MCP Server 可以对外暴露三种类型的能力:
1. Tools(工具)
Tools 是模型可调用的函数。模型通过 Function Calling 机制决定何时调用哪个工具。
# 一个简单的 MCP 工具示例
@mcp.tool()
def get_weather(city: str) -> str:
"""查询指定城市的天气信息"""
# 调用天气 API
weather = fetch_weather(city)
return f"{city}当前天气:{weather}"
特点:
- 模型自主决定是否调用、何时调用
- 工具描述(docstring)直接影响模型的调用准确率
- 支持参数校验和类型标注
2. Resources(资源)
Resources 是模型可读取的上下文数据,类似于文件系统中的"只读文件"。
@mcp.resource("config://app")
def get_app_config() -> str:
"""返回应用配置信息"""
return json.dumps(app_config)
与 Tools 的区别:Resources 是被动暴露数据,由 Client 主动拉取;Tools 是主动执行操作,由模型触发。
3. Prompts(提示模板)
Prompts 是预定义的提示词模板,用户可以快速选择使用。
@mcp.prompt()
def code_review(language: str) -> str:
return f"请对以下{language}代码进行审查..."
五、通信协议:JSON-RPC
MCP 使用 JSON-RPC 2.0 作为消息协议。所有消息遵循统一格式:
请求示例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_weather",
"arguments": { "city": "北京" }
}
}
响应示例:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{ "type": "text", "text": "北京当前天气:晴,25度" }
]
}
}
核心 API 方法:
| 方法 | 用途 |
|---|---|
initialize |
握手协商,交换双方能力信息 |
tools/list |
获取 Server 提供的所有工具列表 |
tools/call |
调用指定工具 |
resources/list |
获取资源列表 |
resources/read |
读取资源内容 |
prompts/list |
获取提示模板列表 |
prompts/get |
获取提示模板内容 |
六、构建一个 MCP Server
得益于社区工具链,构建 MCP Server 非常简单。以下以 Python 的 fastmcp 框架为例:
第一步:安装依赖
pip install fastmcp python-dotenv requests
第二步:编写 Server
from fastmcp import FastMCP
mcp = FastMCP("my-first-mcp")
@mcp.tool()
def hello(name: str) -> str:
"""向指定的人打招呼"""
return f"你好,{name}!欢迎使用 MCP。"
if __name__ == "__main__":
mcp.run()
第三步:配置 Client
在 Claude Code 中,创建 .mcp.json 文件:
{
"mcpServers": {
"my-first-mcp": {
"command": "python",
"args": ["server.py"]
}
}
}
仅需三步,你的 AI 助手就获得了"打招呼"的新能力。
七、MCP 生态现状
MCP 正在快速成为行业标准:
- 官方支持:Anthropic Claude、Claude Code 深度集成
- 社区生态:GitHub 上有数千个开源 MCP Server,覆盖文件系统、数据库、搜索引擎、云服务等
- 厂商跟进:OpenAI、Google、Microsoft 等主流厂商也在关注或支持 MCP
- 框架支持:Python(fastmcp)、TypeScript(@modelcontextprotocol/sdk)、Go 等语言都有成熟的 SDK
常见的 MCP Server 场景
| 场景 | 典型 MCP Server |
|---|---|
| 文件操作 | @anthropic/mcp-server-filesystem |
| 数据库查询 | @anthropic/mcp-server-postgres |
| 搜索引擎 | Brave Search MCP Server |
| 代码仓库 | GitHub MCP Server |
| 内容发布 | cnblogs MCP Server |
八、为什么 MCP 重要
在 MCP 出现之前,每个 AI 应用都需要自己实现一套工具调用机制。这意味着:
- 开发者需要为每个平台写不同的适配代码
- 工具提供者需要维护多套接口
- 用户被困在特定的生态中
MCP 改变了这一点:
之前: M 个 AI 应用 x N 个外部工具 = MxN 次集成
之后: M 个 AI 应用 + N 个外部工具 = M+N 次集成
这与 HTTP 统一 Web 服务的逻辑一致——标准化连接,释放创新。
九、结语
MCP 不是另一个昙花一现的技术热点。它解决的是 AI 落地中最实际的问题:如何让模型与真实世界交互。
随着越来越多的工具和服务接入 MCP 生态,AI 助手的能力边界将从"模型的训练数据"扩展到"整个互联网和本地环境"。那时候,AI 助手将真正成为一个能读、能写、能操作的全能伙伴。
如果你还没有尝试过 MCP,现在就是最好的时机。
本文由 Claude Code + cnblogs MCP Server 协作发布。

浙公网安备 33010602011771号