ByteNoteByteNote

字节笔记本

2026年6月22日

hermes教程-MCP 配置参考

API中转
¥120

根配置结构

yaml
mcp_servers:
  <server_name>:
    command: "..."      # stdio 服务器
    args: []
    env: {}
## 或者
    url: "..."          # HTTP 服务器
    headers: {}
## 可选的 HTTP/SSE TLS 设置:
    ssl_verify: true                # 布尔值或 CA 包路径 (PEM)
    client_cert: "/path/to/cert.pem"  # mTLS 客户端证书(见下文)
## client_key: "/path/to/key.pem"  # 可选,当密钥位于单独文件中时使用

    enabled: true
    timeout: 120
    connect_timeout: 60
    supports_parallel_tool_calls: false
    tools:
      include: []
      exclude: []
      resources: true
      prompts: true

服务器键

类型适用对象含义
commandstringstdio要启动的可执行文件
argsliststdio子进程的参数
envmappingstdio传递给子进程的环境变量
urlstringHTTP远程 MCP 端点
headersmappingHTTP远程服务器请求的头部
ssl_verifybool 或 stringHTTPTLS 验证。true(默认)使用系统 CA,false 禁用验证(不安全),或自定义 CA 包(PEM)的字符串路径
client_certstring 或 listHTTPmTLS 客户端证书。字符串 = 包含证书+密钥的 PEM 文件路径。列表 [cert, key] = 单独文件。列表 [cert, key, password] = 加密密钥
client_keystringHTTP客户端私钥的路径,当 client_cert 是字符串且密钥位于单独文件中时使用
enabledbool两者当为 false 时完全跳过该服务器
timeoutnumber两者工具调用超时
connect_timeoutnumber两者初始连接超时
supports_parallel_tool_callsbool两者允许此服务器的工具并发运行
toolsmapping两者过滤和实用工具策略
authstringHTTP认证方法。设置为 oauth 以启用 OAuth 2.1 with PKCE
samplingmapping两者服务器发起的 LLM 请求策略(参见 MCP 指南)

tools 策略键

类型含义
includestring 或 list白名单服务器原生 MCP 工具
excludestring 或 list黑名单服务器原生 MCP 工具
resourcesbool-like启用/禁用 list_resources + read_resource
promptsbool-like启用/禁用 list_prompts + get_prompt

过滤语义

include

如果设置了 include,则仅注册这些服务器原生 MCP 工具。

yaml
tools:
  include: [create_issue, list_issues]

exclude

如果设置了 exclude 而未设置 include,则注册除这些名称之外的所有服务器原生 MCP 工具。

yaml
tools:
  exclude: [delete_customer]

优先级

如果两者都设置,include 优先。

yaml
tools:
  include: [create_issue]
  exclude: [create_issue, delete_issue]

结果:

  • create_issue 仍然允许
  • delete_issue 被忽略,因为 include 优先

实用工具策略

Hermes 可能为每个 MCP 服务器注册以下实用包装器:

资源:

  • list_resources
  • read_resource

提示:

  • list_prompts
  • get_prompt

禁用资源

yaml
tools:
  resources: false

禁用提示

yaml
tools:
  prompts: false

能力感知注册

即使 resources: trueprompts: true,Hermes 也仅在该 MCP 会话实际暴露相应能力时才注册这些实用工具。

因此以下情况是正常的:

  • 你启用了提示
  • 但没有出现提示实用工具
  • 因为服务器不支持提示

enabled: false

yaml
mcp_servers:
  legacy:
    url: "https://mcp.legacy.internal"
    enabled: false

行为:

  • 不尝试连接
  • 不进行发现
  • 不注册工具
  • 配置保留以供后续重用

空结果行为

如果过滤移除了所有服务器原生工具且没有注册任何实用工具,Hermes 不会为该服务器创建空的 MCP 运行时工具集。

配置示例

安全的 GitHub 白名单

yaml
mcp_servers:
  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "***"
    tools:
      include: [list_issues, create_issue, update_issue, search_code]
      resources: false
      prompts: false

Stripe 黑名单

yaml
mcp_servers:
  stripe:
    url: "https://mcp.stripe.com"
    headers:
      Authorization: "Bearer ***"
    tools:
      exclude: [delete_customer, refund_payment]

仅资源文档服务器

yaml
mcp_servers:
  docs:
    url: "https://mcp.docs.example.com"
    tools:
      include: []
      resources: true
      prompts: false

TLS 客户端证书 (mTLS)

对于需要客户端证书的 HTTP/SSE 服务器,设置 client_cert(以及可选的 client_key):

yaml
mcp_servers:
## 单个 PEM 文件中包含证书+密钥
  internal_api:
    url: "https://mcp.internal.example.com/mcp"
    client_cert: "~/secrets/mcp-client.pem"
## 单独的证书和密钥文件
  partner_api:
    url: "https://mcp.partner.example.com/mcp"
    client_cert: "~/secrets/client.crt"
    client_key: "~/secrets/client.key"
## 带密码的加密密钥(3 元素列表形式)
  bank_api:
    url: "https://mcp.bank.example.com/mcp"
    client_cert: ["~/secrets/client.crt", "~/secrets/client.key", "my-passphrase"]
## 自定义 CA 包(私有 CA / 自签名服务器)
  lab_api:
    url: "https://mcp.lab.local/mcp"
    ssl_verify: "~/secrets/lab-ca.pem"
    client_cert: "~/secrets/lab-client.pem"

注意:

  • 路径支持 ~ 扩展。缺失文件会在连接时快速失败,并显示服务器范围的错误消息。
  • ssl_verify: false 完全禁用服务器证书验证。不要在实际服务中使用。
  • 同时适用于 Streamable HTTP 和 SSE 传输。

重新加载配置

更改 MCP 配置后,使用以下命令重新加载服务器:

/reload-mcp

工具命名

服务器原生 MCP 工具变为:

mcp_<server>_<tool>

示例:

  • mcp_github_create_issue
  • mcp_filesystem_read_file
  • mcp_my_api_query_data

实用工具遵循相同的前缀模式:

  • mcp_<server>_list_resources
  • mcp_<server>_read_resource
  • mcp_<server>_list_prompts
  • mcp_<server>_get_prompt

名称清理

服务器名称和工具名称中的连字符(-)和点(.)在注册前会被替换为下划线。这确保了工具名称是 LLM 函数调用 API 的有效标识符。

例如,名为 my-api 的服务器暴露了一个名为 list-items.v2 的工具,将变为:

mcp_my_api_list_items_v2

在编写 include / exclude 过滤器时请记住这一点——使用原始 MCP 工具名称(带连字符/点),而不是清理后的版本。

OAuth 2.1 认证

对于需要 OAuth 的 HTTP 服务器,在服务器条目上设置 auth: oauth

yaml
mcp_servers:
  protected_api:
    url: "https://mcp.example.com/mcp"
    auth: oauth

行为:

  • Hermes 使用 MCP SDK 的 OAuth 2.1 PKCE 流程(元数据发现、动态客户端注册、令牌交换和刷新)
  • 首次连接时,会打开浏览器窗口进行授权
  • 令牌持久化到 ~/.hermes/mcp-tokens/<server>.json 并在会话间重用
  • 令牌自动刷新;仅在刷新失败时重新授权
  • 仅适用于 HTTP/StreamableHTTP 传输(基于 url 的服务器)

分享: