hermes-agent-bridge
Provides tools for interacting with a self-hosted Hermes instance, enabling listing allowed kanban boards, viewing board cards/tasks, creating unassigned triage cards, and optionally querying the Ask gateway.
Click on "Install 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-agent-bridgeshow me the tasks on my kanban board"
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-agent-bridge
Streamable HTTP MCP so a remote MCP client can call a self-hosted Hermes as itself, over tools, not as a chat bot.
Hermes stays on the private network. This bridge runs beside Hermes, talks to its dashboard internally, and is reached from the internet only through an existing Cloudflare Tunnel and Access application. It does not publish the Hermes API.
Install
Choose one of the three paths below. Do not run all three.
Choose Docker when Hermes and cloudflared already run on the same Docker network.
Choose Native Linux when the bridge should run directly on a Debian or Ubuntu machine or VM.
Choose Proxmox when the installer should create and manage a dedicated Debian LXC for the bridge.
Proxmox eventually uses the native service inside its LXC, but you only run the Proxmox command. You do not run the native command yourself afterward.
Before you start
Have these values ready:
The public MCP hostname, such as
mcp.example.comThe private Hermes dashboard URL reachable from the installation target
The Hermes kanban board slugs this bridge may access
The Cloudflare Access team domain and application AUD
Optional dashboard and Ask-gateway credentials
Cloudflare Tunnel and Access must already exist. The installer does not create or change them, your firewall, or router/NAT rules.
Option A: Docker
Use this when Hermes and cloudflared already share a Docker network. The
network must exist before installation. Its name is often hermes.
Run on the Docker host:
curl -fsSL \
https://raw.githubusercontent.com/nberardi/hermes-agent-bridge/refs/heads/main/install.sh \
| sudo bash -s -- dockerThe installer:
Prompts for the bridge configuration and existing Hermes Docker network.
Offers to install Docker Engine and Compose from Docker's official apt repository when they are missing on Debian or Ubuntu.
Pulls the pinned, non-root GHCR image for the selected version.
Starts it on the external Hermes network without publishing a host port.
Runs the shared preflight and waits for the container health check.
On success, use the origin printed by the installer for the Cloudflare Tunnel. It will look like:
http://hermes-agent-bridge:8080This origin works only when cloudflared is attached to the same Docker network.
Option B: Native Linux
Use this for a systemd-based Debian or Ubuntu host or VM on amd64 or arm64. The host must be able to reach Hermes on the private network.
Run on that Linux host:
curl -fsSL \
https://raw.githubusercontent.com/nberardi/hermes-agent-bridge/refs/heads/main/install.sh \
| sudo bash -s -- nativeThe installer:
Prompts for the bridge configuration.
Installs a private pinned Python 3.12 runtime and hash-locked dependencies under
/opt/hermes-agent-bridgewithout modifying system Python.Creates the non-login
hermes-agent-bridgeservice user.Installs and starts a hardened systemd service.
Runs the shared preflight and verifies the loopback health endpoint.
On success, the installer prints the local or LAN origin for the Cloudflare Tunnel, for example:
http://192.0.2.20:8080The service still runs with python3 -m hermes_agent_bridge, using the private
Python installed for that release.
Option C: Proxmox
Use this on a Proxmox VE 8 or 9 host when you want a dedicated LXC. The installer creates the LXC and installs the bridge for you.
Run this directly on the Proxmox VE host:
curl -fsSL \
https://raw.githubusercontent.com/nberardi/hermes-agent-bridge/refs/heads/main/install.sh \
| sudo bash -s -- proxmoxThe installer:
Suggests the next free CT ID. Press Enter to accept it or enter another unused ID.
Uses DHCP by default. If you choose static networking, it asks for the LXC IP/CIDR and gateway.
Downloads the Proxmox Community Scripts Debian installer and passes it the selected CT ID and network settings in generated mode.
Transfers configuration through a protected temporary file.
Runs the native installer inside the LXC with
pct execand then removes host-side temporary secrets.
The LXC does not install Docker. On success, the installer prints the CT ID, LXC address, and Tunnel origin, for example:
LXC address: 192.0.2.30
Cloudflare Tunnel origin: http://192.0.2.30:8080Rerunning the Proxmox command upgrades the recorded LXC. It does not create a new one.
Related MCP server: toolhive-mcp
Finish the Cloudflare setup
After any one installation path succeeds:
Route the public hostname on the existing tunnel to the exact origin printed by the installer.
Create or select the Cloudflare Access application for that hostname. Its AUD must match
CF_ACCESS_AUDin the bridge configuration.Use two separate Access policies:
Service Auth for the MCP client's service token
Allow for operator login
Do not mix Service Auth and Allow in one policy.
The bridge validates Cf-Access-Jwt-Assertion at the origin against the team
JWKS and this application's AUD. A Docker or LAN neighbor without a valid JWT
still receives 401.
Add the remote MCP connector using:
URL:
https://mcp.example.com/mcpHeader:
CF-Access-Client-IdHeader:
CF-Access-Client-Secret
Replace the example hostname with your Access hostname. The client must not use localhost, RFC1918, or stdio to reach Hermes.
Configuration and upgrades
Every method uses the same guided wizard. Secret prompts are hidden. The final
configuration lives at /etc/hermes-agent-bridge.env, owned by root with mode
0600.
Required settings:
SITEPUBLIC_HOSTNAMESHERMES_KANBAN_BOARDSCF_ACCESS_TEAM_DOMAINCF_ACCESS_AUDHERMES_DASHBOARD_URL
Optional settings:
ALLOWED_ORIGINSHERMES_DASHBOARD_TOKENHERMES_API_URLandHERMES_API_KEYfor AskBIND_HOSTandBIND_PORT
PUBLIC_HOSTNAMES contains DNS hostnames without schemes or paths.
ALLOWED_ORIGINS defaults to the HTTPS origin of each public hostname. Board
slugs contain lowercase letters, digits, hyphens, or underscores, begin with a
letter or digit, and are at most 64 characters.
Use another absolute configuration path with --env-file PATH. For automation,
provide a complete env file and add --non-interactive.
To upgrade, rerun the same installation command. The installer uses its current release by default:
curl -fsSL \
https://raw.githubusercontent.com/nberardi/hermes-agent-bridge/refs/heads/main/install.sh \
| sudo bash -s -- docker
# Or rerun the native or Proxmox command originally chosen.Existing settings become the wizard defaults. Releases are installed under
/opt/hermes-agent-bridge, and a failed health verification rolls the service
and configuration back. There is no automatic update timer.
Check an installation
The shared preflight validates configuration, fetches the Cloudflare Access JWKS, and checks the Hermes dashboard. A dashboard failure is fatal. An unavailable optional Ask gateway is a warning and does not disable the kanban tools.
Native Linux:
/opt/hermes-agent-bridge/current/venv/bin/python \
-m hermes_agent_bridge check --env-file /etc/hermes-agent-bridge.envDocker:
docker exec hermes-agent-bridge python -m hermes_agent_bridge checkProxmox:
pct exec <CTID> -- /opt/hermes-agent-bridge/current/venv/bin/python \
-m hermes_agent_bridge check --env-file /etc/hermes-agent-bridge.envExit codes are 0 for success, including an Ask warning; 2 for configuration;
3 for JWKS; and 4 for a dashboard failure.
Use the bridge
After adding the MCP URL and Cloudflare Access headers to your MCP client, the client can call these tools:
Tool | What it does |
| Checks whether the Hermes dashboard and optional Ask gateway are reachable. |
| Lists the kanban boards this bridge is configured to access. |
| Lists cards on an allowed board. |
| Reads one card from an allowed board. |
| Creates an unassigned triage card without approving or starting it. |
| Sends a question to the optional internal Ask gateway. |
The bridge deliberately cannot approve, assign, start, plan, decompose, or
dispatch work. It does not expose the Hermes vault. Its only write operation is
creating an unassigned kanban card. The ask tool reports that it is disabled
when HERMES_API_URL is not configured or its gateway is down.
Security boundaries
These rules describe what the installation protects:
/mcprequires a valid Cloudflare Access JWT for the configured team and application AUD. Missing tokens and tokens for another application receive401.Docker does not publish a host port. Cloudflare reaches the bridge through the private Docker network.
Docker and the installer call
GET /healthzlocally to confirm that the bridge process started and is listening after a deployment or restart. It does not call Hermes; use the MCPhealthtool for that. Only a direct loopback request can call/healthzwithout a JWT.The supported MCP endpoint is the Access-protected HTTPS hostname, not a localhost, private-address, or stdio shortcut.
A failure of the optional Ask gateway does not disable dashboard or kanban tools.
Development
This section is only for contributors changing the bridge itself. It is not part of installation.
python3 -m venv .venv
. .venv/bin/activate
python3 -m pip install -r requirements-dev.txt
python3 -m pip install -e .
make ciPython 3.12 or newer is required. uv.lock is the dependency source of truth;
requirements-dev.txt is the pinned, hashed development export.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
Cloudflare Workers MCP server: ai-model-router
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Cloudflare Workers MCP server: agent-workflow-engine
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceA remote MCP server that can be deployed on Cloudflare Workers, using OAuth authentication and SSE transport for tool invocation.
- AlicenseNot gradedqualityCmaintenanceA hosted HTTP MCP server for Cloudflare Workers that exposes a bundle of tools via a remote /mcp endpoint, enabling Claude-compatible clients to connect without a local server.151BSD Zero Clause
- AlicenseNot gradedqualityAmaintenanceLifts local stdio MCP servers into remote Streamable HTTP endpoints for cloud-hosted AI clients, with bearer-token auth and tool policy filtering.15MIT
- AlicenseNot gradedqualityBmaintenanceRemote MCP server that exposes context-keeper's rationale store (decisions, pipelines, constraints) over Streamable HTTP, deployable on Cloudflare Workers and usable as a claude.ai custom connector.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nberardi/hermes-agent-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server