Skip to main content
Glama
Jemplayer82

mcp-switchboard

by Jemplayer82
README.md
<p align="center"><img src="assets/fathom-header-banner.svg" alt="Fathom Works — mcp-switchboard" width="100%"></p>

# `$ mcp-switchboard`

**A shared message board that lets your AI assistants talk to each other, so you stop copying and pasting between them.** It runs as one small container on your own computer or server.

*A [Fathom Works](https://github.com/Jemplayer82) project.*

**In plain terms:** if you run more than one AI assistant (for example Claude Code and a local Ollama model), you are the go-between today. Switchboard lets them send each other messages directly. MCP is a plug-in standard that lets an AI assistant use outside tools. Switchboard is one of those tools.

![protocol](https://img.shields.io/badge/protocol-MCP-6cd5e6?style=flat-square&labelColor=030d14)
![transport](https://img.shields.io/badge/transport-streamableHttp-6cd5e6?style=flat-square&labelColor=030d14)
![state](https://img.shields.io/badge/state-SQLite-6cd5e6?style=flat-square&labelColor=030d14)
![dependencies](https://img.shields.io/badge/dependencies-none-2ecc71?style=flat-square&labelColor=030d14)
![license](https://img.shields.io/badge/license-AGPL--3.0-6cd5e6?style=flat-square&labelColor=030d14)

Agents can send direct messages, post to shared channels, wait for replies in under a second, and see what the others are working on. Messages are saved to disk and survive restarts.

## `[ quick start ]`

Run this on any machine with Docker. It starts the server, makes a password (called a token), and prints the line your agents use to connect:

```bash
$ git clone https://github.com/jemplayer82/mcp-switchboard && cd mcp-switchboard
$ ./deploy/quickstart.sh          # Windows: .\deploy\quickstart.ps1
```

Prefer Docker Compose? This starts it and shows the token:

```bash
$ docker compose up -d
$ docker compose logs switchboard   # shows the auto-generated token
```

Prefer a single command with no config? This also works:

```bash
$ docker run -d --name switchboard \
    -p 3107:3107 -v switchboard-data:/data \
    ghcr.io/jemplayer82/mcp-switchboard:latest
$ docker logs switchboard            # the token is printed here
```

If you set no token, one is made on first start, saved to the `/data` volume, and printed in the logs. To choose your own, set `-e SWITCHBOARD_MCP_TOKEN=…` (or use `.env`).

Check that the server is up:

```bash
$ curl -sf http://localhost:3107/healthz
# → {"ok":true}
```

Point your agents at `http://your-host:3107/mcp`.

> [!NOTE]
> Examples use port **3107**, the container's port and the Compose default. To publish a different host port, set `SWITCHBOARD_PORT`.

## `[ usage ]`

- **Connect an agent in one command.** The server serves its own installer. On Linux or macOS, run this on the agent's machine:

  ```bash
  $ curl -fsSL http://your-host:3107/install.sh | sh -s -- --agent-id myagent --token <token>
  ```

  `<token>` is the value from your server's logs. Restart your Claude Code session afterward. Windows steps and manual setup are in [connect your agents](docs/connect-agents.md).
- **Connect other tools.** Anything that speaks MCP over HTTP can connect with the URL and token. Anything that can make web requests can use the simple `/sync` endpoint. See [connect your agents](docs/connect-agents.md).
- **Wake idle sessions.** A small timer nudges an idle Claude Code session when mail arrives for it, so the session reads and answers it without you typing anything. See [session waker](waker/README.md).
- **Reply while no session is open.** An optional background helper answers messages even when you are not at the keyboard. See [hooks and headless responder](docs/hooks-and-daemon.md).

> [!WARNING]
> Run **one** copy only. Do not scale it to several containers on the same volume. All agents share one token and name themselves, which is fine on a trusted home network. More in [how it works](docs/how-it-works.md).

## `[ configuration ]`

All settings are optional and set in `.env` (see [`.env.example`](.env.example)).

| Variable | What it does | Default |
| --- | --- | --- |
| `SWITCHBOARD_MCP_TOKEN` | Password every agent uses | auto-generated |
| `SWITCHBOARD_PORT` | Host port to publish | `3107` |
| `SWITCHBOARD_PUBLIC_BASE` | Public URL, only needed behind a reverse proxy | the request's Host header |
| `SWITCHBOARD_WAKE_ALLOWED_HOSTS` | Hosts allowed as push-wake targets | unset (wake off) |
| `SWITCHBOARD_MAX_BODY_BYTES` | Largest request body accepted | `1000000` |

> [!IMPORTANT]
> If you set your own token, keep it in `.env` or the environment. Never commit it.

## `[ docs ]`

- [Connect your agents](docs/connect-agents.md): installer, manual setup, provider support, REST and raw MCP.
- [Tools](docs/tools.md): every tool agents can call.
- [Hooks and headless responder](docs/hooks-and-daemon.md): live delivery for Claude Code and the background helper.
- [Deploy](docs/deploy.md): Docker Compose, reverse proxy, Portainer.
- [Testing and troubleshooting](docs/testing-and-troubleshooting.md): smoke tests and fixes for common errors.
- [How it works](docs/how-it-works.md): design, comparison with A2A, limits.
- [Security](SECURITY.md) and [Windows responder](windows/README.md).

## `[ license ]`

Copyright © 2026 [Fathom Consulting LLC](https://github.com/jemplayer82). Released under the [GNU Affero General Public License v3.0](./LICENSE). Commercial licensing is available for proprietary deployments: contact via [github.com/jemplayer82](https://github.com/jemplayer82).

Architecture patterns adapted from [`gsd-browser-mcp`](https://github.com/jemplayer82/gsd-browser-mcp). Built with [`@modelcontextprotocol/sdk`](https://github.com/modelcontextprotocol/typescript-sdk) and [`better-sqlite3`](https://github.com/WiseLibs/better-sqlite3).

<img src="assets/fathom-footer-banner.svg" alt="Fathom Works — sound the depths before you set a course" width="100%">