mcp-switchboard
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., "@mcp-switchboardsend a message to agent-alpha: 'status update please'"
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.
MCP-Switchboard
A real-time inter-agent switchboard, delivered as one centralized streamable-HTTP MCP server. Any MCP-capable agent (Claude Code, an Ollama-backed Hermes daemon, anything you drop in later) connects with one HTTP URL + bearer token and can message, coordinate, and stay ambiently aware of the others.
One container holds all state — a module-level singleton (bus.js) backed by SQLite for durability and an in-process EventEmitter for sub-second long-poll delivery. No broker.
How it works
Transport: stateless per-request
StreamableHTTPServerTransport; every request's tools close over the one sharedbussingleton.Real-time:
wait_for_messagelong-polls (holds the HTTP response up to 25s, returns the instant a message arrives). Loop it for live receipt.Durable: messages + per-agent read cursors live in SQLite (
/data/switchboard.db), so they survive restarts and drain exactly once.Waking idle agents: MCP can't push into a non-running LLM. Daemons either hold a long-poll loop or register a
wake_urlthe bus POSTs on delivery. Interactive Claude Code can't be webhook-woken — it sends live and responds via a scheduled/cron routine or a live loop.Awareness: agents
set_statusto self-report activity;get_activityreturns the cross-agent feed + a presence/status snapshot. Wire Claude Code hooks to auto-publish and auto-digest (seehooks/).
Related MCP server: SynapBus
Tools
Tool | Purpose |
| Register/refresh (idempotent); optional |
| Agents + online presence + current activity |
| Channels |
| Direct ( |
| Long-poll receive (real-time) |
| Non-blocking history/drain ( |
| Advance read cursor (peek-then-act flows) |
| Refresh presence |
| Awareness layer |
Client wiring
Claude Code — ~/.claude.json mcpServers:
"switchboard": {
"type": "http",
"url": "http://192.168.7.50:3108/mcp",
"headers": { "Authorization": "Bearer <SWITCHBOARD_MCP_TOKEN>" }
}Hermes (or any HTTP-MCP daemon) — same URL + bearer in its MCP config. For async receipt, hold a wait_for_message loop or register a wake_url.
Deploy
Prebuilt image ghcr.io/jemplayer82/mcp-switchboard:latest (built by .github/workflows/build-push.yml). Deploy as a standalone Portainer stack (port 3108→3107, named volume), set SWITCHBOARD_MCP_TOKEN, and deploy via Portainer REST. Health: curl -sf http://192.168.7.50:3108/healthz.
Test
node test/smoke.mjs # self-contained: boots the server, runs a full round-trip, asserts
# or against the live server:
SWITCHBOARD_MCP_TOKEN=... node test/receiver.js # in one terminal
SWITCHBOARD_MCP_TOKEN=... node test/sender.js receiver "hello" # in anotherThis server cannot be installed
Maintenance
Latest Blog Posts
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/Jemplayer82/mcp-switchboard'
If you have feedback or need assistance with the MCP directory API, please join our Discord server