Open-source · local-first · any LLM

One MCP endpoint,
every account.

A local broker that lets you add your credentials once and switch identity — the same service, many accounts — without reconnecting. Works with Claude, ChatGPT, Gemini, Cursor and any MCP client.

npm @bayway/janusmcp brew scoop docker MCP Registry

The problem

If you work with more than one company, you use the same MCP server (Supabase, GitHub, Slack…) with different identities — a different account and token per client. Most LLM clients hold one account at a time per connector: to switch you disconnect, reconnect, and redo the login. Every time. The MCP protocol itself has no notion of "account" — one session is one identity. JanusMCP fills that gap.

How it works

JanusMCP sits between your LLM client and the real MCP servers. It exposes only the active account's tools (so your context stays clean) plus a few control tools, and switching identity is a single tool call that emits tools/list_changed — no reconnect.

                 ┌─────────────────────────────┐   ┌─ Supabase (Client A)
 LLM client ─MCP─▶│   JanusMCP broker           │─▶ ├─ Supabase (Client B)
 (Claude/GPT/     │   active-account · vault ·  │   ├─ GitHub   (Client A)
  Gemini/…)       │   per-session scoping       │   └─ …
                 └─────────────────────────────┘
🔀

Switch, don't reconnect

N identities for one service, swapped with a tool call. No re-login, no config edits.

🔒

Secrets stay local

Tokens live in your OS keychain, never in config files and never in the chat context.

🧩

Any client

Standard MCP over stdio and Streamable HTTP — Claude, ChatGPT, Gemini, Cursor, Copilot.

🪶

Context-safe

Only the active account's tools are exposed — not N×tools — so the model stays focused.

Different from an MCP gateway

Gateways and proxies aggregate different servers behind one endpoint. JanusMCP solves the orthogonal, under-served problem: many identities for the same service.

MCP gateways / proxies

  • Many different servers → one endpoint
  • Tools from everything loaded at once
  • No concept of per-account identity

JanusMCP

  • Many accounts → same service, one endpoint
  • Only the active account's tools exposed
  • Credential-aware: keychain vault + OAuth, fully local

Install

Pick your channel — all published automatically on each release.

npm / npx
npx @bayway/janusmcp serve
Homebrew (macOS/Linux)
brew install bayway/janusmcp/janusmcp
Scoop (Windows)
scoop bucket add janusmcp https://github.com/bayway/scoop-janusmcp && scoop install janusmcp
Docker
docker run --rm -p 7332:7332 ghcr.io/bayway/janusmcp:latest
  1. Add accounts & log in: run janusmcp ui (local control panel) or janusmcp add supabase.
  2. Connect a client: janusmcp install claude-desktop (also: cursor, vscode, gemini, codex, claude-code).
  3. Use it: in chat call janus_list_accounts, then janus_use_account to switch identity on the fly.

Full command reference: janusmcp help · Docs & source on GitHub.

One endpoint. Every account.

Stop disconnecting and reconnecting. Add JanusMCP and switch identity with a single tool call.