Hermes Agent MCP 集成
Hermes Agent MCP 集成 MCP(Model Context Protocol)是 Anthropic 提出的开放协议,用于标准化 LLM 与外部工具的交互。 Hermes 原生支持 MCP,无需修改核心代码就能接入 GitHub、数据库、文件系统、浏览器堆栈、内部 API 等任何 MCP 兼容服务。 本章将深入 MCP 的两种接入方式、工具过滤策略、安全隔离机制以及常见问题排查。 什么是 MCP MCP 解决了一个..
Tutorial detail pages default to noindex.
Hermes Agent MCP 集成
MCP(Model Context Protocol)是 Anthropic 提出的开放协议,用于标准化 LLM 与外部工具的交互。
Hermes 原生支持 MCP,无需修改核心代码就能接入 GitHub、数据库、文件系统、浏览器堆栈、内部 API 等任何 MCP 兼容服务。
本章将深入 MCP 的两种接入方式、工具过滤策略、安全隔离机制以及常见问题排查。
什么是 MCP
MCP 解决了一个实际问题:每接入一个新服务,传统做法需要写适配代码、定义工具 Schema、处理认证——每个服务都是一次性工作。
MCP 把这些标准化了。任何实现 MCP 协议的服务,Hermes 都能直接接入,无需额外开发。
MCP 的核心角色:
Hermes Agent(MCP 客户端)
│
├── stdio ──→ MCP 服务器 A(本地子进程)
│ └── 暴露工具:git_commit, git_push...
│
├── HTTP ───→ MCP 服务器 B(远程服务)
│ └── 暴露工具:list_issues, create_issue...
│
└── HTTP ───→ MCP 服务器 C(远程 OAuth)
└── 暴露工具:search_docs, create_page...
标准安装已包含 MCP 支持,无需额外步骤。所有 MCP 服务器在 ~/.hermes/config.yaml 中统一配置。
MCP 不是 Hermes 的专有协议——它是开放的。为其他支持 MCP 的工具编写的服务器(如 Claude Code 的 MCP 服务器)可以直接在 Hermes 中使用,反之亦然。
两种 MCP 服务器类型
本地 stdio 服务器
以子进程形式在本地运行,通过标准输入/输出(stdin/stdout)与 Hermes 通信。
通信使用 JSON-RPC 协议,每条消息以换行符分隔。
适用场景:工具已本地安装,需要低延迟访问本地资源(文件系统、Git 仓库、本地数据库)。
实例
# MCP stdio 服务器配置
mcp_servers:
# GitHub 服务器:通过 npx 启动
github:
command: "npx"
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_..."
# 文件系统服务器:限制 Agent 的访问范围
filesystem:
command: "npx"
args:
- "-y"
- "@modelcontextprotocol/server-filesystem"
- "/home/user/projects" # 只允许访问此目录
# Git 服务器:通过 uvx 启动
git:
command: "uvx"
args:
- "mcp-server-git"
- "--repository"
- "/home/user/project"
stdio 服务器的生命周期由 Hermes 管理:
- 会话启动或
/reload-mcp时,Hermes 启动子进程 - 会话结束或禁用服务器时,Hermes 终止子进程
- 子进程崩溃会自动重启(最多重试 3 次)
远程 HTTP 服务器
通过 HTTP 请求直接连接远程 MCP 端点,支持多种认证方式。
适用场景:工具在远端托管,或组织内部已有 MCP 接口。
实例
# MCP HTTP 服务器配置
mcp_servers:
# 方式一:静态 Bearer Token 认证
internal_api:
url: "https://mcp.internal.example.com/mcp"
headers:
Authorization: "Bearer ${MY_TOKEN}" # 支持环境变量
# 方式二:OAuth 2.1 认证(Linear、Sentry、Figma、Stripe 等)
linear:
url: "https://mcp.linear.app/mcp"
auth: oauth
# 方式三:需要预注册 OAuth 客户端的提供商
googledrive:
url: "https://drivemcp.googleapis.com/mcp/v1"
auth: oauth
oauth:
client_id: "<your-oauth-client-id>" # 预注册获取
client_secret: "<your-oauth-client-secret>"
两种类型对比
| 维度 | stdio 服务器 | HTTP 服务器 |
|---|---|---|
| 运行位置 | 本机(子进程) | 远程(独立服务) |
| 通信方式 | stdin/stdout + JSON-RPC | HTTP 请求 |
| 生命周期 | Hermes 管理启停 | 独立于 Hermes |
| 延迟 | 极低(进程内通信) | 取决于网络延迟 |
| 认证 | 环境变量传递 | Bearer Token / OAuth 2.1 |
| 典型场景 | 本地 Git、文件系统、数据库 | GitHub API、Linear、Sentry |
| 配置复杂度 | 低(一行 command) | 中(需配置 URL + 认证) |
Nous 精选 MCP 目录
Hermes 内置了一个经 Nous Research 审核的 MCP 目录,提供一键安装体验。
浏览与安装
打开交互式选择器(TUI),浏览所有目录条目:
hermes mcp
其他命令:
# 纯文本列表(适合脚本化) hermes mcp catalog # 按名称一键安装 hermes mcp install n8n hermes mcp install github hermes mcp install linear
交互式选择器显示每个条目的当前状态:
n8n available 管理和检查 n8n 工作流 linear enabled Linear 问题/项目管理(远程 OAuth) github installed (disabled) GitHub 仓库 + PR 工具 filesystem installed (enabled) 安全的文件系统操作 postgres available PostgreSQL 数据库查询 slack available Slack 消息和频道管理
状态说明:
| 状态 | 含义 |
|---|---|
| available | 可安装,尚未安装 |
| installed (enabled) | 已安装且已启用,Agent 可以使用 |
| installed (disabled) | 已安装但已禁用,Agent 不可使用 |
| enabled | 远程 OAuth 服务器,已授权启用 |
桌面版在设置菜单中查看配置:

仪表盘在左侧 MCP 菜单查看配置:

安装过程发生了什么
一键安装自动完成三步:
- 配置引导:提示填写 API Key 或引导 OAuth 浏览器授权流程
- 工具探测:连接服务器,获取其暴露的完整工具列表
- 工具选择:展示工具清单让你勾选要启用的工具(默认全选)
第三步(工具选择)是重要的安全环节——不是每个工具你都需要。比如 GitHub 服务器暴露了 delete_repo,如果你不需要,可以取消勾选。
工具过滤:只暴露你需要的
每个 MCP 服务器都支持精细的工具过滤。这是减少 Agent 攻击面的关键安全机制。
include 模式(白名单)
只注册列表中的工具,其余全部排除:
实例
# include 白名单模式——最安全的选择
mcp_servers:
github:
command: "npx"
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_..."
tools:
include:
- list_issues
- create_issue
- update_issue
- search_code
# 这 4 个之外的任何工具都不会注册
exclude 模式(黑名单)
排除列表中的工具,其余全部注册:
实例
# exclude 黑名单模式——排除高风险操作
mcp_servers:
stripe:
url: "https://mcp.stripe.com"
headers:
Authorization: "Bearer ${STRIPE_KEY}"
tools:
exclude:
- delete_customer
- refund_payment
- create_live_key
# 这 3 个之外的任何工具都会注册
过滤规则优先级
| 配置 | 行为 | 适用场景 |
|---|---|---|
| 仅 include | 只注册 include 列表中的工具 | 安全优先,最小权限原则 |
| 仅 exclude | 注册全部工具,排除 exclude 列表 | 方便优先,排除少数高风险操作 |
| 两者都设置 | include 优先,exclude 被忽略 | — |
| 两者都不设置 | 注册服务器暴露的所有工具 | 完全信任该 MCP 服务器 |
关闭资源和提示词
MCP 服务器除了工具,还可能暴露资源和提示词(Prompts)。如果不需要,可以关闭:
实例
# 在平台配置中引用 MCP 工具集
platform_toolsets:
cli:
- hermes-cli
- file
- terminal
- mcp-github # GitHub MCP 工具
- mcp-linear # Linear MCP 工具
telegram:
- hermes-gateway
- mcp-github # Telegram 上也启用 GitHub 工具
discord:
- hermes-gateway
# Discord 上不启用 GitHub 工具(安全策略)
MCP 环境变量隔离
这是 Hermes 的 MCP 安全机制中最容易被忽略但最重要的设计。
MCP stdio 子进程接收一个经过过滤的环境,默认只传递以下变量:
PATH, HOME, USER, LANG, LC_ALL, TERM, SHELL, TMPDIR 以及所有 XDG_* 变量
其他所有环境变量(API Key、Token、密码)都被屏蔽。
只有在 MCP 服务器配置的 env: 块中显式声明的变量才会传入子进程:
实例
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_..." # 只有这一个变量传入
# 即使你在 Shell 中 export 了 GITHUB_TOKEN,
# 没有在这里声明就不会传入 MCP 子进程
为什么这样设计?假设你在 .env 中存了 10 个 API Key(OpenAI、Anthropic、SerpAPI、Telegram Bot Token...)。如果 MCP 服务器能读取所有环境变量,一个恶意的 MCP 服务器工具就可以窃取所有凭据。环境变量隔离确保它只能看到显式声明的那个。
错误信息自动脱敏
MCP 工具的错误信息在返回给 LLM 前会自动脱敏——敏感信息(API Key、Token、密码)替换为 [REDACTED]。
这防止了 Agent 在分析错误时意外看到明文凭据。
手动添加 MCP 服务器
除了从 Nous 目录一键安装,你也可以手动添加任何 MCP 兼容服务器。
实例
hermes mcp add my-git-server \
--command "uvx" \
--args "mcp-server-git,--repository,/home/user/project"
# 手动添加 HTTP 服务器
hermes mcp add internal-db \
--url "https://mcp.internal.example.com/db" \
--header "Authorization: Bearer ${DB_TOKEN}"
# 测试连接是否正常
hermes mcp test my-git-server
# 配置工具过滤
hermes mcp configure my-git-server
hermes mcp configure 会打开交互式工具选择界面,让你重新勾选要启用的工具。
重新加载 MCP 配置
修改了 config.yaml 中的 MCP 配置后,无需重启整个 Agent:
实例
hermes mcp # 交互式目录选择器(TUI)
hermes mcp catalog # 纯文本目录列表
hermes mcp install <name> # 从目录一键安装
# ─── 手动管理 ───────────────────────────────────────────────
hermes mcp add <name> --command <cmd> --args <...> # 添加 stdio 服务器
hermes mcp add <name> --url <url> # 添加 HTTP 服务器
hermes mcp remove <name> # 移除服务器配置
hermes mcp list # 列出所有已配置服务器
hermes mcp test <name> # 测试服务器连接
hermes mcp configure <name> # 重新选择启用的工具
# ─── OAuth 认证 ─────────────────────────────────────────────
hermes mcp login <server> # 启动 OAuth 授权(最长等 5 分钟)
# ─── 运行时操作 ─────────────────────────────────────────────
/reload-mcp # 会话内重新加载 MCP 配置
hermes mcp reload # 命令行重新加载
常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| MCP 工具不出现 | 服务器未启用或连接失败 | 运行 hermes mcp list 检查状态,hermes mcp test 测试连接 |
| 工具过滤不生效 | 使用了 Hermes 注册后的工具名 | 改用 MCP 原始工具名(含连字符,如 list-issues 而非 list_issues) |
| stdio 服务器频繁崩溃 | 依赖缺失或权限不足 | 检查 command 是否在 PATH 中,手动运行测试 |
| OAuth 授权超时 | /reload-mcp 的 30 秒不够 | 先 hermes mcp login,完成后再 /reload-mcp |
| 环境变量不生效 | 未在 env: 块中显式声明 | 在 mcp_servers.<name>.env 中声明,不要依赖 Shell 环境变量 |
| HTTP 服务器连接拒绝 | URL 不可达或认证失败 | 检查 URL 和 Authorization header,确认网络连通 |