
Janusmcp
io.github.Bayway由 GitHub 账号 Bayway 发布v0.6.2更新于 Oct 27, 2026
Multi-account tool broker for AI agents — CLI and MCP.
概览
本地多账号工具代理,置于其他 MCP 服务器之前,让助手为同一服务保留多个身份并在不重连的情况下切换账号。
- 可以做什么
- 列出、切换并查看账号与配置档,确认当前生效的身份
- 在不改变当前账号的情况下,用另一个账号执行单次工具调用
- 从命令行按需发现工具、查看单个工具的 schema 并调用
- 从内置模板添加账号、通过浏览器 OAuth 连接,并把密钥存入操作系统钥匙串
- 为受支持的 LLM 客户端写入或移除配置,并可运行可选的本地守护进程
- 适用场景
- 当你同时服务多个客户或公司,需要用不同账号和令牌访问同一个服务(如 Supabase、GitHub、Slack)时适用;也适合希望不在模型上下文中加载大量工具定义、改为从 shell 按需调用工具的场景。
- 运行要求
- 以 stdio 本地进程运行,可从 npm 或预编译二进制安装,npm 包需要 Node.js。需要一份列出账号的配置文件,以及每个账号的凭据:通过 vault 命令存入操作系统钥匙串的密钥,或 OAuth 登录。Google Workspace 模板需要自备 OAuth 客户端 ID 与密钥。需要访问所配置的上游 MCP 服务器和 OAuth 提供方。
安装
在 SourceWeft 中
- 打开 控制台中的 Janusmcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
JanusMCP
One credential broker. Every account. From the CLI or MCP. Multi-account tool access for AI agents, with credentials kept local.
[CI] [Release] [License: MIT] [Status: alpha] [Website]
[Add to Cursor] [Install in VS Code]
One-click buttons require the npm package to be published. See RELEASING.md.
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, email and token per client. Today most LLM clients hold one account at a time per connector: to switch client you disconnect, reconnect, and redo the OAuth login. Every time.
The MCP protocol has no notion of "account": one session = one identity = one set of credentials. JanusMCP fills that gap.
What it does
JanusMCP is a local multi-account tool broker for AI agents. It can be used directly from the CLI or as an MCP server in front of the real upstream servers:
- Add N accounts once for the same service and keep them all available.
- Switch identity without reconnecting — no re-login, no fiddling with config.
- Works with any LLM client — it just speaks standard MCP (stdio + Streamable HTTP).
- Works without an MCP session too — agents can drive it directly from the CLI
(code-execution mode):
janusmcp tools/schema/callinvoke tools on demand, with no bulk tool definitions loaded upfront. - Runs locally — your machine, your keychain, your control.
- Keeps the context clean — it exposes only the active account's tools, not N×tools.
You drive it with three control tools that appear in any client:
janus_list_accounts, janus_use_account, janus_whoami.
Choose your mode
Use from the CLI — Claude Code, Codex, Cursor, scripts
The CLI discovers schemas only when needed, accepts JSON through --args or stdin,
supports explicit accounts/profiles, and provides stable exit codes. See the
CLI guide and copyable agent instructions.
Connect over MCP — desktop and chat clients
Both modes share the same config, OS-keychain vault, OAuth tokens and persisted active
account. Use janusmcp daemon start to keep upstream sessions warm across repeated CLI calls.
Install
Once released, install via your favorite channel (all published automatically on each tag — see RELEASING.md):
…or download a prebuilt binary from Releases.
Build from source (60-second quickstart)
Two Supabase clients, PATs kept in your OS keychain (never in the config):
Add it to Claude Desktop:
For ChatGPT / Gemini / Cursor / Copilot, run HTTP and point them at the URL:
Commands
Run janusmcp help for the full reference. The essentials:
Supported <client> values for install / uninstall: claude-desktop, claude-code,
cursor, vscode, gemini, codex, chatgpt, print. Run janusmcp install list
(or uninstall list) to see each target and whether it's already configured.
Inside any connected client you also get the control tools janus_list_accounts,
janus_use_account, janus_whoami, janus_login, janus_use_profile, and
janus_with_account.
Profiles — a whole client's stack at once
A profile groups accounts of the same client across different services. Activating it exposes the tools of all its accounts together, and each call is routed to the right upstream:
Then in chat: janus_use_profile with { "profile": "client_a" } → Supabase and
GitHub tools for Client A are available simultaneously. Colliding tool names across
accounts are namespaced (<account>_<tool>).
One-shot cross-account calls
janus_with_account runs a single call on another account without changing the
active one — e.g. { "account_id": "client_b", "tool": "list_tables" }. Omit tool
to list that account's available tools first.
Code-execution mode — context-efficient tools from the terminal
Loading every MCP tool definition into an LLM context is expensive. In code-execution mode an agent (or you) invokes tools on demand from the shell instead — à la "code execution with MCP" — so the context holds only the results it actually asked for:
call prints the tool's text content to stdout and exits non-zero on a tool error, so
it composes with pipes and scripts. Selectors resolve exactly like in the broker: the
persisted active account by default, or any account id / profile name; a name that
collides across a profile's accounts must be disambiguated with --account. Secrets
resolve through the same vault/OAuth stack as serve — nothing extra to configure.
This makes JanusMCP a first-class citizen for CLI-driven agents (Claude Code,
Codex, Cursor agents, or any agent with shell access): instead of registering it as
an MCP server, just tell the agent that janusmcp tools / schema / call exist.
Discovery, schemas and invocation happen on demand, credentials stay in the keychain,
and multi-account switching works the same as over MCP. Both modes share the config
and the persisted active account, so you can mix them freely.
For repeated calls, janusmcp daemon start launches an authenticated loopback-only
broker. tools, schema, and call auto-detect it and reuse its upstream sessions;
--direct bypasses it and --daemon requires it. Set JANUS_DAEMON=auto|require|off
to choose a default policy.
Key features
How it's different
The MCP gateway space (MetaMCP, mcp-proxy, IBM ContextForge, …) aggregates different servers behind one endpoint. JanusMCP solves the orthogonal, under-served problem: many identities for the same service, without saturating the model's context, from any LLM, fully local. It's a credential-aware broker, not a flat aggregator.
Built-in connectors
Scaffold an account from a ready-made template with janusmcp add <template> (run
janusmcp catalog for the full, up-to-date list). Most use browser OAuth (dynamic client
registration); a few need extra setup, noted below.
- Remote, browser login (OAuth):
supabase,github,notion,sentry,stripe,hubspot,paypal,linear,vercel,canva,neon,netlify,zapier. - SSE transport (legacy):
asana,monday,intercom,webflow,wix,square,globalping. - Cloudflare (Streamable HTTP):
cloudflare-bindings,cloudflare-observability,cloudflare-radar,cloudflare-builds,cloudflare-browser. - Google Workspace (bring-your-own OAuth client):
gmail,google-drive,google-calendar,google-chat— seego/docs/google-workspace.md. - Per-account URL:
activecampaign(paste your Remote MCP URL). - Figma:
figma-desktop(local, recommended) andfigma(remote, restricted — see below). - Generic building blocks:
http-oauth,sse-oauth,supabase-pat,stdio.
Missing one? Add any remote server with http-oauth / sse-oauth, any local one with
stdio, or define your own template in ~/.config/janusmcp/templates.json.
Provider notes
ActiveCampaign
ActiveCampaign ships an official remote MCP server with a unique URL per account (ActiveCampaign → Settings → Developer → Remote MCP URL) and browser-based OAuth — a natural fit for the multi-account broker. Add one account per client:
Because the URL is per-account, the template seeds a REPLACE_ACTIVECAMPAIGN_MCP_URL
placeholder you must replace with your own URL. Login uses dynamic client registration, so
no client ID/secret is needed.
Google Workspace (Gmail / Drive / Calendar / Chat)
Google offers remote MCP servers for Gmail, Drive, Calendar and Chat, but — unlike most
providers here — they require your own OAuth client (created in the Google Cloud
Console); they don't support dynamic client registration. JanusMCP supports this via the
oauthClientId / oauthClientSecret / scopes fields, preset by the gmail,
google-drive, google-calendar and google-chat templates:
Full one-time Google Cloud setup (enable MCP APIs, consent screen, Desktop OAuth client)
and scope details are in go/docs/google-workspace.md.
Figma
Figma offers two MCP servers, handled differently here:
-
Local Dev Mode server (recommended). Figma's desktop app hosts an MCP server on
http://127.0.0.1:3845/mcp. It's local, needs no OAuth, and works out of the box: enable it in the desktop app (Dev Mode → Inspect → Enable desktop MCP server) and add it withjanusmcp add figma-desktop figma_work. Requires a Dev/Full seat on a paid Figma plan. -
Remote server (
https://mcp.figma.com/mcp) — restricted. Figma allowlists the OAuthclient_nameduring dynamic client registration and returns 403 Forbidden to any client that isn't in its MCP catalog (VS Code, Cursor, Claude Code, …). JanusMCP is not (yet) an approved client.⚠️ Workaround — opt-in, use at your own risk. You can make JanusMCP register under an approved name by setting
"clientName": "Claude Code"on a remotefigmaaccount in yourconfig.json. This impersonates an approved client and may violate Figma's Terms of Service; it can also break whenever Figma updates its allowlist. It is not enabled by default. Prefer the local Dev Mode server above for real work.The proper long-term fix is for JanusMCP to be submitted to and approved for Figma's MCP catalog, so no
client_nameoverride is needed. This is planned.
Status & roadmap
Alpha — the core is implemented and tested in Go.
- Active-account model, per-session / global / locked scoping
- stdio + Streamable HTTP transports
- MCP 2026-07-28 (stateless core) on both transports, legacy revisions unchanged
- OS-keychain vault + encrypted-file fallback
- OAuth loopback (PKCE) with auto-refresh and per-spawn token resolution
- One-command client install (
janusmcp install …), Claude Desktop.mcpb, registryserver.json - Multi-server "profiles" per client (Supabase + GitHub + Slack of Client A at once)
-
with_accountone-shot cross-account calls - CLI / code-execution mode (
janusmcp tools/schema/call) — invoke tools on demand instead of loading all definitions, to cut token usage - SSE upstream transport (in addition to Streamable HTTP + stdio) for SSE-only servers
- Pre-registered OAuth clients (bring-your-own client for servers without dynamic client registration, e.g. Google Workspace)
- Built-in connector catalog (25+ services) via
janusmcp catalog/add - Signed, per-OS release binaries & registry auto-publish in CI
See design-broker-mcp-multi-account.md for the full design.
Repository layout
go/— the broker (Go). This is the real implementation. Build & docs →spike/— the original TypeScript spike, kept as a verified reference of behavior.design-broker-mcp-multi-account.md— architecture & rationale.docs/— current architecture, compatibility contract, testing, ADRs, and operations.
Project documentation
- Documentation index
- Architecture
- Compatibility contract
- Architecture Decision Records
- Testing
- Changelog
- Contributing and security policy
Privacy Policy
JanusMCP runs entirely on your machine. It has no backend servers, collects no data, and
contains no analytics or telemetry — the developers receive nothing about you or your usage.
Credentials and tokens are stored in your OS keychain (or, if you opt in, an encrypted local
file) and are used only to authenticate to the services you configure; they never pass through
the model context. Network connections are made only to the MCP servers and OAuth providers you
configure. Because everything is local, data is retained only on your own device for as long as
you keep it, and removing it (janusmcp vault delete <name>, or uninstalling) removes it
entirely.
Full policy: https://janusmcp.dev/privacy.
Contributing
Contributions are very welcome — see CONTRIBUTING.md. New connector presets, client integration guides, and packaging help are especially appreciated.
License
MIT — see LICENSE.
来源:README.md,提交 f17e200
工具
0版本历史
2- v0.6.2最新Sep 27, 2026
- v0.6.0Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分