hermes-mcp-remote
Provides tools to control a Hermes Agent instance, including one-shot agent turns, sessions, logs, profiles, cron, kanban, skills, plugins, config, and background jobs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hermes-mcp-remoteAsk Hermes to summarize today's cron job results and flag any failures"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hermes-mcp-remote
Control a Hermes Agent instance from claude.ai, Claude mobile, or any other MCP client.
Hermes is primarily a CLI. This is a small bridge that spawns hermes ... and exposes it over MCP Streamable HTTP with bearer auth. It ships as a Docker image built on top of the official nousresearch/hermes-agent image, with the bridge added as an s6-supervised service next to the gateway and dashboard, so every call runs against the same /opt/data the agent uses.
claude.ai / Claude mobile
│ HTTPS
▼
your gateway or tunnel ← OAuth, TLS
│ HTTP (Docker network)
▼
hermes-mcp-remote (this) ← bearer token, refusal list, background jobs
│ spawn
▼
hermes CLI → /opt/data ← same container as the gateway + dashboardThe official hermes mcp serve only exposes messaging (list conversations, send). This exposes the operator surface: ask the agent, sessions, logs, profiles, cron, kanban, skills, plugins, config, and a verbatim hermes_run for everything else.
Tools
Tool | Runs |
|
|
|
|
|
|
| list / get / cancel background jobs |
|
|
Every tool accepts profile, timeout_sec, and background. With background: true the call returns a job_id right away; poll it with hermes_jobs. Use that for agent turns and anything else that can outlast a client's tool-call limit (claude.ai's is about two minutes).
Results are JSON: status, exit_code, stdout, stderr, command. ANSI escapes are stripped.
What it refuses
Anything that needs a TTY, never returns, or would mutate the immutable image: setup, the chat REPL, --tui/--cli, gateway run, starting the dashboard, mcp serve, sessions browse, config edit, logs -f, console, desktop, acp, serve, update, uninstall. Set HERMES_MCP_ALLOW=update,... to unblock specific ones. Set HERMES_MCP_READ_ONLY=1 to allow only read-style commands.
Related MCP server: hermes-mcp
Deploy
The image is published at ghcr.io/kevincolten/hermes-mcp-remote:latest and rebuilds weekly on top of the latest upstream image. Swap it in for nousresearch/hermes-agent and add one variable:
services:
hermes:
image: ghcr.io/kevincolten/hermes-mcp-remote:latest
command: gateway run
shm_size: 1gb
volumes:
- hermes_data:/opt/data
environment:
- HERMES_DASHBOARD=1
- HERMES_DASHBOARD_BASIC_AUTH_USERNAME=...
- HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=...
- HERMES_DASHBOARD_BASIC_AUTH_SECRET=...
- HERMES_MCP_TOKEN=... # openssl rand -base64 32See docker-compose.yml for the full Coolify example. The bridge listens on 0.0.0.0:8788 inside the container and is not published; reach it over the Docker network from whatever fronts it (http://hermes:8788/mcp). If HERMES_MCP_TOKEN is unset the service stays down and the rest of the container runs exactly like upstream.
Check it:
docker exec <container> curl -s localhost:8788/healthz
docker exec <container> s6-svstat /run/service/hermes-mcpExposing it to claude.ai
claude.ai connects from Anthropic's servers and only speaks OAuth to custom connectors, so this needs something in front of it: an MCP gateway that does OAuth and forwards with the bearer token, or a Cloudflare Tunnel plus an OAuth proxy. The bridge itself stays on the Docker network.
Run it outside Docker
Works anywhere the hermes CLI is installed:
git clone https://github.com/kevincolten/hermes-mcp-remote.git
cd hermes-mcp-remote
npm install
cp .env.example .env # set HERMES_MCP_TOKEN
npm startSet HERMES_BIN and HERMES_HOME if they differ from the defaults.
Configuration
Variable | Default | Purpose |
| required | Bearer token, 24+ chars |
|
| Listener |
|
| CLI location and working directory |
|
| Default per-call timeout ( |
|
| Ceiling clients can request |
| unset |
|
| unset | Comma-separated command names to unblock |
|
| Bytes kept per stream |
|
| How long finished jobs stay pollable |
Security notes
The token grants whatever the
hermesuser can do in the container, including-zprompts with approvals bypassed. Treat it like a shell.Keep the gateway's own approval hooks on and never run Hermes with
--yolo.The service runs as the unprivileged
hermesuser (UID 10000) vias6-setuidgid, same as the gateway and dashboard.
Test
npm testRuns the bridge against a fake hermes binary and checks auth, tool listing, one-shot, profile routing, refusals, failure reporting, timeouts, and background jobs.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
Streamable HTTP MCP server exposing planner flows, tasks, and squads.
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
Query, browse, and automate OmegaAI workspaces from any MCP client. Streamable HTTP with OAuth 2.0.
Related MCP Servers
- AlicenseCqualityDmaintenanceMCP sidecar for Hermes Agent exposing operator tools (cron, skills, config, workspace) with tiered read-only/operator/owner modes and dry-run by default for safe local development.431MIT
- FlicenseAqualityCmaintenanceMCP server for controlling a Hermes agent deployment via its HTTP API, enabling health checks, log retrieval, task management, and deployment configuration from MCP clients.17-
- FlicenseNot gradedqualityBmaintenanceEnables governed remote execution of Hermes Agent tasks over MCP with client authentication, RBAC, audit logging, and human-in-the-loop approvals.-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to observe a remote Hermes deployment's agents, sessions, crons, skills, and tools, and to run one-shot remote agent chats via a chat tool.1MIT