Hermes
Why this agent
Hermes Agent is the
self-improving AI agent built by Nous Research. It speaks MCP natively
— per
website/docs/user-guide/features/mcp.md
— and reads MCP servers from ~/.hermes/config.yaml under the
mcp_servers: (snake_case) top-level key. It supports both stdio
and HTTP MCP transports, plus per-server tool filtering, sampling, and
parallel-tool-call opt-in.
Prerequisites
- Hermes installed (one-line:
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash). espctlinstalled at a stable path on disk.- (Optional, for remote builds) the Aegis build server URL +
MCP_AUTH_SECRET.
Install snippet (or alternative)
Edit ~/.hermes/config.yaml and merge this entry under mcp_servers:
(create the file if it doesn’t exist — hermes setup will have
populated other keys; just add mcp_servers alongside them):
mcp_servers:
espctl:
command: /path/to/espctl
args:
- mcp
- serve
env:
CONTROL_BASE_URL: https://esphome.cloud
MCP_AUTH_SECRET: your-access-key
Replace:
/path/to/espctl— full path to yourespctlexecutable.CONTROL_BASE_URL— your Aegis build server URL.MCP_AUTH_SECRET— the access key your build server gave you.
Or grab the same snippet pre-filled:
Read the
install://hermesresource.
Inside Hermes (after editing the config), pick up the new server with:
/reload-mcp
No restart needed.
First-run verification
hermes
Then in the Hermes TUI:
What espctl tools do you have?
Expected: Hermes lists ~40 espctl tools, all prefixed
mcp_espctl_<tool_name> per Hermes’s namespacing convention.
Troubleshooting
config.yamlparse error at startup — confirm 2-space indent,command:is a string (not array),args:is a list (one item per line, dash-prefixed),env:is a map (key-value pairs).- Tools listed but every call returns “auth required” — the
MCP_AUTH_SECRETis missing or has been revoked. Get a fresh access key from the control plane and paste it into the config. - Want HTTP transport instead of stdio? Replace the
commandblock withurl: https://esphome.cloud/mcp/esp-idfand addheaders: { Authorization: "Bearer your-access-key" }. Hermes handles both transports in the samemcp_servers:map. - Want to filter exposed tools? Hermes supports
tools.include:/tools.exclude:per server. For example,tools: { include: [build, flash, monitor] }exposes only those three. - Parallel tool calls? espctl tools are mostly read-only enumerations
and remote-build kickoffs. If you trust the concurrency, add
supports_parallel_tool_calls: trueto the server entry.
Tested as-of 2026-05-19
Hermes-specific notes
- The schema supports
sampling:per server (Hermes can let the MCP server request LLM inference from Hermes itself); this MCP coverage doesn’t use sampling, so leave that block out. - Hermes also publishes itself AS an MCP server via
hermes mcp serve— so other agents (Claude Code, Cursor, …) can drive Hermes’s messaging surface. That’s the inverse direction; doesn’t affect the espctl-as-MCP-server configuration above. - Tool names are auto-prefixed
mcp_espctl_*to avoid colliding with Hermes’s built-in tools.