[CoPaw 教程系列] #12: Copaw Mcp
CoPaw 功能:MCP 模型上下文协议
MCP(Model Context Protocol,模型上下文协议)是 CoPaw 的重要扩展机制,允许 CoPaw 与外部数据源和工具进行交互。本文将详细介绍 MCP 的概念、配置方法和实际应用。
MCP 概述
什么是 MCP?
MCP 是一个标准化的协议,用于:
- 连接外部数据源
- 集成第三方服务
- 扩展 CoPaw 的能力
- 提供统一的接口
MCP 的作用
通过 MCP,CoPaw 可以:
- 访问外部 API
- 读取外部数据库
- 与其他系统交互
- 扩展工具能力
MCP vs Skills
| 特性 | MCP | Skills |
|------|-----|--------|
| 作用 | 连接外部系统 | 扩展内部能力 |
| 复杂度 | 较高 | 较低 |
| 灵活性 | 高 | 中 |
| 适用场景 | 与外部系统集成 | 自定义业务逻辑 |
| 配置方式 | 需要配置客户端 | 编辑文件即可 |
何时使用 MCP:
- 需要连接外部 API
- 需要访问外部数据库
- 需要与第三方服务集成
- 需要实时数据更新
何时使用 Skills:
- 自定义业务逻辑
- 添加领域知识
- 修改 CoPaw 行为
- 扩展内部能力
MCP 客户端管理
在 CoPaw 控制台中,可以管理 MCP 客户端。
创建 MCP 客户端
- 进入控制台 智能体 → MCP
- 点击 创建客户端
- 填写必要信息:
- 名称:客户端名称
- 类型:MCP 类型(如 http、stdio)
- 配置:根据类型填写配置信息
4. 点击 创建
启用/禁用 MCP
- 进入 智能体 → MCP
- 找到目标 MCP 客户端
- 点击开关启用或禁用
删除 MCP
- 进入 智能体 → MCP
- 找到要删除的 MCP 客户端
- 点击删除按钮
- 确认删除
MCP 类型
1. HTTP 类型
HTTP 类型的 MCP 客户端通过 HTTP 协议与外部服务通信。
配置参数:
- URL:服务地址
- Headers:请求头(可选)
- Timeout:超时时间(可选)
适用场景:
- RESTful API
- Webhook 集成
- 第三方服务集成
2. Stdio 类型
Stdio 类型的 MCP 客户端通过标准输入输出与本地进程通信。
配置参数:
- Command:执行的命令
- Args:命令参数
- Env:环境变量(可选)
适用场景:
- 本地工具集成
- 进程间通信
- CLI 工具包装
实战案例
案例 1:连接天气 API
场景:
通过 MCP 连接天气 API,获取实时天气数据。
步骤 1:创建 HTTP MCP 客户端
- 进入控制台 智能体 → MCP
- 点击 创建客户端
- 填写配置:
名称:weather_api
类型:http
配置:
{
"url": "https://api.weather.com/v1",
"headers": {
"Authorization": "Bearer your-api-key",
"Content-Type": "application/json"
},
"timeout": 30
}
- 点击 创建
步骤 2:使用 MCP
对话示例:
你:查一下北京的天气
CoPaw:(调用 weather_api MCP)
北京天气
当前天气
- 气温:18°C
- 天气:晴
- 湿度:45%
- 风向:东南风
- 风速:3级
未来 3 小时预报
- 14:00 - 19°C,晴
- 15:00 - 20°C,多云
- 16:00 - 20°C,多云
案例 2:连接数据库
场景:
通过 MCP 连接数据库,查询和更新数据。
步骤 1:创建 Stdio MCP 客户端
- 进入控制台 智能体 → MCP
- 点击 创建客户端
- 填写配置:
名称:database_connector
类型:stdio
配置:
{
"command": "python",
"args": [
"/path/to/database_connector.py",
"--host", "localhost",
"--port", "5432",
"--database", "myapp",
"--user", "admin"
],
"env": {
"DB_PASSWORD": "your-password"
}
}
- 点击 创建
步骤 2:创建数据库连接器脚本
database_connector.py
import sys
import json
import psycopg2
from typing import Dict, Any
数据库配置
DB_CONFIG = {
"host": sys.argv[2] if len(sys.argv) > 2 else "localhost",
"port": int(sys.argv[4]) if len(sys.argv) > 4 else 5432,
"database": sys.argv[6] if len(sys.argv) > 6 else "myapp",
"user": sys.argv[8] if len(sys.argv) > 8 else "admin",
"password": os.getenv("DB_PASSWORD")
}
def connect():
"""连接数据库"""
return psycopg2.connect(DB_CONFIG)
def query(sql: str, params: tuple = None) -> list:
"""执行查询"""
conn = connect()
try:
cursor = conn.cursor()
cursor.execute(sql, params or ())
columns = [desc[0] for desc in cursor.description]
rows = cursor.fetchall()
return [dict(zip(columns, row)) for row in rows]
finally:
conn.close()
def execute(sql: str, params: tuple = None) -> int:
"""执行更新/插入/删除"""
conn = connect()
try:
cursor = conn.cursor()
cursor.execute(sql, params or ())
conn.commit()
return cursor.rowcount
finally:
conn.close()
def handle_request(request: Dict[str, Any]) -> Dict[str, Any]:
"""处理请求"""
action = request.get("action")
if action == "query":
return {
"status": "success",
"data": query(request["sql"], request.get("params"))
}
elif action == "execute":
return {
"status": "success",
"affected_rows": execute(request["sql"], request.get("params"))
}
else:
return {
"status": "error",
"message": f"Unknown action: {action}"
}
def main():
"""主函数"""
for line in sys.stdin:
request = json.loads(line)
response = handle_request(request)
print(json.dumps(response))
sys.stdout.flush()
if __name__ == "__main__":
main()
步骤 3:使用 MCP
对话示例:
你:查询所有用户的数量
CoPaw:(调用 database_connector MCP)
用户总数:150
你:列出最近的 5 个订单
CoPaw:(调用 database_connector MCP)
最近 5 个订单
| 订单号 | 用户 | 产品 | 金额 | 日期 |
|--------|------|------|------|------|
| 1001 | 张三 | 产品A | ¥500 | 2024-03-15 |
| 1002 | 李四 | 产品B | ¥300 | 2024-03-15 |
| 1003 | 王五 | 产品A | ¥500 | 2024-03-14 |
| 1004 | 赵六 | 产品C | ¥200 | 2024-03-14 |
| 1005 | 钱七 | 产品B | ¥300 | 2024-03-13 |
案例 3:连接文件服务器
场景:
通过 MCP 连接文件服务器,上传和下载文件。
步骤 1:创建 HTTP MCP 客户端
- 进入控制台 智能体 → MCP
- 点击 创建客户端
- 填写配置:
名称:file_server
类型:http
配置:
{
"url": "https://files.example.com/api",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
- 点击 创建
步骤 2:使用 MCP
对话示例:
你:上传 report.pdf 到文件服务器
CoPaw:(调用 file_server MCP)
文件已上传!
- 文件名:report.pdf
- 大小:2.5MB
- URL:https://files.example.com/files/report.pdf
- 分享链接:https://files.example.com/s/abc123
你:下载 files/example.csv 这个文件
CoPaw:(调用 file_server MCP)
文件已下载!
- 文件名:example.csv
- 大小:1.2MB
- 路径:/home/user/downloads/example.csv
案例 4:连接监控系统
场景:
通过 MCP 连接监控系统,获取系统状态和告警信息。
步骤 1:创建 HTTP MCP 客户端
- 进入控制台 智能体 → MCP
- 点击 创建客户端
- 填写配置:
名称:monitoring_system
类型:http
配置:
{
"url": "https://monitor.example.com/api",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
- 点击 创建
步骤 2:使用 MCP
对话示例:
你:查看系统状态
CoPaw:(调用 monitoring_system MCP)
系统状态
服务器
- CPU 使用率:45%
- 内存使用率:60%
- 磁盘使用率:30%
- 网络流量:正常
服务
- Web 服务:✅ 运行中
- 数据库:✅ 运行中
- 缓存:✅ 运行中
- 队列:⚠️ 负载较高
告警
- ⚠️ 队列服务负载较高(超过 80%)
- ⚠️ 数据库慢查询增加
你:查看今天的告警
CoPaw:(调用 monitoring_system MCP)
今日告警 - 2024-03-15
告警统计
- 总数:15
- 严重:2
- 警告:8
- 信息:5
严重告警
- 数据库连接失败
- 时间:09:15
- 持续:5 分钟
- 状态:已恢复
- 磁盘空间不足
- 时间:14:30
- 磁盘:/dev/sda1
- 使用率:85%
警告告警
- 队列服务负载较高
- 数据库慢查询增加
- ...(其他警告)
建议
- 及时清理磁盘空间
- 优化慢查询
- 监控队列服务负载
MCP 最佳实践
1. 安全配置
- 使用 HTTPS
- 使用 API Key 认证
- 定期更新密钥
- 限制访问权限
2. 错误处理
- 提供清晰的错误信息
- 记录错误日志
- 实现重试机制
- 设置超时时间
3. 性能优化
- 合理设置超时
- 使用缓存
- 批量操作
- 限制并发
4. 监控和日志
- 记录所有请求
- 监控响应时间
- 统计使用情况
- 设置告警
5. 版本控制
- 使用 API 版本
- 向后兼容
- 通知变更
- 提供迁移指南
MCP 与 Skills 协同
MCP 和 Skills 可以协同工作,提供更强大的能力。
场景 1:MCP + Skill 组合
需求:
连接外部 API 并处理返回数据。
配置:
- 创建 MCP 客户端连接 API
- 创建 Skill 处理和展示数据
示例:
MCP: weather_api - 获取天气数据
Skill: weather_formatter - 格式化天气信息
结果:格式化的天气报告
场景 2:多个 MCP 客户端
需求:
集成多个外部服务。
配置:
- MCP 1:天气 API
- MCP 2:日历 API
- MCP 3:邮件 API
使用:
获取天气 -> 查看日程 -> 发送邮件通知
常见问题
Q1: MCP 客户端连接失败?
A: 检查:
- URL 是否正确
- API Key 是否有效
- 网络连接是否正常
- 服务是否运行
Q2: 如何调试 MCP?
A:
- 查看 CoPaw 的日志
- 检查 MCP 客户端配置
- 测试外部服务
- 使用工具(如 curl)测试 API
Q3: MCP 支持哪些认证方式?
A: 支持:
- API Key
- OAuth 2.0
- Basic Auth
- 自定义认证
Q4: MCP 可以同时连接多个服务吗?
A: 可以。创建多个 MCP 客户端,每个连接一个服务。
Q5: MCP 和 Skills 如何选择?
A:
- 需要连接外部系统 → MCP
- 需要自定义业务逻辑 → Skills
- 两者可以同时使用
下一步
现在你已经了解了 MCP 的使用方法。接下来建议:
- 阅读下一篇:CoPaw 高级:环境变量与运行配置 - 学习高级配置
- 创建你的第一个 MCP:连接一个外部 API
- 探索更多功能:深入了解 MCP 的能力
- 实战应用:在实际工作中应用 MCP
总结
MCP 是 CoPaw 的重要扩展机制:
✅ 连接外部系统
- API、数据库、文件服务器
✅ 多种类型
- HTTP、Stdio 等
✅ 灵活配置
- 通过控制台管理
✅ 与 Skills 协同
- 组合使用更强大
✅ 标准化协议
- 易于集成和扩展
通过 MCP,CoPaw 可以与任何外部系统交互,实现真正的能力扩展。
相关资源**:
- CoPaw 官方文档:https://copaw.agentscope.io/
- CoPaw MCP 文档:https://copaw.agentscope.io/docs/mcp
- MCP 规范:https://modelcontextprotocol.io/
- CoPaw GitHub:https://github.com/agentscope-ai/CoPaw







