第三章 MCP 集成
MCP(Model Context Protocol)是 AI 工具接入的标准协议。通过 MCP,Hermes Agent 可以连接数百种外部工具服务器——数据库、文件系统、API 网关——无需写一行代码。
MCP 是什么?
MCP 是一个开放协议,定义了 AI Agent 如何发现和调用外部工具。类比 USB-C——一个标准接口,接什么设备都行。
┌──────────────┐ MCP 协议 ┌──────────────┐
│ Hermes Agent │ ◄──────────────► │ MCP Server │
│ (Client) │ JSON-RPC │ (工具提供方) │
└──────────────┘ └──────────────┘核心概念:
- MCP Server:提供工具的服务端(如文件系统、数据库、API)
- MCP Client:连接 Server 并调用工具的客户端(Hermes 就是 Client)
- Transport:通信方式(stdio 或 HTTP)
两种接入方式
Hermes 提供两种 MCP 接入方式:
方式一:Native MCP(推荐)
直接在 config.yaml 中配置,MCP 工具自动注册为 Hermes 原生工具。
方式二:mcporter CLI
通过 mcporter 技能临时连接和调试 MCP 服务器。
| Native MCP | mcporter | |
|---|---|---|
| 配置方式 | config.yaml | 对话中临时调用 |
| 持久化 | ✅ 永久生效 | ❌ 仅当次会话 |
| 自动发现 | ✅ 启动时自动 | ❌ 手动指定 |
| 适合场景 | 日常使用 | 调试、探索 |
配置 Native MCP
stdio 传输(本地命令)
yaml
# ~/.hermes/config.yaml
mcp_servers:
filesystem:
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
env:
NODE_OPTIONS: "--max-old-space-size=4096"
sqlite:
command: uvx
args: ["mcp-server-sqlite", "--db-path", "/path/to/my.db"]HTTP 传输(远程服务)
yaml
mcp_servers:
my-api:
url: https://my-mcp-server.example.com/mcp
headers:
Authorization: "Bearer ${MY_API_TOKEN}"环境变量替换
支持 ${VAR} 语法引用环境变量:
yaml
mcp_servers:
database:
command: uvx
args: ["mcp-server-postgres"]
env:
DATABASE_URL: "postgresql://${DB_USER}:${DB_PASS}@localhost/mydb"管理 MCP 服务器
查看已配置的服务器
bash
hermes mcp list查看服务器工具
bash
hermes mcp tools <server-name>调试连接
bash
hermes mcp inspect <server-name>交互式配置
bash
hermes mcp setup常用 MCP Server
| Server | 安装 | 功能 |
|---|---|---|
| filesystem | npx @modelcontextprotocol/server-filesystem | 文件读写 |
| sqlite | uvx mcp-server-sqlite | SQLite 数据库 |
| postgres | uvx mcp-server-postgres | PostgreSQL |
| github | npx @modelcontextprotocol/server-github | GitHub API |
| brave-search | npx @modelcontextprotocol/server-brave-search | Brave 搜索 |
| puppeteer | npx @modelcontextprotocol/server-puppeteer | 浏览器自动化 |
| slack | npx @modelcontextprotocol/server-slack | Slack API |
TIP
MCP 生态正在快速增长。查看 MCP Server 目录 获取完整列表。
安全机制
工具过滤
Hermes 会自动过滤 MCP 工具中的危险操作:
yaml
mcp_servers:
my-server:
command: npx
args: ["my-mcp-server"]
# 可选:只允许特定工具
allowed_tools:
- read_file
- search
# 可选:禁止特定工具
blocked_tools:
- delete_all自动重连
Native MCP 支持自动重连。如果 MCP Server 进程崩溃,Hermes 会自动重启它。
沙箱隔离
MCP Server 进程在独立的环境中运行,不会直接影响 Hermes 主进程。
实战:连接 SQLite 数据库
步骤 1:安装 MCP Server
bash
# 需要 uvx(uv 工具的一部分)
pip install uv步骤 2:配置
yaml
# ~/.hermes/config.yaml
mcp_servers:
my-db:
command: uvx
args: ["mcp-server-sqlite", "--db-path", "~/data/myapp.db"]步骤 3:测试
你:连接 my-db 数据库,列出所有表
Hermes:[发现 MCP 工具...] [调用 list_tables...]
数据库中有 3 个表:
- users
- orders
- products你:查询最近 10 条订单
Hermes:[调用 execute_sql...]
| id | user | product | amount | date |
|----|------|---------|--------|------|
| 1 | 张三 | iPhone | 6999 | 04-12|
| ... |步骤 4:自然语言查询
MCP 工具注册后,你可以用自然语言操作数据库:
你:帮我查一下哪些用户的订单总额超过 10000
Hermes:[自动生成 SQL 并执行...]mcporter 技能
mcporter 技能提供交互式 MCP 管理:
你:用 mcporter 列出所有已配置的 MCP 服务器
Hermes:[调用 mcporter CLI...]
已配置 2 个服务器:
1. filesystem (stdio) - 5 tools
2. my-db (stdio) - 3 tools临时连接一个新的 MCP Server:
你:用 mcporter 临时连接 npx @my-org/my-mcp-server
Hermes:[启动临时 MCP Server...] [发现工具...]
找到 4 个工具:...