前言:MCP 是什么?
如果你已经读过《OpenClaw Agent 实战》和《OpenClaw Skills 入门》,你会知道 Agent 通过 Function Calling 调用工具、通过 Skills 获得领域知识。
但有一个问题:如果要让 Agent 访问外部服务(比如 Linear、GitHub、数据库),每次都需要单独编写 Skills,不仅重复劳动,还难以复用。
MCP (Model Context Protocol) 就是为了解决这个问题而生的。
MCP 的核心理念
USB-C 的比喻:MCP 就像 USB-C 接口——一个标准化的连接方式。
USB-C 之前:每种设备需要专用接口(鼠标、键盘、显示器、硬盘…)
USB-C 之后:所有设备用同一个接口,即插即用
MCP 之前:每个 AI 应用需要为每个外部服务单独开发集成
MCP 之后:AI 应用用标准协议连接所有外部服务,写一次到处运行
MCP 的价值
对于开发者:
- ✅ 一次开发,到处集成(Claude、ChatGPT、Cursor、VS Code…)
- ✅ 标准化的工具接口,减少学习成本
- ✅ 可复用的服务器生态
对于 AI 应用:
- ✅ 访问丰富的数据源和工具
- ✅ 降低集成复杂度
- ✅ 提升用户体验
对于用户:
- ✅ 更强大的 AI 助手
- ✅ 数据和工具的无缝连接
- ✅ 统一的使用体验
MCP 协议规范
核心概念
MCP 遵循 客户端-服务器架构:
| |
参与者:
- MCP Host:AI 应用(如 Claude Desktop、VS Code、OpenClaw)
- MCP Client:Host 中的连接器,维护与服务器的连接
- MCP Server:提供上下文和能力的程序
两种服务器类型:
- 本地服务器:使用 STDIO 传输,运行在同一台机器
- 远程服务器:使用 HTTP 传输,运行在远程服务器
协议层次
MCP 包含两层:
1. 传输层(Transport Layer)
负责通信机制和认证:
STDIO 传输:
- 使用标准输入/输出流通信
- 仅限本地进程,无网络开销
- 性能最优,适合本地工具
Streamable HTTP 传输:
- HTTP POST 发送客户端消息
- Server-Sent Events (SSE) 流式响应
- 支持远程服务器
- 支持 OAuth 认证
2. 数据层(Data Layer)
基于 JSON-RPC 2.0 的协议:
核心组件:
- 生命周期管理:连接初始化、能力协商、会话控制
- 服务器特性:工具(Tools)、资源(Resources)、提示(Prompts)
- 客户端特性:采样(Sampling)、根目录(Roots)、征询(Elicitation)
- 实用工具:日志、进度跟踪、通知
消息格式
所有 MCP 消息遵循 JSON-RPC 2.0 规范。
请求(Request)
| |
字段说明:
jsonrpc: 必须为 “2.0”id: 字符串或整数,唯一标识符method: 方法名称(如tools/call、resources/list)params: 参数对象
响应(Response)
成功响应:
| |
错误响应:
| |
通知(Notification)
单向消息,无需响应:
| |
服务器特性
MCP 服务器可以提供三种核心能力:
1. Tools(工具)
让 AI 模型执行操作:
| |
2. Resources(资源)
提供上下文数据:
| |
3. Prompts(提示)
预定义的交互模板:
| |
编写一个 MCP 服务
现在让我们用 Python 编写一个完整的 MCP 服务器。我们将实现一个天气查询服务,支持:
- ✅ HTTP 传输(远程访问)
- ✅ OAuth 认证
- ✅ 工具(Tools)
- ✅ 资源(Resources)
项目结构
| |
1. 安装依赖
| |
2. 服务器主程序
weather_server/server.py:
| |
3. 工具实现
weather_server/tools.py:
| |
4. 资源实现
weather_server/resources.py:
| |
5. OAuth 认证实现
weather_server/auth.py:
| |
6. 运行服务器
HTTP 模式(远程访问):
| |
STDIO 模式(本地访问):
| |
配置与使用
使用 mcporter 配置
HTTP 服务器配置
| |
STDIO 服务器配置
| |
配置文件示例
config/mcporter.json:
| |
在 OpenClaw 中使用
1. 查看可用工具
| |
输出:
| |
2. 调用工具
| |
3. 读取资源
| |
OAuth 认证流程
如果你的 MCP 服务器需要认证:
| |
OAuth 流程详解:
| |
最佳实践
安全性考虑
1. 认证与授权
HTTP 服务器:
- ✅ 使用 OAuth 2.0 进行用户认证
- ✅ 使用 HTTPS 加密通信
- ✅ 验证 redirect_uri 防止开放重定向
- ✅ 使用短期访问令牌(1 小时)
- ✅ 实现令牌撤销机制
STDIO 服务器:
- ✅ 从环境变量读取凭据
- ✅ 不在命令行参数中传递敏感信息
- ✅ 验证调用者权限
2. 输入验证
| |
3. 错误处理
| |
性能优化
1. 缓存
| |
2. 异步处理
| |
3. 连接复用
| |
日志与监控
1. 结构化日志
| |
2. 性能监控
| |
总结
核心要点
MCP 是标准化的连接协议
- 一次开发,到处集成
- 降低 AI 应用的集成成本
- 构建可复用的服务器生态
协议层次清晰
- 传输层:STDIO(本地)或 HTTP(远程)
- 数据层:JSON-RPC 2.0 消息格式
- 安全层:OAuth 2.0 认证
Python SDK 简化开发
- 装饰器注册工具和资源
- 自动处理协议细节
- 支持多种传输方式
安全性和性能至关重要
- 严格的输入验证
- 完善的错误处理
- 合理的缓存策略
- 详细的日志监控
下一步
- 📚 探索 MCP 官方文档
- 🔧 查看 Python SDK 示例
- 🌐 浏览 MCP 服务器列表
- 💡 在你的项目中集成 MCP
资源链接
- 官方文档:https://modelcontextprotocol.io
- 协议规范:https://modelcontextprotocol.io/specification/latest
- Python SDK:https://github.com/modelcontextprotocol/python-sdk
- TypeScript SDK:https://github.com/modelcontextprotocol/typescript-sdk
- 服务器示例:https://github.com/modelcontextprotocol/servers
- OpenClaw 文档:https://docs.openclaw.ai
MCP 正在成为 AI 应用与外部世界连接的标准协议。掌握 MCP 开发,意味着你编写的工具可以被 Claude、ChatGPT、Cursor、VS Code 等所有主流 AI 应用使用。
开始你的 MCP 之旅吧!🚀