MCP 协议到底是什么?一文讲透 Model Context Protocol 原理与实战
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年底推出的开放标准协议,现已成为 AI 应用与外部工具、数据源交互的事实标准。2025 年底 MCP 捐赠给 Linux 基金会后,OpenAI、Google、Microsoft、AWS 等厂商全面支持,SDK 月下载量突破 9700 万,GitHub Stars 超过 81000。
如果把 AI 模型比作电脑,那 MCP 就是 USB-C 接口——一个通用连接器,让你写一次工具就能在所有 AI 客户端上运行。
MCP 解决了什么问题?
在 MCP 出现之前,每接入一个新工具,开发者就要为每个 AI 模型单独写一套集成代码。如果你有 M 个模型和 N 个工具,就要维护 M×N 个集成。MCP 把这个复杂度降到了 M+N——模型端和工具端各实现一次协议即可。
核心痛点:
- 每个工具厂商各自为政,集成方式不统一
- 相同功能在不同 AI 客户端上需要重复开发
- 工具发现、权限管理、错误处理缺少标准
MCP 通过定义统一的通信协议、工具注册规范和资源发现机制,一次性解决了这些问题。
三大核心原语
MCP 定义了三种基本能力单元,所有功能都围绕它们构建:
1. Tools(工具)
Tools 是模型可以调用的操作,有副作用。比如查询数据库、发送消息、创建文件。
json{ "name": "query_database", "description": "执行 SQL 查询并返回结果", "inputSchema": { "type": "object", "properties": { "sql": { "type": "string", "description": "SQL 查询语句" } }, "required": ["sql"] } }
2. Resources(资源)
Resources 是只读的上下文数据,模型可以主动拉取。比如代码仓库内容、数据库表结构、日志文件。
json{ "uri": "file:///project/README.md", "name": "项目说明文档", "mimeType": "text/markdown" }
3. Prompts(提示模板)
Prompts 是可复用的提示词模板,支持参数化。比如代码审查模板、Bug 分析模板。
json{ "name": "code_review", "description": "代码审查模板", "arguments": [ { "name": "language", "required": true }, { "name": "focus_area", "required": false } ] }
技术架构详解
MCP 的通信基于 JSON-RPC 2.0,整体架构分为三层:
shell┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Host │ │ Server │ │ Data Source │ │ (AI 客户端) │◄───►│ (MCP 服务) │◄───►│ (外部系统) │ └─────────────┘ └─────────────┘ └─────────────┘ Client MCP API
Host(宿主):运行 AI 模型的应用程序,如 Claude Desktop、Cursor、Cline。一个 Host 可以同时连接多个 Server。
Client(客户端):Host 内部与 Server 建立连接的组件,每个 Client 维护一个与 Server 的会话。
Server(服务端):提供 Tools、Resources、Prompts 的程序,暴露能力给 Client 使用。
传输方式
MCP 支持两种传输方式:
- stdio:本地开发场景,Server 作为子进程运行,通过标准输入输出通信
- Streamable HTTP:生产环境场景,Server 作为独立服务运行,支持负载均衡和 CDN 部署
Streamable HTTP 是 2025 年 11 月引入的新传输方式,取代了早期的 SSE 方案,更契合云原生架构。
认证机制
2025 年 6 月起,MCP 规范引入 OAuth 2.1 作为远程 Server 的标准认证方案。这意味着:
- 远程 MCP Server 不再使用裸 API Key
- 客户端通过 OAuth 2.1 流程获取 access token
- 支持细粒度的权限范围控制(scope)
MCP vs Function Calling:有什么区别?
这是一个常见误区。MCP 和 Function Calling 不是竞争关系:
| 对比维度 | Function Calling | MCP |
|---|---|---|
| 定位 | 模型 API 层 | 集成协议层 |
| 作用 | 让模型输出结构化调用 | 标准化工具注册和通信 |
| 范围 | 单个模型调用 | 跨客户端、跨工具 |
| 关系 | 底层能力 | 上层协议 |
简单说,Function Calling 是模型知道"怎么调用工具",MCP 是定义了"工具怎么被所有模型发现和调用"。现代架构中两者配合使用。
快速上手:5 分钟搭建一个 MCP Server
以 Python 为例,使用 FastMCP 框架:
pythonfrom mcp.server.fastmcp import FastMCP mcp = FastMCP("my-tools") @mcp.tool() def get_weather(city: str) -> str: """获取指定城市的天气信息""" return f"{city}:晴,25°C" @mcp.resource("config://app") def get_config() -> str: """返回应用配置""" return '{"version": "1.0", "debug": false}' @mcp.prompt() def code_review(code: str) -> str: """代码审查提示模板""" return f"请审查以下代码,关注安全性和性能:\n\n{code}" if __name__ == "__main__": mcp.run()
在 Claude Desktop 的配置文件中添加:
json{ "mcpServers": { "my-tools": { "command": "python", "args": ["server.py"] } } }
重启 Claude Desktop 后,模型就能自动发现并使用你定义的工具了。
2026 年生态现状
MCP 生态在 2026 年已非常成熟:
主流 AI 客户端支持:Claude Desktop、Claude Code、Cursor、Cline、Continue、OpenClaw、Codex、Zed、Chatbox 等全部原生支持 MCP。
开源 Server 生态:500+ 个公开 MCP Server,覆盖 GitHub、Slack、PostgreSQL、Stripe、Figma、Docker、Kubernetes、Notion、Linear、Chrome DevTools 等主流工具。
2026 路线图方向:无状态化。当前 Server 是有状态的,每个连接维持 session,限制了横向扩展。2026 年将把 session 的创建、恢复、迁移标准化,使 MCP Server 能像无状态 Web 服务一样水平扩展。
常见问题
MCP 是免费的吗? 是的,MCP 是开源协议,任何人都可以免费使用和实现。
MCP 只支持 Claude 吗? 不是。MCP 是开放标准,所有主流 AI 客户端都已支持。
MCP 和 LangChain 的区别? LangChain 是应用框架,提供编排和链式调用;MCP 是通信协议,定义工具如何被发现和调用。两者互补。
远程 MCP Server 安全吗? 2025 年规范已引入 OAuth 2.1 认证,安全性有标准保障。但安全责任在 Host 端——Host 控制用户授权、凭证范围和工具白名单。