[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 客户端

  1. 进入控制台 智能体 → MCP
  2. 点击 创建客户端
  3. 填写必要信息:
  • 名称:客户端名称
  • 类型:MCP 类型(如 http、stdio)
  • 配置:根据类型填写配置信息

4. 点击 创建

启用/禁用 MCP

  1. 进入 智能体 → MCP
  2. 找到目标 MCP 客户端
  3. 点击开关启用或禁用

删除 MCP

  1. 进入 智能体 → MCP
  2. 找到要删除的 MCP 客户端
  3. 点击删除按钮
  4. 确认删除

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 客户端

  1. 进入控制台 智能体 → MCP
  2. 点击 创建客户端
  3. 填写配置:

名称:weather_api

类型:http

配置:

{

"url": "https://api.weather.com/v1",

"headers": {

"Authorization": "Bearer your-api-key",

"Content-Type": "application/json"

},

"timeout": 30

}

  1. 点击 创建

步骤 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 客户端

  1. 进入控制台 智能体 → MCP
  2. 点击 创建客户端
  3. 填写配置:

名称:database_connector

类型:stdio

配置:

{

"command": "python",

"args": [

"/path/to/database_connector.py",

"--host", "localhost",

"--port", "5432",

"--database", "myapp",

"--user", "admin"

],

"env": {

"DB_PASSWORD": "your-password"

}

}

  1. 点击 创建

步骤 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 客户端

  1. 进入控制台 智能体 → MCP
  2. 点击 创建客户端
  3. 填写配置:

名称:file_server

类型:http

配置:

{

"url": "https://files.example.com/api",

"headers": {

"Authorization": "Bearer your-api-key"

}

}

  1. 点击 创建

步骤 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 客户端

  1. 进入控制台 智能体 → MCP
  2. 点击 创建客户端
  3. 填写配置:

名称:monitoring_system

类型:http

配置:

{

"url": "https://monitor.example.com/api",

"headers": {

"Authorization": "Bearer your-api-key"

}

}

  1. 点击 创建

步骤 2:使用 MCP

对话示例:

你:查看系统状态

CoPaw:(调用 monitoring_system MCP)

系统状态

服务器

  • CPU 使用率:45%
  • 内存使用率:60%
  • 磁盘使用率:30%
  • 网络流量:正常

服务

  • Web 服务:✅ 运行中
  • 数据库:✅ 运行中
  • 缓存:✅ 运行中
  • 队列:⚠️ 负载较高

告警

  • ⚠️ 队列服务负载较高(超过 80%)
  • ⚠️ 数据库慢查询增加

你:查看今天的告警

CoPaw:(调用 monitoring_system MCP)

今日告警 - 2024-03-15

告警统计

  • 总数:15
  • 严重:2
  • 警告:8
  • 信息:5

严重告警

  1. 数据库连接失败
  • 时间:09:15
  • 持续:5 分钟
  • 状态:已恢复
  1. 磁盘空间不足
  • 时间:14:30
  • 磁盘:/dev/sda1
  • 使用率:85%

警告告警

  1. 队列服务负载较高
  2. 数据库慢查询增加
  3. ...(其他警告)

建议

  • 及时清理磁盘空间
  • 优化慢查询
  • 监控队列服务负载

MCP 最佳实践

1. 安全配置

  • 使用 HTTPS
  • 使用 API Key 认证
  • 定期更新密钥
  • 限制访问权限

2. 错误处理

  • 提供清晰的错误信息
  • 记录错误日志
  • 实现重试机制
  • 设置超时时间

3. 性能优化

  • 合理设置超时
  • 使用缓存
  • 批量操作
  • 限制并发

4. 监控和日志

  • 记录所有请求
  • 监控响应时间
  • 统计使用情况
  • 设置告警

5. 版本控制

  • 使用 API 版本
  • 向后兼容
  • 通知变更
  • 提供迁移指南

MCP 与 Skills 协同

MCP 和 Skills 可以协同工作,提供更强大的能力。

场景 1:MCP + Skill 组合

需求:

连接外部 API 并处理返回数据。

配置:

  1. 创建 MCP 客户端连接 API
  2. 创建 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:

  1. 查看 CoPaw 的日志
  2. 检查 MCP 客户端配置
  3. 测试外部服务
  4. 使用工具(如 curl)测试 API

Q3: MCP 支持哪些认证方式?

A: 支持:

  • API Key
  • OAuth 2.0
  • Basic Auth
  • 自定义认证

Q4: MCP 可以同时连接多个服务吗?

A: 可以。创建多个 MCP 客户端,每个连接一个服务。

Q5: MCP 和 Skills 如何选择?

A:

  • 需要连接外部系统 → MCP
  • 需要自定义业务逻辑 → Skills
  • 两者可以同时使用

下一步

现在你已经了解了 MCP 的使用方法。接下来建议:

  1. 阅读下一篇:CoPaw 高级:环境变量与运行配置 - 学习高级配置
  2. 创建你的第一个 MCP:连接一个外部 API
  3. 探索更多功能:深入了解 MCP 的能力
  4. 实战应用:在实际工作中应用 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

发表回复

后才能评论