JanusMCP について
JanusMCPは、同じサービスで複数のIDを使い分けるAIエージェント向けのローカル多アカウントツールブローカーです。MCPまたはコマンドラインで上流ツールを呼び出し、認証情報はローカルのキーチェーンに保管します。
主な機能
- 01サービスごとに複数アカウントを管理
- 02再接続せずにIDを切り替え
- 03stdioとStreamable HTTPに対応
- 04認証情報をOSキーチェーンに保管
- 05ツールを必要時に検索・実行
- 06アカウントをプロファイルに集約
活用シーン
- 01顧客ごとのアカウント切り替え
- 02MCP経由でエージェントのツール呼び出しを振り分け
- 03コマンドラインから上流ツールを必要時に実行
- 04複数サービスのアカウントをプロファイル化
MCP 対応
JanusMCPは上流サービスの前段でMCPサーバーとして動作し、アクティブなアカウントまたはプロファイルのツールをクライアントに公開します。stdioとStreamable HTTPに対応し、CLIからのツール検索、スキーマ確認、呼び出しも可能です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
JanusMCP
1つの認証情報ブローカーで、すべてのアカウントに対応。CLI または MCP から利用できます。 AI エージェント向けのマルチアカウントツールアクセス。認証情報はローカルに保持されます。
ワンクリックボタンを利用するには、npm パッケージが公開されている必要があります。RELEASING.mdをご覧ください。
問題
複数の会社と仕事をしている場合、同じ MCP サーバー(Supabase、GitHub、 Slack など)を異なる IDで使います。クライアントごとに別のアカウント、メールアドレス、トークンが必要です。 現在、ほとんどの LLM クライアントでは、コネクターごとに一度に保持できるアカウントは1つだけです。クライアントを切り替えるには、接続を解除して再接続し、OAuth ログインをやり直さなければなりません。毎回です。
MCP プロトコルには「アカウント」という概念がありません。1つのセッション=1つの ID=1組の 認証情報です。 JanusMCP はその不足を補います。
できること
JanusMCP は、AI エージェント向けのローカルマルチアカウントツールブローカーです。CLI から直接使うことも、実際の上流サーバーの前段に置く MCP サーバーとして使うこともできます。
- 同じサービスのアカウントを必要な数だけ一度登録し、すべて利用可能な状態に保てます。
- 再接続せずに ID を切り替えられます。再ログインや設定の変更は不要です。
- あらゆる LLM クライアントで動作します。標準の MCP(stdio + Streamable HTTP)を使用します。
- MCP セッションなしでも動作します。エージェントはCLI から直接操作できます
(コード実行モード)。
janusmcp tools/schema/callを使えば、ツール定義を事前にまとめて読み込まず、必要に応じてツールを呼び出せます。 - ローカルで実行されます。あなたのマシン、あなたのキーチェーン、あなたの管理下にあります。
- コンテキストをすっきり保ちます。N 個すべてのアカウントのツールではなく、アクティブなアカウントのツールだけを公開します。
┌─────────────────────────────┐ ┌─ Supabase (Client A)
LLM client ─MCP─▶│ JanusMCP broker │─▶ ├─ Supabase (Client B)
(Claude/GPT/ │ active-account · vault · │ ├─ GitHub (Client A)
Gemini/…) │ per-session scoping │ └─ …
└─────────────────────────────┘
どのクライアントにも表示される3つの制御ツールを使って操作します。
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 または標準入力から JSON を受け取り、アカウントやプロファイルを明示的に指定できます。また、安定した終了コードを提供します。CLI ガイドとコピーして使えるエージェント向け手順をご覧ください。
MCP 経由で接続 — デスクトップおよびチャットクライアント
npx @bayway/janusmcp serve
# or configure a supported client automatically:
janusmcp install claude-desktop
どちらのモードでも、同じ設定、OS キーチェーンの保管庫、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
…またはリリースからビルド済みバイナリをダウンロードしてください。
ソースからビルド(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 クライアントを2つ追加します。PAT は OS キーチェーンに保存され、設定ファイルには保存されません。
./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> | 1 つのツールの完全な 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> | OS のキーチェーンにシークレットを保存/削除します。 |
janusmcp login <provider> <name> | OAuth のループバックログインを行います。トークンは oauth:<name> として参照します。 |
janusmcp providers | 組み込みの OAuth プロバイダーを一覧表示します。 |
janusmcp install <client> | LLM クライアントが JanusMCP を起動するように設定します。 |
janusmcp uninstall <client> | LLM クライアントの設定から 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"]
}
}
チャットで janus_use_profile に { "profile": "client_a" } を指定すると、Client A の Supabase と
GitHub のツールを同時に利用できます。アカウント間で名前が重複するツールには、<account>_<tool> という名前空間が付与されます。
アカウントをまたぐ単発の呼び出し
janus_with_account は、アクティブなアカウントを変更せずに、別のアカウントで 1 回だけ呼び出しを実行します。例:{ "account_id": "client_b", "tool": "list_tables" }。そのアカウントで利用可能なツールを先に一覧表示するには、tool を省略してください。
コード実行モード — ターミナルからコンテキスト効率よくツールを利用
すべての MCP ツール定義を LLM のコンテキストに読み込むと、コストがかかります。コード実行モードでは、エージェント(またはあなた)が代わりにシェルから必要に応じてツールを呼び出します。これは 「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 はCLI 駆動のエージェント(Claude Code、Codex、Cursor エージェント、またはシェルにアクセスできるあらゆるエージェント)を第一級の機能としてサポートします。MCP サーバーとして登録する代わりに、エージェントに janusmcp tools / schema / call が使えることを伝えるだけです。ツールの検出、スキーマの取得、呼び出しは必要に応じて行われ、認証情報はキーチェーンに保存され、複数アカウントの切り替えも MCP 経由の場合と同じように機能します。どちらのモードも設定と永続化されたアクティブアカウントを共有するため、自由に併用できます。
呼び出しを繰り返す場合は、janusmcp daemon start で認証済みのループバック専用ブローカーを起動できます。tools、schema、call はこれを自動検出し、既存の上流セッションを再利用します。--direct を指定するとブローカーを経由せず、--daemon を指定するとブローカーが必須になります。デフォルトのポリシーは JANUS_DAEMON=auto|require|off で設定します。
主な機能
| 複数アカウント、単一エンドポイント | 同じサービスの N 個の ID を、再接続せずに利用 |
| ID のスコープ設定 | 呼び出し単位 → セッション単位 → グローバル。bindingMode: global | session | locked で設定します。セッションスコープには実際の接続が必要です。stdio と従来の HTTP にはありますが、MCP 2026-07-28 ではセッションが廃止されたため、呼び出し単位(janus_with_account)またはグローバルとなります |
| 2 種類のトランスポート | stdio(ローカル優先のクライアント向け)と Streamable HTTP(リモート優先のクライアント向け)を、同じプロセスで提供します。HTTP は MCP 2026-07-28 と、それ以前のすべてのリビジョンを、それぞれが必要とするトランスポートで提供します |
| 安全なボールト | OS キーチェーン(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 が解決するのは、それとは別の、十分に対応されていない課題です。それは、同じサービスに対する複数の IDを、モデルのコンテキストを飽和させず、あらゆる LLM から、完全にローカルで利用することです。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 はアカウントごとに固有の URL を持つ公式リモート MCP サーバー (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 には 2 種類の 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の上書きを不要にすることです。 これは予定されています。
ステータスとロードマップ
アルファ版 — コア機能は Go で実装され、テスト済みです。
- アクティブアカウントモデル、セッション単位/グローバル/ロック済みのスコープ設定
- stdio と Streamable HTTP のトランスポート
- 両方のトランスポートで MCP 2026-07-28(ステートレスコア)に対応。レガシーリビジョンは変更なし
- OS キーチェーンの保管庫と、暗号化ファイルへのフォールバック
- 自動更新と起動ごとのトークン解決に対応した OAuth ループバック(PKCE)
- 1 コマンドでのクライアントインストール(
janusmcp install …)、Claude Desktop.mcpb、レジストリserver.json - クライアントごとの複数サーバー「プロファイル」(Client A の Supabase、GitHub、Slack を同時に利用可能)
-
with_accountによる一度限りのアカウント横断呼び出し - CLI/コード実行モード(
janusmcp tools/schema/call)— トークン使用量を削減するため、すべての定義を読み込まず、必要に応じてツールを呼び出します - SSE のみをサポートするサーバー向けの SSE アップストリームトランスポート(Streamable HTTP と stdio に加えて)
- 事前登録済み OAuth クライアント(動的クライアント登録に対応しないサーバー向けに、独自のクライアントを使用。例:Google Workspace)
-
janusmcp catalog/addから利用できる組み込みコネクターカタログ(25 以上のサービス) - OS ごとの署名済みリリースバイナリと、CI でのレジストリ自動公開
設計の全容については、design-broker-mcp-multi-account.md をご覧ください。
リポジトリの構成
go/— ブローカー(Go)。こちらが実際の実装です。ビルドとドキュメント →spike/— 動作の検証済みリファレンスとして保持されている、元の TypeScript スパイクです。design-broker-mcp-multi-account.md— アーキテクチャと設計の根拠です。docs/— 現在のアーキテクチャ、互換性契約、テスト、ADR、運用に関するドキュメントです。
プロジェクトのドキュメント
プライバシーポリシー
JanusMCP はすべてお使いのマシン上で動作します。バックエンドサーバーはなく、データの収集も、分析やテレメトリーもありません。開発者がお客様や利用状況について知ることはありません。
認証情報とトークンは OS のキーチェーン(または、オプトインした場合は暗号化されたローカルファイル)に保存され、設定したサービスへの認証にのみ使用されます。モデルコンテキストを経由することはありません。ネットワーク接続は、設定した MCP サーバーおよび OAuth プロバイダーに対してのみ行われます。
すべてがローカルで動作するため、データはお使いのデバイス上にのみ保持され、削除するまで保存されます。データを削除すると(janusmcp vault delete <name> を実行するか、アンインストールすると)、完全に消去されます。
ポリシーの全文:https://janusmcp.dev/privacy。
コントリビューション
コントリビューションを歓迎します。詳細は CONTRIBUTING.md をご覧ください。新しいコネクタープリセット、クライアント統合ガイド、パッケージ化への協力を特に歓迎します。
ライセンス
MIT — LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。