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
248 lines
5.7 KiB
Markdown
248 lines
5.7 KiB
Markdown
---
|
|
sidebar_position: 8
|
|
title: "MCP Config Reference"
|
|
description: "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:
|
|
- [MCP (Model Context Protocol)](/docs/user-guide/features/mcp)
|
|
- [Use MCP with Hermes](/docs/guides/use-mcp-with-hermes)
|
|
|
|
## Root config shape
|
|
|
|
```yaml
|
|
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.
|
|
|
|
```yaml
|
|
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.
|
|
|
|
```yaml
|
|
tools:
|
|
exclude: [delete_customer]
|
|
```
|
|
|
|
### Precedence
|
|
|
|
If both are set, `include` wins.
|
|
|
|
```yaml
|
|
tools:
|
|
include: [create_issue]
|
|
exclude: [create_issue, delete_issue]
|
|
```
|
|
|
|
Result:
|
|
- `create_issue` is still allowed
|
|
- `delete_issue` is ignored because `include` takes precedence
|
|
|
|
## Utility-tool policy
|
|
|
|
Hermes may register these utility wrappers per MCP server:
|
|
|
|
Resources:
|
|
- `list_resources`
|
|
- `read_resource`
|
|
|
|
Prompts:
|
|
- `list_prompts`
|
|
- `get_prompt`
|
|
|
|
### Disable resources
|
|
|
|
```yaml
|
|
tools:
|
|
resources: false
|
|
```
|
|
|
|
### Disable prompts
|
|
|
|
```yaml
|
|
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`
|
|
|
|
```yaml
|
|
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
|
|
|
|
```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 blacklist
|
|
|
|
```yaml
|
|
mcp_servers:
|
|
stripe:
|
|
url: "https://mcp.stripe.com"
|
|
headers:
|
|
Authorization: "Bearer ***"
|
|
tools:
|
|
exclude: [delete_customer, refund_payment]
|
|
```
|
|
|
|
### Resource-only docs server
|
|
|
|
```yaml
|
|
mcp_servers:
|
|
docs:
|
|
url: "https://mcp.docs.example.com"
|
|
tools:
|
|
include: []
|
|
resources: true
|
|
prompts: false
|
|
```
|
|
|
|
## Reloading config
|
|
|
|
After changing MCP config, reload servers with:
|
|
|
|
```text
|
|
/reload-mcp
|
|
```
|
|
|
|
## Tool naming
|
|
|
|
Server-native MCP tools become:
|
|
|
|
```text
|
|
mcp_<server>_<tool>
|
|
```
|
|
|
|
Examples:
|
|
- `mcp_github_create_issue`
|
|
- `mcp_filesystem_read_file`
|
|
- `mcp_my_api_query_data`
|
|
|
|
Utility tools follow the same prefixing pattern:
|
|
- `mcp_<server>_list_resources`
|
|
- `mcp_<server>_read_resource`
|
|
- `mcp_<server>_list_prompts`
|
|
- `mcp_<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:
|
|
|
|
```text
|
|
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:
|
|
|
|
```yaml
|
|
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>.json` and reused across sessions
|
|
- Token refresh is automatic; re-authorization only happens when refresh fails
|
|
- Only applies to HTTP/StreamableHTTP transport (`url`-based servers)
|