30秒快速回答: MCP(Model Context Protocol)是 Anthropic 提出的一套开源协议,定义了 AI 模型如何与外部工具、数据源进行标准化通信。你可以把它理解为「AI 的 USB 接口」——只要实现了 MCP 协议,任何工具(数据库、文件系统、API 等)都能被 AI 直接调用,而不需要为每个 AI 模型单独开发插件。
MCP 解决了什么问题?
在 MCP 出现之前,AI 应用接入外部工具体系是这样的:
传统方式(M×N 问题):
Claude ──→ 数据库插件
GPT-5.6 ──→ 数据库插件(重写一遍)
Gemini ──→ 数据库插件(又重写一遍)
Claude ──→ 文件系统插件
GPT-5.6 ──→ 文件系统插件(再重写一遍)
...
每个模型 × 每个数据源 = M × N 个适配器,维护噩梦。
MCP 方式(M+N 解决方案):
Claude ─┐
GPT-5.6 ─┤
Gemini ──┼──→ MCP 协议 ──→ 数据库服务器
│ ├──→ 文件系统服务器
│ ├──→ Git 服务器
│ └──→ API 服务器
每个模型只需实现一次 MCP 客户端,每个数据源只需实现一次 MCP 服务器。M+N 复杂度,而不是 M×N。
MCP 的核心架构
┌─────────────────────────────────────────┐
│ MCP 主机 │
│ (Claude Desktop / Cursor / VS Code) │
│ │
│ ┌──────────────────────┐ │
│ │ MCP 客户端 │ │
│ │ (协议层,管理连接) │ │
│ └──────────┬───────────┘ │
└─────────────┼───────────────────────────┘
│ JSON-RPC over stdio/SSE
┌────────┼────────┬──────────────┐
↓ ↓ ↓ ↓
┌─────────┐ ┌──────┐ ┌──────┐ ┌──────────┐
│文件系统 │ │数据库 │ │ Git │ │ 自定义 │
│ MCP 服务 │ │MCP服务│ │MCP服务│ │ MCP 服务 │
└─────────┘ └──────┘ └──────┘ └──────────┘
三个核心概念:
| 组件 | 说明 | 类比 |
|---|---|---|
| Resources | 暴露数据(文件内容、数据库记录) | HTTP GET - 读数据 |
| Tools | 暴露可执行操作(查询数据库、创建文件) | HTTP POST - 执行操作 |
| Prompts | 预定义的提示词模板 | 快捷指令 |
MCP 的通信方式
MCP 使用 JSON-RPC 2.0 作为消息格式,支持两种传输层:
- stdio(标准输入/输出):本地进程通信,低延迟
- SSE(Server-Sent Events):远程服务通信,适合网络场景
MCP vs Function Calling:关键区别
很多人混淆 MCP 和 Function Calling,但它们解决的是不同层次的问题:
| 维度 | Function Calling | MCP |
|---|---|---|
| 定位 | 模型内部的”工具调用”机制 | 模型外部的”工具连接”标准 |
| 提出者 | OpenAI | Anthropic |
| 作用层 | LLM API 层面 | 工具/数据源层面 |
| 关系 | 定义”怎么调用” | 定义”连什么、怎么描述” |
| 协议 | OpenAI API 私有规范 | 开放标准(Apache 2.0) |
实际关系: MCP 服务器可以对接 Function Calling——MCP 负责描述工具和传输数据,Function Calling 负责在模型推理时决定调用哪个工具。两者互补,不是竞争。
实操:搭建一个 MCP 服务器
以下用 Python 实现一个简单的天气查询 MCP 服务器:
# weather_server.py
# 安装: pip install mcp httpx
import json
import asyncio
import httpx
from mcp.server import Server, NotificationOptions
from mcp.server.models import InitializationCapabilities
from mcp.server.stdio import stdio_server
# 创建 MCP 服务器实例
server = Server("weather-server")
@server.list_tools()
async def list_tools():
"""告诉 AI 模型这个服务器提供了哪些工具"""
return [
{
"name": "get_weather",
"description": "获取指定城市的实时天气信息",
"inputSchema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,如 Beijing, Shanghai"
}
},
"required": ["city"]
}
}
]
@server.call_tool()
async def call_tool(name: str, arguments: dict):
"""处理 AI 模型的工具调用请求"""
if name == "get_weather":
city = arguments["city"]
# 实际项目中调真实天气 API
return [{"type": "text", "text": f"{city} 当前天气:晴,25°C,湿度 60%"}]
async def main():
async with stdio_server() as (read_stream, write_stream):
await server.run(
read_stream,
write_stream,
InitializationCapabilities(
sampling={},
experimental={},
roots={"listChanged": True}
)
)
if __name__ == "__main__":
asyncio.run(main())
在 Claude Desktop 中配置 MCP 服务器
在 ~/Library/Application Support/Claude/claude_desktop_config.json 中添加:
{
"mcpServers": {
"weather": {
"command": "python",
"args": ["/path/to/weather_server.py"]
}
}
}
重启 Claude Desktop 后,Claude 就会自动发现 get_weather 工具并能在对话中调用它。
2026 年 MCP 生态一览
| 工具/平台 | MCP 支持方式 | 说明 |
|---|---|---|
| Claude Desktop | 原生支持 | 首个全面支持 MCP 的产品 |
| Cursor | 内置 MCP 客户端 | 可接入数据库、文件系统等 |
| Claude Code | 核心依赖 | 通过 MCP 读写项目文件 |
| Windsurf | 已集成 | AI IDE 中的 MCP 工具调用 |
| LangChain | MCP 适配器 | 将 MCP 工具转为 LangChain Tool |
| Continue.dev | MCP 支持 | 开源 AI 编程助手 |
官方 MCP 服务器(开箱即用):
@anthropic/mcp-server-filesystem— 安全访问本地文件@anthropic/mcp-server-postgres— 查询 PostgreSQL 数据库@anthropic/mcp-server-git— 操作 Git 仓库@anthropic/mcp-server-brave-search— 网络搜索
常见问题
Q: MCP 和 OpenAI 的 GPTs Actions 有什么区别?
GPTs Actions 是 OpenAI 生态的专有方案,只能用于 ChatGPT。MCP 是跨模型的开放标准,理论上任何 AI 模型都可以接入。
Q: 我需要自己写 MCP 服务器吗?
大多数场景不需要。Anthropic 和社区已经提供了大量现成的 MCP 服务器(文件、数据库、Git、搜索等)。只有当你需要接入公司内部独有的系统时才需要自己开发。
Q: MCP 安全吗?
MCP 本身是通信协议,安全性取决于配置——你给服务器什么权限,AI 就有什么能力。最佳实践是:本地工具用 stdio(权限可控),远程服务用 SSE + HTTPS(加密传输)。
下一步建议: 下载 Claude Desktop,配置一个文件系统 MCP 服务器,体验让 AI 直接读你本地的代码项目。