Hermes Agent
Add Runstack MCP in Hermes Agent (Nous Research) — ~/.hermes/config.yaml mcp_servers with HTTP or stdio, catalog, and deeplink.
Source: https://runstack.engineer/docs/mcp-hermes
hermesAgent
Hermes Agent by Nous Research is a self-improving AI agent with first-class MCP. Connect it to Runstack's MCP tools at https://app.runstack.engineer/mcp with Authorization: Bearer rnsk_…. Get a key at API Keys.
Import from other agents (fastest if migrating)
If you already use Claude Code, Cursor, or similar:
hermes import-agent claude-code # migrates mcpServers → mcp_servers (claude.json → config.yaml)
# also migrates skills / instructions
This auto-converts mcpServers → mcp_servers for Hermes' YAML config.
Config file
Hermes reads YAML at ~/.hermes/config.yaml under top-level mcp_servers (underscore, not mcpServers):
mcp_servers:
runstack:
url: "https://app.runstack.engineer/mcp"
headers:
Authorization: "Bearer rnsk_YOUR_API_KEY"
Secrets: put rnsk_… in ~/.hermes/.env; ${VAR} and ${env:VAR} are resolved at connect time (both syntaxes work; Cursor snippets copy-paste). Context vars supported: ${userHome}, ${workspaceFolder}, ${workspaceFolderBasename}, ${/}.
Reload after edit:
# in any Hermes session
/reload-mcp
Gateway also hot-watches config.yaml (add/remove/ enabled:false takes effect ~60s; failed first-connect retries with backoff).
Remote (Streamable HTTP) — recommended
mcp_servers:
runstack:
url: "https://app.runstack.engineer/mcp"
headers:
Authorization: "Bearer ${RUNSTACK_API_KEY}"
timeout: 120
connect_timeout: 60
enabled: true
Optional HTTP tuning: ssl_verify: true (or CA bundle path), client_cert: "~/secrets/mcp-client.pem" for mTLS, transport: sse to force SSE, keepalive_interval: 180, supports_parallel_tool_calls: false. Credentials in .env: RUNSTACK_API_KEY=rnsk_….
For OAuth servers (not Runstack Bearer), Hermes uses native OAuth 2.1 PKCE+DCR/CIMD:
mcp_servers:
linear:
url: "https://mcp.linear.app/mcp"
auth: oauth
# then in fresh terminal:
# hermes mcp login linear
Runstack uses Bearer headers, not OAuth — no auth: oauth needed.
Local (stdio) — via @rnsk/mcp
mcp_servers:
runstack:
command: "npx"
args: ["-y", "@rnsk/mcp"]
env:
RUNSTACK_API_KEY: "rnsk_YOUR_API_KEY"
timeout: 300
enabled: true
Hermes sanitizes env to explicit keys + safe baseline; untrusted servers may be marked trust: untrusted (writes require approval).
Catalog one-click (curated, not for Runstack)
Hermes ships a Nous-reviewed catalog (installed disabled by default):
hermes mcp # picker
hermes mcp catalog
hermes mcp install linear # prompts for credentials, probes tools
hermes mcp configure linear # update tool selection (checklist)
Runstack is not in the default catalog — use manual YAML above. Manifests live at optional-mcps/<name>/manifest.yaml (PR-gated).
Deeplink (Add to Hermes button)
Vendors can offer hermes://mcp/install?name=runstack&config=BASE64URL where config is base64url JSON:
const config = { url: "https://app.runstack.engineer/mcp", headers: { Authorization: "Bearer rnsk_..." } }
const link = `hermes://mcp/install?name=runstack&config=${btoa(JSON.stringify(config))
.replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,'')}`
Desktop shows confirmation dialog (pretty-printed config) — install requires user confirm; existing name never overwritten.
Tool naming & filtering
Registered as mcp__runstack__<tool> (double underscore, e.g. mcp__runstack__search_tools). Filter via:
mcp_servers:
runstack:
url: "https://app.runstack.engineer/mcp"
headers: { Authorization: "Bearer ${RUNSTACK_API_KEY}" }
tools:
include: [search_tools, execute_tool] # whitelist (glob aware: "*_dns_*")
exclude: [delete_*] # blacklist
resources: true
prompts: true
# include wins over exclude; empty include+no utils = no toolset created.
lazy: true # register from cache, spawn on first use
idle_timeout_seconds: 900 # recycle heavy stdio after idle
Expose Hermes as MCP server (reverse)
To let Claude/Cursor consume Hermes messaging:
hermes mcp serve # stdio bridge: mcpServers.hermes {command:"hermes", args:["mcp","serve"]}
Not needed for Runstack consumption.
Verify
After hermes chat or gateway restart:
List the Runstack tools you have and search for GitHub issue tools
Check logs: hermes logs --level debug shows endpoint attempted. Tool call timeout default 300s.