Reference docs fixes: - cli-commands.md: remove non-existent --provider alibaba, add hermes profile/completion/plugins/mcp to top-level table, add --profile/-p global flag, add --source chat option - slash-commands.md: add /yolo and /commands, fix /q alias conflict (resolves to /queue not /quit), add missing aliases (/bg, /set-home, /reload_mcp, /gateway) - toolsets-reference.md: fix hermes-api-server (not same as hermes-cli, omits clarify/send_message/text_to_speech) - profile-commands.md: fix show name required not optional, --clone-from not --from, add --remove/--name to alias, fix alias path, fix export/ import arg types, remove non-existent fish completion - tools-reference.md: add EXA_API_KEY to web tools requires_env - mcp-config-reference.md: add auth key for OAuth, tool name sanitization - environment-variables.md: add EXA_API_KEY, update provider values - plugins.md: remove non-existent ctx.register_command(), add ctx.inject_message() Feature docs additions: - security.md: add /yolo mode, approval modes (manual/smart/off), configurable timeout, expanded dangerous patterns table - cron.md: add wrap_response config, [SILENT] suppression - mcp.md: add dynamic tool discovery, MCP sampling support - cli.md: add Ctrl+Z suspend, busy_input_mode, tool_preview_length - docker.md: add skills/credential file mounting Messaging platform docs: - telegram.md: add webhook mode, DoH fallback IPs - slack.md: add multi-workspace OAuth support - discord.md: add DISCORD_IGNORE_NO_MENTION - matrix.md: add MSC3245 native voice messages - feishu.md: expand from 129 to 365 lines (encrypt key, verification token, group policy, card actions, media, rate limiting, markdown, troubleshooting) - wecom.md: expand from 86 to 264 lines (per-group allowlists, media, AES decryption, stream replies, reconnection, troubleshooting) Configuration docs: - quickstart.md: add DeepSeek, Copilot, Copilot ACP providers - configuration.md: add DeepSeek provider, Exa web backend, terminal env_passthrough/images, browser.command_timeout, compression params, discord config, security/tirith config, timezone, auxiliary models 21 files changed, ~1000 lines added
5.7 KiB
sidebar_position, title, description
| sidebar_position | title | description |
|---|---|---|
| 8 | MCP Config Reference | Reference for Hermes Agent MCP configuration keys, filtering semantics, and utility-tool policy |
MCP Config Reference
This page is the compact reference companion to the main MCP docs.
For conceptual guidance, see:
Root config shape
mcp_servers:
<server_name>:
command: "..." # stdio servers
args: []
env: {}
# OR
url: "..." # HTTP servers
headers: {}
enabled: true
timeout: 120
connect_timeout: 60
tools:
include: []
exclude: []
resources: true
prompts: true
Server keys
| Key | Type | Applies to | Meaning |
|---|---|---|---|
command |
string | stdio | Executable to launch |
args |
list | stdio | Arguments for the subprocess |
env |
mapping | stdio | Environment passed to the subprocess |
url |
string | HTTP | Remote MCP endpoint |
headers |
mapping | HTTP | Headers for remote server requests |
enabled |
bool | both | Skip the server entirely when false |
timeout |
number | both | Tool call timeout |
connect_timeout |
number | both | Initial connection timeout |
tools |
mapping | both | Filtering and utility-tool policy |
auth |
string | HTTP | Authentication method. Set to oauth to enable OAuth 2.1 with PKCE |
sampling |
mapping | both | Server-initiated LLM request policy (see MCP guide) |
tools policy keys
| Key | Type | Meaning |
|---|---|---|
include |
string or list | Whitelist server-native MCP tools |
exclude |
string or list | Blacklist server-native MCP tools |
resources |
bool-like | Enable/disable list_resources + read_resource |
prompts |
bool-like | Enable/disable list_prompts + get_prompt |
Filtering semantics
include
If include is set, only those server-native MCP tools are registered.
tools:
include: [create_issue, list_issues]
exclude
If exclude is set and include is not, every server-native MCP tool except those names is registered.
tools:
exclude: [delete_customer]
Precedence
If both are set, include wins.
tools:
include: [create_issue]
exclude: [create_issue, delete_issue]
Result:
create_issueis still alloweddelete_issueis ignored becauseincludetakes precedence
Utility-tool policy
Hermes may register these utility wrappers per MCP server:
Resources:
list_resourcesread_resource
Prompts:
list_promptsget_prompt
Disable resources
tools:
resources: false
Disable prompts
tools:
prompts: false
Capability-aware registration
Even when resources: true or prompts: true, Hermes only registers those utility tools if the MCP session actually exposes the corresponding capability.
So this is normal:
- you enable prompts
- but no prompt utilities appear
- because the server does not support prompts
enabled: false
mcp_servers:
legacy:
url: "https://mcp.legacy.internal"
enabled: false
Behavior:
- no connection attempt
- no discovery
- no tool registration
- config remains in place for later reuse
Empty result behavior
If filtering removes all server-native tools and no utility tools are registered, Hermes does not create an empty MCP runtime toolset for that server.
Example configs
Safe GitHub allowlist
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 blacklist
mcp_servers:
stripe:
url: "https://mcp.stripe.com"
headers:
Authorization: "Bearer ***"
tools:
exclude: [delete_customer, refund_payment]
Resource-only docs server
mcp_servers:
docs:
url: "https://mcp.docs.example.com"
tools:
include: []
resources: true
prompts: false
Reloading config
After changing MCP config, reload servers with:
/reload-mcp
Tool naming
Server-native MCP tools become:
mcp_<server>_<tool>
Examples:
mcp_github_create_issuemcp_filesystem_read_filemcp_my_api_query_data
Utility tools follow the same prefixing pattern:
mcp_<server>_list_resourcesmcp_<server>_read_resourcemcp_<server>_list_promptsmcp_<server>_get_prompt
Name sanitization
Hyphens (-) and dots (.) in both server names and tool names are replaced with underscores before registration. This ensures tool names are valid identifiers for LLM function-calling APIs.
For example, a server named my-api exposing a tool called list-items.v2 becomes:
mcp_my_api_list_items_v2
Keep this in mind when writing include / exclude filters — use the original MCP tool name (with hyphens/dots), not the sanitized version.
OAuth 2.1 authentication
For HTTP servers that require OAuth, set auth: oauth on the server entry:
mcp_servers:
protected_api:
url: "https://mcp.example.com/mcp"
auth: oauth
Behavior:
- Hermes uses the MCP SDK's OAuth 2.1 PKCE flow (metadata discovery, dynamic client registration, token exchange, and refresh)
- On first connect, a browser window opens for authorization
- Tokens are persisted to
~/.hermes/mcp-tokens/<server>.jsonand reused across sessions - Token refresh is automatic; re-authorization only happens when refresh fails
- Only applies to HTTP/StreamableHTTP transport (
url-based servers)