Hermes Agent v0.13.0 带来了 MCP SSE传输、OAuth 2.1 PKCE认证、断线自动重连三大远程工具接入能力。从此你的Agent不再局限于本地stdio进程——远程数据库、云端API、第三方SaaS全都能接进来。本文提供完整配置模板,复制即用。
为什么需要SSE传输?
Hermes Agent 对 MCP(Model Context Protocol)的支持从 v0.1.0 就开始了,但早期版本只支持 STDIO 传输——即 MCP Server 必须作为本地子进程运行:
# 旧方式:只能接本地进程
mcp_servers:
filesystem:
command: "npx"
args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
这在单人开发机上没问题,但一到生产环境就暴露三大痛点:
- 无法接入远程服务:团队共享的数据库 MCP Server 部署在远端,STDIO 根本摸不到
- 资源占用:每个 MCP Server 都以子进程运行,10个 Server 就是10个常驻进程
- 认证困难:STDIO 模式下无标准化认证流程,API Key 只能硬编码在配置里
SSE(Server-Sent Events)传输 正是为解决这些问题而生。它基于 HTTP,允许 Hermes Agent 通过标准 HTTPS 端点连接远程 MCP Server——就像浏览器调用 REST API 一样简单。
基础配置:HTTP SSE 端点
最小可用配置
在 Hermes Agent 的 ~/.hermes/config.yaml 中添加:
mcp_servers:
# 方式一:直接指定 URL(最简单)
my-remote-db:
url: "https://mcp.example.com/mcp"
transport: "sse"
# 方式二:HTTP transport with headers
weather-api:
transport: "http"
server:
base_url: "https://weather-mcp.example.com"
base_path: "/mcp"
sse_path: "/sse"
headers:
Authorization: "Bearer sk-your-api-key-here"
http_options:
recv_timeout: 30000
verify: true
配置说明:
| 字段 | 说明 | 默认值 |
|---|---|---|
url |
MCP 端点完整 URL(最简方式) | — |
transport |
传输协议,"sse" 或 "http" |
"sse" |
server.base_url |
MCP Server 主机地址 | — |
server.sse_path |
SSE 连接路径 | "/sse" |
headers |
自定义 HTTP 头(Bearer Token 等) | — |
http_options.recv_timeout |
接收超时(毫秒) | 30000 |
http_options.verify |
SSL 证书验证 | true |
真实案例:接入云端 PostgreSQL MCP Server
假设你有一台云服务器 db-mcp.yourcompany.com 上运行着 PostgreSQL MCP Server:
mcp_servers:
production-db:
url: "https://db-mcp.yourcompany.com/mcp"
transport: "sse"
headers:
X-API-Key: "${DB_MCP_API_KEY}"
http_options:
recv_timeout: 60000 # 数据库查询给60秒
tools:
exclude:
- "drop_table" # 安全第一:禁止删表
- "truncate"
配置完成后,重启 Hermes Agent(或执行 hermes /update),你的 Agent 就能在对话中直接查询生产数据库了。
OAuth 2.1 PKCE 认证(v0.13.0 核心升级)
v0.13.0 的最大突破是引入了 OAuth 2.1 PKCE 认证流程——这是 MCP 生态标准化的关键一环。
为什么需要 OAuth?
用 headers.Authorization 传 API Key 虽然简单,但有两个致命问题:
- 凭据泄漏风险:API Key 明文写在配置文件里,谁有文件读取权限谁就能调用
- 不可委托:无法实现"用户授权 Agent 代表自己访问第三方服务"的典型 OAuth 场景
OAuth 2.1 PKCE 流程解决了这两个问题:凭据以短期 access token + refresh token 的形式动态获取,且客户端无需持有 client_secret。
配置示例
mcp_servers:
github-mcp:
url: "https://github-mcp.example.com/mcp"
transport: "sse"
oauth:
# OAuth 2.1 PKCE 流程
client_id: "hermes-agent-client"
authorization_url: "https://github-mcp.example.com/oauth/authorize"
token_url: "https://github-mcp.example.com/oauth/token"
scopes:
- "read:repo"
- "read:user"
# PKCE 自动处理 code_challenge / code_verifier
# token 自动刷新,无需手动管理
首次连接时,Hermes Agent 会:
- 生成 PKCE
code_verifier和code_challenge(S256) - 打开浏览器引导你完成 OAuth 授权
- 用授权码换取 access token + refresh token
- 将 token 安全存储在
~/.hermes/auth.json(权限 0600) - access token 过期时自动用 refresh token 续期
整个过程你只需点一次"授权"按钮,后续全自动。
安全增强:TOCTOU 修复
v0.13.0 修复了 MCP OAuth 凭据存储中的一个 TOCTOU(Time-of-check Time-of-use)漏洞——之前保存凭据文件的写入操作和权限设置间存在竞态条件。现在凭据的写入和 0600 权限设置是原子操作。
Stale-Pipe 自动重连:告别静默断开
SSE 连接有个经典问题:TCP 长连接可能在网络波动后"伪断开"——连接还活着,但数据流已经死了。Hermes Agent v0.13.0 引入了 stale-pipe 检测 + 自动重试 机制:
mcp_servers:
critical-service:
url: "https://critical-mcp.example.com/mcp"
transport: "sse"
# Stale-pipe 配置(可选,以下为默认值)
http_options:
recv_timeout: 30000
retry:
max_retries: 3
backoff: "exponential" # 指数退避
工作原理:
- 每次 MCP 工具调用前,Agent 检查 SSE 连接是否处于 stale 状态
- 如果检测到静默断开,自动关闭旧连接并建立新 SSE session
- 支持指数退避重试(1s → 2s → 4s),最多 3 次
- 重试失败后,Agent 会在对话中明确告知用户"工具 X 暂时不可用",而非静默吞掉错误
这对生产环境的 7×24 运行场景至关重要——半夜掉线了不会导致整个工作流崩掉。
工具过滤与安全策略
SSE + OAuth 打开了远程工具接入的大门,但安全边界必须有。Hermes Agent 提供了细粒度的工具过滤机制:
白名单模式(最严格)
mcp_servers:
safe-db:
url: "https://db-mcp.example.com/mcp"
tools:
include: # 只注册这些工具
- "query"
- "list_tables"
- "describe_table"
# 未列出的工具(如 drop_table、truncate)不会被 Agent 看到
黑名单模式
mcp_servers:
filesystem:
url: "https://fs-mcp.example.com/mcp"
tools:
exclude: # 排除这些工具
- "delete_file"
- "rmdir"
- "chmod"
条件启用
mcp_servers:
expensive-llm-mcp:
url: "https://llm-mcp.example.com/mcp"
enabled: false # 完全禁用此 MCP Server
# 需要时手动改 true 或用 hermes config set 启用
安全最佳实践
- 最小权限原则:用
include白名单,而非exclude黑名单 - 数据库类 MCP:禁止 DDL(CREATE/DROP/ALTER),只允许 DQL(SELECT)
- 支付类 MCP:要求二次确认(通过 Hermes 的
approval机制) - API Key 放
.env:不要在config.yaml里明文写 Key,用${ENV_VAR}引用
mcp_servers:
payment-mcp:
url: "https://payment-mcp.example.com/mcp"
headers:
Authorization: "Bearer ${PAYMENT_MCP_TOKEN}" # 从 .env 读取
tools:
include:
- "check_balance"
- "get_transaction_history"
# 转账操作需要人工审批,不由 Agent 直接执行
Image Results as MEDIA Tags
v0.13.0 还有一个实用细节:MCP Server 返回的图片结果现在会被自动渲染为 MEDIA 标签。这意味着如果 MCP Server 生成图表(如 Grafana MCP、Matplotlib MCP),Hermes Agent 能直接在对话中展示图片,无需额外处理。
# 你的 MCP Server 返回图片结果
# Hermes Agent 自动以 MEDIA 标签渲染
# 用户在 Telegram/微信/Discord 上直接看到图表
完整配置模板(复制即用)
以下是一个生产级 MCP 配置模板,涵盖了远程数据库、天气服务、GitHub 操作三个典型场景:
# ~/.hermes/config.yaml
mcp_servers:
# 1. 远程 PostgreSQL(SSE + API Key)
production-pg:
url: "https://pg-mcp.yourdomain.com/mcp"
transport: "sse"
headers:
X-API-Key: "${PG_MCP_API_KEY}"
http_options:
recv_timeout: 60000
tools:
include:
- "query"
- "list_tables"
- "describe_table"
- "get_schema"
# 2. GitHub API(SSE + OAuth PKCE)
github:
url: "https://github-mcp.modelcontextprotocol.io/mcp"
transport: "sse"
oauth:
client_id: "hermes-agent"
authorization_url: "https://github.com/login/oauth/authorize"
token_url: "https://github.com/login/oauth/access_token"
scopes:
- "repo"
- "read:org"
# 3. 天气服务(SSE + Bearer Token)
weather:
url: "https://weather-mcp.example.com/mcp"
transport: "sse"
headers:
Authorization: "Bearer ${WEATHER_API_KEY}"
http_options:
recv_timeout: 15000
tools:
include:
- "get_current_weather"
- "get_forecast"
对应的 .env 文件:
# ~/.hermes/.env
PG_MCP_API_KEY=sk-pg-mcp-xxxx
WEATHER_API_KEY=sk-weather-xxxx
常见问题排查
Q1: 连接报错 "SSE connection refused"
原因:MCP Server 的 SSE 端点不可达或路径错误。
排查:
# 先确认端点可访问
curl -N -H "Accept: text/event-stream" https://your-mcp-server.com/sse
# 正确的 SSE 响应应该包含:
# event: endpoint
# data: /messages?sessionId=xxx
Q2: OAuth 授权后工具仍不可用
原因:OAuth scope 不足或 token 未正确存储。
排查:
# 检查 auth.json 是否有对应凭据
cat ~/.hermes/auth.json | jq '.mcp_servers'
# 手动清除并重新授权
rm ~/.hermes/auth.json
# 下次连接会自动触发 OAuth 流程
Q3: 工具调用偶尔超时
原因:网络波动 + 默认超时太短。
修复:
http_options:
recv_timeout: 90000 # 从默认 30s 提升到 90s
Q4: 如何确认 MCP Server 的 capabilities?
方法:启动 Hermes Agent 后,在对话中输入 /tools——如果 MCP 配置正确,你会看到远程 MCP Server 提供的工具列表。
Q5: 生产环境的最佳部署方式
建议架构:
Hermes Agent(本地/服务器)
↓ SSE (HTTPS)
Nginx/Caddy 反向代理(TLS 终止)
↓ HTTP
MCP Server(Docker 容器,内网)
Nginx 配置示例:
location /mcp/ {
proxy_pass http://mcp-server:8080;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_buffering off; # SSE 必须关闭缓冲
proxy_read_timeout 3600s; # 长连接超时
}
总结:MCP SSE 的三层价值
对于 AI 创业者,MCP SSE + OAuth 不只是技术升级,而是商业模式的关键基础设施:
- 工具生态即护城河:你能接入的 MCP Server 越多,你的 Agent 能做的事情就越多,用户粘性越强
- 零运维成本扩张:接一个新的 MCP Server 只需要 5 行 YAML 配置,不需要写任何胶水代码
- 安全即信任:OAuth 2.1 PKCE + TOCTOU 修复 + 工具白名单,让你的 Agent 在客户环境中运行时拥有企业级安全
立刻行动:找一个你已经在用的 SaaS 服务,搜 {服务名} MCP server,大概率已经有社区实现。花 10 分钟配置完上面的模板,你的 Hermes Agent 能力边界就扩了一大圈。
