Shared MCP servers for a small team
Three to ten people, a few upstream servers that hold real credentials, and every laptop with its own copy of every token: that is the default MCP setup, and it is the part that a gateway removes.
The shape of it
- The gateway runs on a small VPS or inside the team’s existing Docker host, behind Caddy or the platform’s own proxy.
- Upstream servers are configured once. The credentials they need, a database URL, a GitHub token, live in the gateway, encrypted at rest with
JUNCTIO_SECRET, and are never handed to a client. - Namespaces group servers by role.
backendgets Postgres and the deployment tools,docsgets the wiki and the design system,everyonegets search and the issue tracker. - One endpoint per namespace, one API key per person, each key bound to a single endpoint. Only an argon2id hash of a key is stored and the key is shown once.
Onboarding and offboarding
A new teammate gets one key and one snippet; their client config is a single entry. When they leave, revoking the key is the whole offboarding, and the upstream credentials they used never existed on their machine.
Keeping an eye on it
The request log records every call with its key, upstream and duration. Rate limits are per key, so one runaway agent cannot exhaust an upstream’s quota for everyone. Turn on the security audit and the gateway checks every stdio server’s dependency tree on a schedule, with a per-severity action you choose, from listing the finding to quarantining the server.
Letting an agent do the admin
Switch on the management MCP and the person who maintains the gateway can add servers, adjust namespaces and read logs from their own Claude Code session, authenticated with JUNCTIO_ADMIN_TOKEN. API keys cannot be issued through it and consent cannot be granted, so an agent cannot widen its own access.