mcpField
J
JanusMCP

JanusMCP

本地服务
janusmcp.dev安全94 周前更新

关于 JanusMCP

JanusMCP 是本地多账号工具代理,面向需要在同一服务的多个身份间切换的 AI Agent。它通过 MCP 或命令行调用上游工具,并将凭据保存在本机密钥链中。

主要功能

  1. 01同一服务管理多个账号
  2. 02切换身份无需重新连接
  3. 03stdio 与 Streamable HTTP 传输
  4. 04凭据存入系统密钥链
  5. 05按需发现并调用工具
  6. 06支持账号配置文件

适用场景

  1. 01在不同客户账号间切换
  2. 02通过 MCP 为 Agent 路由工具调用
  3. 03用命令行按需调用上游工具
  4. 04将多个服务账号组合成配置文件

MCP 相关

JanusMCP 可作为 MCP 服务连接上游服务,并仅向客户端提供当前账号或配置文件的工具。支持 stdio 和 Streamable HTTP,也可通过命令行发现工具、查看 schema 和执行调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"janusmcp": {
"command": "npx",
"args": [
"-y",
"@bayway/janusmcp"
]
}
}
}
启动命令npx -y @bayway/janusmcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@bayway/janusmcp0.6.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

JanusMCP

一个凭据代理。所有账号。通过 CLI 或 MCP 使用。 为 AI Agent 提供多账号工具访问能力,同时将凭据保存在本地。

CI Release License: MIT Status: alpha Website


Add to Cursor Install in VS Code

一键按钮需要先发布 npm 包。请参阅 RELEASING.md。

问题所在

如果你与多家公司合作,就会使用同一个 MCP 服务(Supabase、GitHub、 Slack……),但需要使用不同身份——每个客户端对应不同的账号、邮箱和令牌。 如今,大多数大模型客户端在每个连接器中一次只能使用一个账号:切换客户端时, 你必须断开连接、重新连接并再次完成 OAuth 登录。每次都如此。

MCP 协议没有“账号”的概念:一个会话 = 一个身份 = 一套凭据。 JanusMCP 正是为了解决这一问题。

功能

JanusMCP 是一个面向 AI Agent 的本地多账号工具代理。你可以直接通过 CLI 使用它, 也可以将其作为 MCP 服务,置于实际上游服务之前:

  • 为同一服务添加 N 个账号,一次添加,随时使用。
  • 切换身份,无需重新连接——无需重新登录,也不用折腾配置。
  • 兼容任何大模型客户端——它使用标准 MCP(stdio + Streamable HTTP)通信。
  • 无需 MCP 会话也能使用——Agent 可以直接通过 CLI 操作它 (代码执行模式): janusmcp tools / schema / call 可按需调用工具,无需预先加载全部工具 定义。
  • 在本地运行——你的设备、你的密钥链、由你掌控。
  • 保持上下文简洁——只公开当前激活账号的工具,而非 N×tools。
                 ┌─────────────────────────────┐   ┌─ Supabase (Client A)
LLM client ─MCP─▶│   JanusMCP broker           │─▶ ├─ Supabase (Client B)
(Claude/GPT/     │   active-account · vault ·  │   ├─ GitHub  (Client A)
 Gemini/…)       │   per-session scoping       │   └─ …
                 └─────────────────────────────┘

你可以通过三个控制工具来操作它,这些工具会显示在任何客户端中: janus_list_accounts、janus_use_account、janus_whoami。

选择使用模式

通过 CLI 使用 — Claude Code、Codex、Cursor、脚本
npm install -g @bayway/janusmcp
janusmcp tools
janusmcp schema list_tables
janusmcp call list_tables --args '{"schemas":["public"]}' --json --timeout 30s

CLI 仅在需要时才发现架构,支持通过 --args 或 stdin 接收 JSON,支持指定账号/配置档, 并提供稳定的退出代码。请参阅 CLI 指南 和 可直接复制的 Agent 指令。

通过 MCP 连接 — 桌面端和聊天客户端
npx @bayway/janusmcp serve
# or configure a supported client automatically:
janusmcp install claude-desktop

两种模式共用相同的配置、操作系统密钥链保险库、OAuth 令牌和持久化的激活账号。 使用 janusmcp daemon start,即可在多次 CLI 调用之间保持上游会话处于就绪状态。

安装

发布后,你可以通过喜欢的渠道安装(每次打标签时都会自动发布到所有渠道—— 请参阅 RELEASING.md):

npx @bayway/janusmcp serve                       # npm / MCP mode
brew install bayway/janusmcp/janusmcp     # Homebrew (macOS/Linux)
scoop install janusmcp                               # Windows
docker run --rm -p 7332:7332 ghcr.io/bayway/janusmcp:latest

……或者从 Releases 下载预构建二进制文件。

从源代码构建(60 秒快速入门)

git clone https://github.com/bayway/janusmcp
cd janusmcp/go
make build                       # produces ./bin/janusmcp
cp config.example.json config.json   # edit with your accounts
./bin/janusmcp serve             # stdio, for Claude Desktop/Code

两个 Supabase 客户端,PAT 保存在操作系统密钥链中(绝不存入配置):

./bin/janusmcp vault set supabase_client_a   # paste the PAT
./bin/janusmcp vault set supabase_client_b
// config.json
{
  "bindingMode": "session",
  "accounts": [
    { "id": "client_a", "service": "supabase", "command": "npx",
      "args": ["-y", "@supabase/mcp-server-supabase@latest", "--read-only", "--project-ref=REF_A"],
      "env": { "SUPABASE_ACCESS_TOKEN": "vault:supabase_client_a" } },
    { "id": "client_b", "service": "supabase", "command": "npx",
      "args": ["-y", "@supabase/mcp-server-supabase@latest", "--read-only", "--project-ref=REF_B"],
      "env": { "SUPABASE_ACCESS_TOKEN": "vault:supabase_client_b" } }
  ]
}

将它添加到 Claude Desktop:

{ "mcpServers": { "janusmcp": {
  "command": "/abs/path/janusmcp/go/bin/janusmcp", "args": ["serve"],
  "env": { "JANUS_CONFIG": "/abs/path/janusmcp/go/config.json" } } } }

对于 ChatGPT / Gemini / Cursor / Copilot,运行 HTTP 并将它们指向该 URL:

JANUS_TRANSPORT=http JANUS_HTTP_PORT=7332 ./bin/janusmcp serve
# → http://127.0.0.1:7332/mcp

命令

运行 janusmcp help 查看完整参考。基本命令如下:

命令作用
janusmcp serve运行代理(默认)。传输方式通过环境变量配置:JANUS_TRANSPORT=stdio|http|both、JANUS_HTTP_HOST、JANUS_HTTP_PORT。
janusmcp tools [selector]列出当前(或指定)账户/配置的精简工具清单。使用 --json 查看完整定义;可选 --timeout。
janusmcp schema <tool>查看单个工具的完整 JSON 定义。使用 --account <id|profile> 消除歧义;可选 --timeout。
janusmcp call <tool>调用工具。支持 --account、--args、标准输入、稳定的 --json 输出,以及可选的 --timeout。
janusmcp use <account|profile>保存当前选择项,供后续 CLI 命令和新的 MCP 会话使用。
janusmcp daemon start|stop|restart|status管理可选的仅限环回连接的守护进程,该进程会复用上游会话。
janusmcp ui打开本地控制面板 — 添加账户、登录、设置密钥。
janusmcp add <template> [id]根据模板添加账户(运行 janusmcp catalog 查看模板)。
janusmcp catalog列出内置账户模板。
janusmcp connect <id>连接账户;对于远程 OAuth,会打开浏览器。
janusmcp status显示每个账户的登录/密钥状态(不显示密钥值)。
janusmcp vault set <name> / delete <name>在操作系统钥匙串中存储/移除密钥。
janusmcp login <provider> <name>OAuth 环回登录;令牌以 oauth:<name> 引用。
janusmcp providers列出内置 OAuth 提供方。
janusmcp install <client>配置大模型客户端以启动 JanusMCP。
janusmcp uninstall <client>从大模型客户端的配置中移除 JanusMCP。
janusmcp version · janusmcp help版本信息 · 本参考。

install / uninstall 支持的 <client> 值:claude-desktop、claude-code、 cursor、vscode、gemini、codex、chatgpt、print。运行 janusmcp install list (或 uninstall list)可查看各个目标及其是否已配置。

janusmcp install claude-desktop      # one-command setup
janusmcp uninstall claude-desktop    # clean removal (restart the client afterwards)

在任何已连接的客户端中,你还可以使用控制工具 janus_list_accounts、 janus_use_account、janus_whoami、janus_login、janus_use_profile 和 janus_with_account。

配置 — 一次启用整个客户端的工具栈

配置会将同一客户端在不同服务中的账户分组。激活配置后,会一并开放其中所有账户的工具,并将每次调用路由到相应的上游:

// config.json
{
  "accounts": [
    { "id": "supabase_a", "service": "supabase", "transport": "http", "url": "https://mcp.supabase.com/mcp", "auth": "oauth" },
    { "id": "github_a",   "service": "github",   "transport": "http", "url": "https://api.githubcopilot.com/mcp/", "auth": "oauth" }
  ],
  "profiles": {
    "client_a": ["supabase_a", "github_a"]
  }
}

然后在聊天中调用:使用 { "profile": "client_a" } 执行 janus_use_profile → Client A 的 Supabase 和 GitHub 工具即可同时使用。不同账户中名称冲突的工具会添加命名空间(<account>_<tool>)。

一次性跨账户调用

janus_with_account 可在不更改当前账户的情况下,针对另一个账户执行单次调用 — 例如 { "account_id": "client_b", "tool": "list_tables" }。省略 tool 可先列出该账户可用的工具。

代码执行模式——来自终端的高效上下文工具

将每个 MCP 工具定义都加载到大模型上下文中,代价很高。在代码执行模式下,Agent(或你)改为按需从 shell 调用工具——类似于 "使用 MCP 执行代码"—— 这样,上下文中只会包含实际请求的结果:

janusmcp tools                        # compact list for the active account/profile
janusmcp tools client_a               # ...or any account/profile explicitly
janusmcp schema list_tables           # full input schema of ONE tool, only when needed
janusmcp call list_tables --args '{"schemas":["public"]}'
janusmcp call ping --account azienda_b          # cross-account without switching
echo '{"sql":"select 1"}' | janusmcp call db_query   # JSON args via stdin too
janusmcp call ping --json --timeout 30s         # stable envelope for agents

call 会将工具的文本内容输出到标准输出;发生工具错误时,会以非零状态码退出,因此可以与管道和脚本组合使用。选择器的解析方式与代理相同:默认使用已持久化的活动账户,也可以指定任意账户 ID 或配置文件名称;如果某个名称与配置文件中的多个账户冲突,必须使用 --account 消除歧义。密钥通过与 serve 相同的保险库/OAuth 流程解析——无需额外配置。

这使 JanusMCP 成为命令行驱动 Agent(Claude Code、Codex、Cursor Agent,或任何可访问 shell 的 Agent)的一等公民:无需将其注册为 MCP 服务,只需告诉 Agent 有 janusmcp tools / schema / call 这些命令即可。发现、查看架构和调用都按需进行,凭据保存在密钥链中,多账户切换方式与通过 MCP 切换相同。两种模式共用配置和已持久化的活动账户,因此可以自由混用。

对于重复调用,janusmcp daemon start 会启动一个仅限本地回环地址的认证代理。tools、schema 和 call 会自动检测它并复用其上游会话;--direct 会绕过它,而 --daemon 则要求必须使用它。设置 JANUS_DAEMON=auto|require|off 可选择默认策略。

主要功能

多账户,一个端点同一服务支持 N 个身份,无需重新连接
身份作用域每次调用 → 每个会话 → 全局,通过 bindingMode: global | session | locked 设置。会话作用域需要真实连接:stdio 和旧版 HTTP 都有会话;MCP 2026-07-28 移除了会话,因此该版本中作用域为每次调用(janus_with_account)或全局
双传输方式stdio(本地优先的客户端)+ Streamable HTTP(远程优先的客户端),运行于同一进程。HTTP 支持 MCP 2026-07-28 及所有更早版本,每个版本都使用其所需的传输方式
安全保险库操作系统密钥链(macOS/Windows/Linux)+ 加密文件备用方案;密钥采用 vault:<name> 格式
OAuth 本地回环janusmcp login(PKCE),令牌存储在保险库中,自动刷新,使用 oauth:<name>
上下文安全仅公开活动账户的工具;切换时会发出 tools/list_changed
MCP 和 CLI同一代理既可作为 MCP 服务使用,也可通过 janusmcp tools / schema / call 使用——无需预先批量加载工具定义

有何不同

MCP 网关领域(MetaMCP、mcp-proxy、IBM ContextForge,……)会将不同的服务聚合到一个端点之后。JanusMCP 则解决了另一个鲜有支持的问题:同一服务的多个身份,不受模型上下文限制,可供任何大模型使用,并完全在本地运行。它是一个能识别凭据的代理,而不是一个扁平的聚合器。

内置连接器

使用现成模板搭建账户:janusmcp add <template>(运行 janusmcp catalog 可查看完整且最新的列表)。大多数使用浏览器 OAuth(动态客户端 注册);少数需要额外设置,详见下文。

  • 远程服务,浏览器登录(OAuth): supabase、github、notion、sentry、stripe、 hubspot、paypal、linear、vercel、canva、neon、netlify、zapier。
  • SSE 传输(旧版): asana、monday、intercom、webflow、wix、square、 globalping。
  • Cloudflare(Streamable HTTP): cloudflare-bindings、cloudflare-observability、 cloudflare-radar、cloudflare-builds、cloudflare-browser。
  • Google Workspace(自备 OAuth 客户端): gmail、google-drive、 google-calendar、google-chat —— 参见 go/docs/google-workspace.md。
  • 每个账户单独设置 URL: activecampaign(粘贴你的 Remote MCP URL)。
  • Figma: figma-desktop(本地,推荐)和 figma(远程,受限——见下文)。
  • 通用构建模块: http-oauth、sse-oauth、supabase-pat、stdio。

缺少某项?使用 http-oauth / sse-oauth 添加任意远程服务,使用 stdio 添加任意本地服务,或在 ~/.config/janusmcp/templates.json 中定义自己的模板。

提供方说明

ActiveCampaign

ActiveCampaign 提供官方远程 MCP 服务,每个账户都有唯一的 URL (ActiveCampaign → Settings → Developer → Remote MCP URL),并支持基于浏览器的 OAuth—— 非常适合多账户代理。为每个客户端添加一个账户:

janusmcp add activecampaign ac_clientA   # then paste that client's Remote MCP URL in config.json
janusmcp connect ac_clientA              # browser login

由于 URL 按账户区分,模板会预置 REPLACE_ACTIVECAMPAIGN_MCP_URL 占位符,你必须将其替换为自己的 URL。登录使用动态客户端注册,因此 无需客户端 ID/密钥。

Google Workspace(Gmail / Drive / Calendar / Chat)

Google 为 Gmail、Drive、Calendar 和 Chat 提供远程 MCP 服务,但与此处大多数 提供方不同,它们要求使用你自己的 OAuth 客户端(在 Google Cloud Console 中创建);它们不支持动态客户端注册。JanusMCP 通过 oauthClientId / oauthClientSecret / scopes 字段支持此方式,这些字段由 gmail、 google-drive、google-calendar 和 google-chat 模板预先设置:

export GOOGLE_OAUTH_CLIENT_ID=... GOOGLE_OAUTH_CLIENT_SECRET=...
janusmcp add gmail gmail_clientA
janusmcp connect gmail_clientA           # browser login as client A

Google Cloud 的完整一次性设置步骤(启用 MCP API、设置同意屏幕、创建 Desktop OAuth 客户端) 以及作用域详情,参见 go/docs/google-workspace.md。

Figma

Figma 提供两种 MCP 服务,本项目采用不同方式处理:

  • 本地 Dev Mode 服务(推荐)。 Figma 桌面应用会在 http://127.0.0.1:3845/mcp 上运行 MCP 服务。它是本地服务,无需 OAuth,开箱即用: 在桌面应用中启用(Dev Mode → Inspect → Enable desktop MCP server),然后使用 janusmcp add figma-desktop figma_work 添加。 需要付费 Figma 计划中的 Dev/Full 席位。

  • 远程服务(https://mcp.figma.com/mcp)——受限。 Figma 在动态客户端注册期间会 将 OAuth client_name 列入允许名单,并对不在其 MCP 目录中的客户端(VS Code、Cursor、Claude Code 等)返回 403 Forbidden。JanusMCP 尚未获批为客户端。

    ⚠️ 变通方法——需主动选择,风险自负。 你可以在 config.json 中某个远程 figma 账户上设置 "clientName": "Claude Code",让 JanusMCP 使用获批名称注册。 这会冒充获批客户端,且可能违反 Figma 的服务条款;Figma 更新允许名单时也可能 导致此方法失效。此选项默认未启用。实际使用时,建议优先采用上文的本地 Dev Mode 服务。

    从长远来看,正确的解决方式是将 JanusMCP 提交至 Figma MCP 目录并获批,这样就无需 覆盖 client_name。此事已列入计划。

状态与路线图

Alpha — 核心功能已用 Go 实现并经过测试。

  • 活跃账户模型,支持按会话/全局/锁定范围
  • stdio + Streamable HTTP 传输
  • 两种传输均支持 MCP 2026-07-28(无状态核心),旧版修订保持不变
  • OS 密钥链保险库 + 加密文件回退方案
  • OAuth loopback(PKCE),支持自动刷新和每次启动时解析令牌
  • 一条命令安装客户端(janusmcp install …)、Claude Desktop .mcpb、注册表 server.json
  • 每个客户端支持多个服务“配置”(可同时使用客户端 A 的 Supabase + GitHub + Slack)
  • with_account 一次性跨账户调用
  • CLI / 代码执行模式(janusmcp tools / schema / call)——按需调用工具,而非加载所有定义,以减少令牌用量
  • SSE 上游传输(除 Streamable HTTP + stdio 外),用于仅支持 SSE 的服务
  • 预注册 OAuth 客户端(为不支持动态客户端注册的服务提供自带客户端,例如 Google Workspace)
  • 内置连接器目录(25+ 项服务),通过 janusmcp catalog / add 使用
  • 在 CI 中签名并发布各操作系统的二进制文件,以及自动发布注册表

完整设计请参见 design-broker-mcp-multi-account.md。

仓库布局

项目文档

隐私政策

JanusMCP 完全在你的机器上运行。它没有后端服务、不收集任何数据,也不包含分析或遥测功能——开发者不会收到任何与你或你的使用情况相关的信息。凭据和令牌存储在你的 OS 密钥链中(或者,如果你选择启用,则存储在加密的本地文件中),仅用于向你配置的服务进行身份验证;它们绝不会经过模型上下文。网络连接仅会发送到你配置的 MCP 服务和 OAuth 提供方。由于一切都在本地运行,数据只会在你自己的设备上保留,直到你将其删除;删除数据(janusmcp vault delete <name> 或卸载)即可将其彻底移除。

完整政策:https://janusmcp.dev/privacy。

贡献

非常欢迎贡献——请参阅 CONTRIBUTING.md。尤其欢迎新增连接器预设、客户端集成指南和打包方面的帮助。

许可证

MIT — 请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。