Switchboard
Allows managing GitHub repositories with configurable permissions (e.g., write access but delete_repo blocked).
Enables Gmail integration with configurable read/write/full access.
Allows read-only access to Notion pages and databases.
Provides Slack integration that can be toggled off or set to specific permissions.
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., "@Switchboardshow me all enabled servers and their policies"
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.
π Switchboard
One governed MCP endpoint for every app your agents touch. Local-first. Bring your own keys. Nothing leaves your machine.
The 30-second pitch
You have N agents (Claude Desktop, Claude Code, Cursor, your own agents) and M apps (GitHub, Notion, Slack, Gmail, an internal API). Wiring that up today is NΓM pain: every client configures every server by hand, and the "easy" hosted shortcut means your OAuth tokens live on someone else's server.
Switchboard collapses NΓM into NΓ1. You run one local process. A dashboard lets you toggle apps ON/OFF and set each to read / write / full. Agents connect to one MCP endpoint and see only what you allowed. Your credentials sit in a local encrypted vault β there is no cloud, because there is no "us".
Claude ββ ββ github (write, delete_repo blocked)
Cursor ββΌβββΆ SWITCHBOARD βββΆββββββΌβ notion (read)
agents ββ one MCP endpoint ββ slack (OFF)
+ policy + vault ββ everything (read, approval-gated)Related MCP server: Multi-MCP Hub
Why it's different
Switchboard | Hosted tool routers | |
Where your tokens live | A local AES-256 vault on your machine | Their cloud |
Integrations | Mounts existing MCP servers β no treadmill | Hand-built, must be maintained |
Governance | Per-tool | Usually all-or-nothing |
Context blow-up |
| Dump every tool into context |
Cost | Free, Apache-2.0, self-hosted | Metered SaaS |
The catalog is not the moat β hosted players already have bigger ones. The defensible combination is local credentials + a governance layer + a usable dashboard, built as an aggregator that rides the existing MCP ecosystem instead of re-implementing it.
Quickstart
Requires Node β₯ 18.18. Not yet on npm β run it from source.
git clone https://github.com/Masoud-Masoori/switchboard.git
cd switchboard
npm install
npm run build
# scaffold a config + the ~/.switchboard home directory
node dist/cli.js init
# mount everything and print the governed tool list (no credentials needed β
# the bundled @modelcontextprotocol/server-everything is a real test server)
node dist/cli.js list
# run it: stdio for local clients + an HTTP endpoint & dashboard
node dist/cli.js serveOpen the dashboard at http://127.0.0.1:8088, then point an agent at the MCP endpoint:
# Claude Code / Claude Desktop, stdio transport:
claude mcp add switchboard -- node /absolute/path/to/switchboard/dist/cli.js serve
# or the Streamable HTTP endpoint, for any HTTP MCP client:
# http://127.0.0.1:8088/mcpStoring a secret (BYO keys)
Secrets never appear in your config β the config holds only ${vault:name} references.
# pipe the value in so it stays out of your shell history
printf '%s' 'ghp_xxx' | node dist/cli.js vault set github_pat
node dist/cli.js vault list # names only, never values# switchboard.config.yaml
servers:
- id: github
source: npx
package: "@modelcontextprotocol/server-github"
enabled: true
policy: write
credentials:
GITHUB_TOKEN: ${vault:github_pat} # resolved locally at mount time
tools:
delete_repo: { enabled: false } # hard-block the destructive oneCLI
Command | What it does |
| Scaffold |
| Run the gateway (stdio and/or HTTP, per config) |
| Run only the HTTP endpoint + web console |
| Mount everything and print the governed tool list, then exit |
| Check Node, config, transports, and that every secret resolves |
| Manage locally-stored secrets |
Global flag: -c, --config <path> (default switchboard.config.yaml).
Once built and linked (npm link), the switchboard command replaces node dist/cli.js.
How it works
agent clients ββMCPβββΆ GATEWAY βββΆ ROUTER βββΆ POLICY ENGINE βββΆ REGISTRY βββΆ upstream
(stdio + HTTP) one server namespaced/ read<write< mounted MCP servers
flat/search full + gates clients (npx / remote)
β β β²
DASHBOARD AUDIT LOG VAULT
(toggle/scope) (append-only) (AES-256-GCM, local)Every call is classified (read/write/full), checked against the server's scope ceiling and
any per-tool override, optionally held for human approval, then forwarded β and every verdict is
written to an append-only audit log. Full walkthrough in docs/BLUEPRINT.md.
Tool-exposure modes
Mount 30 servers and naive aggregation dumps ~600 tool schemas into your agent's context β accuracy
collapses, tokens explode. Switchboard offers three modes via gateway.tool_exposure:
namespaced(default) β tools prefixedgithub__create_issue; only enabled servers exposed.flatβ bare tool names (small setups; first server to claim a name wins).searchβ expose just two meta-tools,find_tools(query)andcall_tool(name,args). The agent searches; Switchboard returns only the relevant handful. The surface stays flat no matter how many servers you mount.
Project status
Working alpha. Real and verified today: the aggregating gateway (stdio + Streamable HTTP), the
policy engine, all three tool-exposure modes, the encrypted vault, the approval gate, the audit log,
the dashboard, and the CLI. The full find_tools β call_tool round-trip works end-to-end through
the governed path.
On the roadmap: managed OAuth flows and app2mcp (OpenAPIβMCP generation) β see
docs/ROADMAP.md. app2mcp servers fail closed until then.
Docs
Blueprint β the as-built architecture, module by module
Security
Credentials live only in
~/.switchboard/vault.json, AES-256-GCM encrypted with a key in~/.switchboard/vault.key. Nothing is transmitted off the machine; the vault makes no network calls.The HTTP endpoint binds to 127.0.0.1 by default β local-first, not exposed to the network.
Governance fails closed: a disabled server, an over-ceiling scope, or an unverifiable approval context all result in deny, not a silent allow.
Found a vulnerability? Please report it privately (see CONTRIBUTING.md) rather than opening a public issue.
Contributing
Issues and PRs welcome β see CONTRIBUTING.md. The project is deliberately small and dependency-light (zero native deps); please keep it that way.
License
Apache-2.0 Β© MAS-AI Technologies.
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.
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/Masoud-Masoori/switchboard'
If you have feedback or need assistance with the MCP directory API, please join our Discord server