🔌 Stage 06

MCP协议与
工具链集成

MCP 协议已成为 AI 工具调用的事实标准(Linux 基金会 AAIF 治理,9700万+安装),A2A 协议则补齐了 Agent 间通信的最后一块拼图。本阶段深入掌握 MCP+A2A 双协议体系,学会开发自定义 MCP 服务器,构建多工具协同的智能化工作流。


Core Concept
🔌 Model Context Protocol (MCP)

MCP 已从 Anthropic 主导的协议发展为 Linux 基金会 AAIF 治理的行业事实标准,拥有 9700万+安装量、5000+ Server、81000+ GitHub Stars。2026-07-28 规范带来重大变更:无状态化、Streamable HTTP 传输、OAuth 2.1。

📡
MCP 是什么
MCP 是一个开放协议,标准化了 AI 应用如何连接和操作数据源、工具和外部服务。它解决了以下问题:

核心价值:
  • 统一的接口标准,避免每个AI应用都写自己的集成代码
  • 支持双向通信,AI可以读取数据也可以执行操作
  • 插件化架构,易于扩展新的数据源和工具
  • 安全性设计,权限控制和沙箱隔离
开放标准 双向通信 插件化
🏗️
MCP 架构组成
MCP Client
AI应用端,如 Claude Desktop、Hermes Agent,发起请求并接收响应
MCP Server
服务端,提供数据和工具能力,如文件系统、数据库、API等
Transport Layer
传输层,支持 stdio(本地)和 Streamable HTTP(远程,2026新规范)
Tools & Resources
暴露给AI的工具和资源列表,定义可执行的操作和可访问的数据
🔄
MCP 工作流程
典型交互流程:
  1. 初始化:Client 连接到 Server,交换能力列表
  2. 发现:Client 查询可用的 Tools 和 Resources
  3. 调用:AI 决定调用某个 Tool,发送请求参数
  4. 执行:Server 执行实际操作(读文件、查数据库等)
  5. 返回:Server 将结果返回给 Client
  6. 决策:AI 根据结果决定下一步行动
💡 为什么 MCP 成为事实标准?
MCP 就像 AI 世界的 USB 接口——统一了工具调用标准。2025年12月捐赠给 Linux 基金会 AAIF 后,生态爆发式增长:9700万+安装、5000+ Server,几乎所有主流 AI 工具都已支持。

Agent-to-Agent Protocol
🤝 A2A 协议 — Agent 间通信标准

Google 2025 年 4 月推出,150+ 组织参与,2026 年 5 月发布 v1.0。MCP 解决 Agent-to-Tool,A2A 解决 Agent-to-Agent,双协议构建完整 Agent 生态。

🔍
A2A 核心机制
  • Agent Card 发现:通过 /.well-known/agent.json 自动发现可用 Agent 及其能力
  • 任务生命周期:提交 → 执行中 → 需要输入 → 完成/失败
  • 流式通信:支持 SSE 实时推送执行进度
  • 多模态支持:可传递文本、文件、结构化数据
Agent Card 任务委托 v1.0
⚖️
MCP + A2A:完整生态
双协议协作模型
Agent A —A2A—> Agent B
Agent 间协商、委托任务
Agent A —MCP—> Tool (DB/API/FS)
Agent 调用外部工具和数据
Agent B —MCP—> Tool (Search/Code)
每个 Agent 独立调用自己的工具

Server Development
🛠️ MCP Server 开发实战

动手开发自己的 MCP Server,让 Agent 调用你的自定义工具。支持 Python 和 TypeScript 两种语言。

🐍
Python 版本(推荐)
# pip install mcp
from mcp.server import Server
from mcp.types import Tool, TextContent

# 创建 MCP Server
server = Server("my-tools")

@server.list_tools()
async def list_tools():
    return [
        Tool(
            name="query_database",
            description="查询业务数据库",
            inputSchema={
                "type": "object",
                "properties": {
                    "sql": {
                        "type": "string",
                        "description": "SQL查询语句"
                    }
                },
                "required": ["sql"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name, arguments):
    if name == "query_database":
        result = execute_sql(arguments["sql"])
        return [TextContent(
            type="text",
            text=str(result)
        )]
Python async/await mcp SDK
📘
TypeScript 版本
// npm install @modelcontextprotocol/sdk
import { McpServer } from
  "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from
  "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

// 创建 MCP Server
const server = new McpServer({
  name: "my-tools",
  version: "1.0.0"
});

// 注册工具
server.tool(
  "query_database",
  "查询业务数据库",
  { sql: z.string().describe("SQL查询语句") },
  async ({ sql }) => {
    const result = await executeSQL(sql);
    return {
      content: [{
        type: "text",
        text: JSON.stringify(result)
      }]
    };
  }
);

// 启动服务
const transport = new StdioServerTransport();
await server.connect(transport);
TypeScript Zod验证 stdio
💡 开发流程:① 定义工具列表(名称、描述、参数 Schema)→ ② 实现工具调用逻辑 → ③ 选择传输方式(stdio/streamable-http)→ ④ 在 Dify/Hermes 中注册 → ⑤ 测试调试。

Security
🔒 MCP 安全最佳实践

MCP 让 AI 能够调用外部工具,也意味着安全风险增加。必须建立完善的安全防护体系。

⚠️ 安全风险清单
1
工具注入攻击
恶意工具描述可能诱导 AI 执行危险操作(如删除文件、泄露数据)
2
权限过度授予
给 MCP Server 授予了超出实际需要的权限,扩大攻击面
3
供应链风险
第三方 MCP Server 可能包含恶意代码或不安全的依赖
✅ 安全防护措施
最小权限原则
每个 MCP Server 只授予必需的最小权限
沙箱隔离
在 Docker 容器或沙箱中运行 MCP Server
输入验证
对所有工具输入参数进行严格校验和过滤
审计日志
记录所有工具调用,便于安全审计和回溯
人工审批
危险操作(写入/删除)需人工确认
OAuth 2.1
远程 MCP Server 使用 OAuth 2.1 认证

Practical Skills
🤖 Hermes Agent 部署与配置

Hermes 是 Nous Research 开发的开源 Agent 框架,支持 MCP 协议,是学习和实践的理想平台。

1️⃣ 环境准备与 Docker 安装
前置条件:
  • Docker Desktop 已安装并运行
  • Windows 版本 ≥ 22H2
  • 建议内存 ≥ 8GB
创建部署目录:
mkdir -p d:\System\Docker\hermes
cd d:\System\Docker\hermes
端口说明:
8088 Hermes Dashboard Web 界面
11435 Hermes API 接口
2️⃣ 创建 docker-compose.yml
docker-compose.yml 核心配置:
services:
  hermes:
    image: nousresearch/hermes-agent:latest
    container_name: hermes-agent
    volumes:
      - ./.hermes:/opt/data
    environment:
      - ANTHROPIC_API_KEY=your-api-key-here
      - ANTHROPIC_BASE_URL=http://coding.zhengyuantech.cn
      - HERMES_DASHBOARD=true
      - GATEWAY_ALLOW_ALL_USERS=true
    ports:
      - "8088:9119"
      - "11435:11434"
    restart: unless-stopped
    command: ["gateway"]
⚠️ 重要配置说明:
  • command: ["gateway"] 必须添加,否则无法启用 Web 界面
  • HERMES_DASHBOARD=true 启用 Dashboard
  • GATEWAY_ALLOW_ALL_USERS=true 允许访问(生产环境需调整)
  • 容器内 Dashboard 运行在端口 9119,映射到主机 8088
3️⃣ 配置模型供应商
修改环境变量 (.env):
ANTHROPIC_API_KEY=sk-your-api-key
ANTHROPIC_BASE_URL=http://coding.zhengyuantech.cn
配置默认模型 (config.yaml):
model:
  default: "qwen3.6-plus"
  provider: "anthropic"
  base_url: "http://coding.zhengyuantech.cn"
可用模型列表:
qwen3.6-plus 通义千问3.6(推荐用于代码任务)
glm-5 智谱GLM-5
MiniMax-M2.5 MiniMax快速模型
claude-opus-4.6 Claude Opus
4️⃣ 启动与验证
启动命令:
cd d:\System\Docker\hermes
docker-compose up -d
验证服务状态:
# 查看容器状态
docker ps | findstr hermes

# 查看日志
docker-compose logs -f
访问地址: CLI 测试:
# 交互式聊天
docker exec -it hermes-agent hermes chat

# 单次对话
docker exec hermes-agent hermes chat --prompt "Hello, Hermes!"

Integration
🔧 Dify MCP Adapter 集成

Dify v1.15.0 已原生支持 MCP 双向集成(既可作为 MCP Server 被外部调用,也可作为 MCP Client 调用外部工具),自定义 Adapter 作为深度定制的备选方案。

🛠️
Adapter 功能
可用工具:
  • list_dify_apps - 列出所有 Dify 应用
  • call_dify_chat_app - 调用 Dify 聊天应用
  • get_app_info - 获取应用详细信息
核心特性:
  • stdio 传输模式(性能好)
  • 支持会话持续对话
  • 环境变量配置
  • Docker 支持
🚀
快速集成步骤
方式一:直接集成到 Hermes(推荐)
  1. 安装 Python 依赖:pip install -r requirements.txt
  2. 挂载代码到 Hermes 容器
  3. 重启 Hermes:docker-compose down && docker-compose up -d
  4. 添加 MCP 服务器:hermes mcp add dify-mcp-adapter
方式二:独立 Docker 部署
  1. 配置 .env 文件(填入 API Key)
  2. 启动容器:docker-compose up -d
💡 最佳实践:优先使用 Dify 官方 MCP 插件,仅在需要深度定制时使用自定义 Adapter。官方插件更稳定、维护更及时。

Case Study
💼 实战案例:构建智能工作流

结合 Hermes Agent、Dify MCP Adapter 和多个工具,构建自动化的智能工作流。

场景描述
假设你需要一个智能助手,能够:
  • 自动查询 Dify 中的应用列表
  • 根据用户需求调用特定的 Dify 应用
  • 读取本地文件系统中的文档
  • 将处理结果保存到指定位置
解决方案架构
Hermes Agent(主控)
├── MCP Server 1: Dify Adapter(访问 Dify 应用)
├── MCP Server 2: Filesystem(读写本地文件)
├── MCP Server 3: Database(查询业务数据)
└── MCP Server 4: Custom API(调用内部服务)

工作流程:
  1. 用户提问:"帮我分析上月的销售数据"
  2. Hermes 调用 Database MCP 查询销售数据
  3. 调用 Dify MCP 触发数据分析应用
  4. 将分析结果通过 Filesystem MCP 保存为报告
  5. 返回给用户完整报告路径和摘要
✅ 优势
  • 模块化设计,易于扩展新工具
  • 标准化接口,降低集成复杂度
  • Agent 自主决策,减少人工干预
  • 可追溯的执行日志,便于调试
⚠️ 注意事项
  • 合理设置超时时间,避免无限等待
  • 权限控制,防止未授权访问
  • 错误处理,优雅降级而非崩溃
  • 性能监控,及时发现瓶颈

Troubleshooting
❓ 常见问题与解决
问题1:无法访问 Dashboard
检查项:
  • 确认容器是否运行:docker-compose ps
  • 检查日志中的错误:docker-compose logs -f
  • 验证端口映射:Dashboard 在容器内运行在端口 9119
  • 确保设置了 HERMES_DASHBOARD=true
问题2:配置文件解析错误
解决方法:
  • 确保 config.yaml 有有效的 YAML 语法
  • 从注释中移除非 ASCII 字符(如中文)
  • 验证所有部分的缩进正确
  • 使用 UTF-8 编码保存文件
问题3:MCP 工具调用失败
排查步骤:
  • 验证 API Key 是否正确
  • 确认目标服务是否正常运行
  • 检查网络连接(host.docker.internal 配置)
  • 查看 Hermes 日志中的详细错误信息
问题4:端口已被占用
解决方案:
  • 如果 8088 被占用,更改主机端口映射
  • 示例:使用 - "8089:9119" 替代 - "8088:9119"
  • 查看端口占用:netstat -ano | findstr ":8088"
  • 终止占用进程或更换端口

Resources
📚 学习资源

My Notes
📝 我的学习笔记

暂无笔记内容
你可以在这里添加自己在实践中总结的经验、遇到的问题和解决方案