Use when configuring MCP servers in Hermes config.yaml.
Scanned 9/10/2026
Install to Claude Code
npx -y skills add LoopyLuci/Skills --skill hermes-mcp-server-integration --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Hermes Mcp Server Integration?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/loopyluci-hermes-mcp-server-integration)More formats (shields.io, HTML) on the badges page.
---
name: hermes-mcp-server-integration
description: "Use when configuring MCP servers in Hermes config.yaml."
tags: [hermes, mcp, configuration, tool-integration, streaming]
---
# Hermes MCP Server Integration
How to add, configure, and troubleshoot MCP servers for Hermes Agent. Covers both stdio and HTTP transports.
## Config Structure (config.yaml)
```yaml
mcp_servers:
server-name:
# For stdio servers (command-based):
command: "npx" # executable
args: ["-y", "mcp-server-pkg"] # arguments
env: # optional env vars
API_KEY: "sk-..."
timeout: 120 # per-tool-call timeout
connect_timeout: 60 # initial connection timeout
# OR for HTTP servers (url-based):
url: "http://127.0.0.1:PORT/mcp" # server URL
headers: # optional HTTP headers
Authorization: "Bearer sk-..."
timeout: 180
connect_timeout: 60
```
A server must have either `command` (stdio) or `url` (HTTP), not both.
## Transport Types
### Stdio Transport
Hermes spawns the server as a subprocess and communicates over stdin/stdout:
```yaml
mcp_servers:
time:
command: "uvx"
args: ["mcp-server-time"]
```
### HTTP / StreamableHTTP Transport
For remote or local HTTP-based MCP servers:
```yaml
mcp_servers:
my-server:
url: "http://127.0.0.1:9877/mcp"
timeout: 180
```
## Tool Naming Convention
MCP tools are prefixed with `mcp_{server_name}_{tool_name}`:
| Server Name | Tool | Result |
|-------------|------|--------|
| `hermes-telegram-bot` | `bot_status` | `mcp_hermes_telegram_bot_bot_status` |
| `filesystem` | `read_file` | `mcp_filesystem_read_file` |
| `time` | `get_time` | `mcp_time_get_time` |
Hyphens and dots become underscores.
## StreamableHTTP vs SSE Transport (FastMCP)
FastMCP supports two HTTP-based transports. StreamableHTTP is simpler (single POST endpoint):
```python
# StreamableHTTP (recommended) — single endpoint at /mcp
await mcp.run_streamable_http_async() # POST /mcp
# SSE — requires separate SSE + message endpoints
await mcp.run_sse_async() # GET /sse + POST /messages/
```
The Hermes MCP client works with StreamableHTTP. SSE may require additional URL configuration.
## Troubleshooting
### "Task group is not initialized"
The MCP session manager hasn't been started. Call `run_streamable_http_async()` instead of trying to mount the ASGI app manually.
### "405 Method Not Allowed"
Wrong URL path. StreamableHTTP typically serves at `/mcp`. SSE serves at `/sse`.
### "Bad Request: Missing session ID"
The MCP server is running and reachable — this is the expected first response from StreamableHTTP. The client's next request with the session ID will succeed.
### "Client must accept both application/json and text/event-stream"
The HTTP Accept header is missing `text/event-stream`. The Hermes MCP client sends this automatically; curl testing needs `-H "Accept: application/json, text/event-stream"`.
### "Failed initial connection"
Check:
1. Server process is running
2. Port is correct and not blocked
3. URL path matches the server's transport type (`/mcp` for StreamableHTTP, `/sse` for SSE)
4. Server binds to `0.0.0.0` or `127.0.0.1` matching the URL
## Testing an MCP Server
```bash
# With curl (StreamableHTTP)
curl -s http://127.0.0.1:9877/mcp -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
# Expected: {"jsonrpc":"2.0","id":"server-error","error":{"code":-32600,"message":"..."}}
# (The "Missing session ID" error is confirmation the server is alive)
```
## Adding via CLI
```bash
# For HTTP servers
hermes config set mcp_servers.server-name.url "http://host:port/path"
# For stdio servers
hermes config set mcp_servers.server-name.command "npx"
hermes config set mcp_servers.server-name.args "[\"-y\", \"package\"]"
```
Changes take effect on Hermes restart.
## Security
- Stdio servers receive a **filtered environment** (only PATH, HOME, USER, etc.)
- API keys must be explicitly passed via `env:`
- Credential patterns in error messages are auto-redacted
- Sampling (server-initiated LLM requests) is enabled by default; disable with `sampling: { enabled: false }`
## Connection Lifecycle
- Persistent per-server asyncio Task in a background thread
- Auto-reconnect with exponential backoff (up to 5 retries, max 60s)
- Failed servers are "parked" — reconnect only on explicit request
- Server stats available via `get_mcp_status()` or Hermes dashboard
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!