vaultgate について
vaultgateは、BitwardenまたはVaultwardenの認証情報をホスト型エージェントに渡さず、利用させるセルフホスト可能なリモートMCPサーバーです。OAuth 2.1、ポリシー設定、監査記録でアクセスを管理し、有効化した操作を指定先で実行できます。
主な機能
- 01OAuth 2.1によるクライアント認可とトークン失効
- 02BitwardenとVaultwardenへの接続
- 03認証情報アクセス範囲のポリシー管理
- 04設定済みAPI、データベース、ホストでの操作
- 05ツール呼び出しと認可イベントの記録
活用シーン
- 01ホスト型エージェントに秘密を見せず認証情報を使わせる
- 02クライアントごとに認証情報と操作を制限する
- 03対象システムへのエージェント呼び出しを監査する
MCP 対応
vaultgateはHTTPS経由で、保管庫ツールと任意の対象操作ツールをMCPクライアントに提供します。クライアントはOAuth 2.1で範囲指定済みの失効可能なトークンを取得し、サーバーが認証情報を使って操作した後、結果を秘匿情報の除去後に返します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://{vaultgate_host}/mcpclaude mcp add --transport http adamrowles1996-vaultgate https://{vaultgate_host}/mcp{"mcpServers":{"adamrowles1996-vaultgate":{"type":"http","url":"https://{vaultgate_host}/mcp"}}}Cursor で開く{"servers":{"adamrowles1996-vaultgate":{"type":"http","url":"https://{vaultgate_host}/mcp"}}}VS Code で開く{"mcpServers":{"adamrowles1996-vaultgate":{"type":"http","url":"https://{vaultgate_host}/mcp"}}}{"mcpServers":{"adamrowles1996-vaultgate":{"serverUrl":"https://{vaultgate_host}/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
vaultgate
セルフホスト可能なリモートMCPサーバーです。Claude、Claude Cowork、Claude Code、Codexなどのホスト型AIエージェントが、認証情報を一切見ることなく使用できるようにします。認証情報は、お使いのBitwarden(またはVaultwarden)ボルトに保管されます。 vaultgateは、定義したシステム(HTTP API、Microsoft Graph、SQL ServerまたはPostgreSQLデータベース、SSHまたはWinRMホスト、Sembleで検索するGitHubリポジトリ)に対して、ポリシーに従ってエージェントに代わり認証情報を使用し、結果のみを返します。独自のOAuth 2.1認可サーバーを備えているため、エージェントが保持するのは、有効期間が短く、スコープが限定され、取り消し可能なトークンだけです。
ステータス:リリース候補。 M1からM7までのマイルストーンがマージ済みです。内容は、設定、SQLiteストア、TOTPを使用したオペレーターID、OAuth 2.1認可サーバー、MCPツールのサーフェス、管理された
bw serveバックエンド、監査証跡、パッケージング、Azureテンプレートです。M8(強化と互換性の検証)は進行中です。オプトインで、デフォルトでは無効のアクションレイヤーはM14まで実装済みです。M9はエンジン、オペレーターページ、httpコネクター、M10はMicrosoft Graph認証情報アダプター、M11はsql、M12はssh、M13はwinrm、M14はポリシーフォームの検証メッセージ、呼び出し履歴と書き込みのビュー、接続済みクライアント一覧からの許可管理です。M16ではcodeコネクターが追加されます。サイドカーを使って、非公開GitHubリポジトリ内のSembleコード検索を行います(ガイド)。http宛先では証明書を固定するか、プライベート認証局を信頼できます。また、oauth2認証情報モードでは、任意のOAuth 2.0トークンエンドポイントからトークンを取得します(ガイド)。vaultgate独自の呼び出しごとの書き込み確認は廃止されました。承認はエージェントのクライアント側で行います。オプトインの認証情報リレーは、タグ付きTailscaleノード上のプログラムにbw serveの読み取りAPIを提供します(ガイド)。browserはM15です。詳細はdocs/PLAN.mdを参照してください。
理由
エージェントが読み取れる認証情報は、会話の記録に残ります。 認証情報を使うためにエージェントがパスワードを明かすと、その値はモデルのコンテキスト、チャットの会話記録、クライアントのログ、そしてエージェントが組み立てるあらゆるコマンドラインに残ります。エージェントを無効にしても、その値は取り戻せません。vaultgate は、エージェントが値を必要としないように設計されています。
- 読み取らずに使います。 アクションレイヤーを有効にすると (ガイド、仕様 13 と 13a、ADR 0007)、 エージェントは、定義済みのターゲットを指定して操作を記述します。操作には、HTTP リクエスト、SQL クエリまたはステートメント、SSH または WinRM ホスト上のコマンド、GitHub リポジトリの Semble 検索があります。 vaultgate はボールトから認証情報を取得し、固定された接続先に接続して、ポリシーの範囲内で操作を実行し、注入されたすべての値を結果から除去して、残りを返します。エージェントがホスト、URL のベース、データベース名、認証情報を指定することはありません。引数によって変わるのは実行内容であり、接続先や実行者ではありません。
- 書き込みは二重にオプトインし、作業場所で承認します。 書き込みには、同意時に専用のスコープが必要で、ターゲットポリシーでも許可されていなければなりません。各呼び出しを承認するのはエージェントのクライアントの役割です。たとえば Claude Code は、権限で許可されていないツールを実行する前に確認を求めます。また、コンソールには変更を加えたすべての呼び出しが一覧表示されます。
- 読み取りが必要なまれな値には、監査対象となる単一の窓口を用意します。 ボールトのツールが返すのはメタデータです。単一のツールが、専用スコープのもと、1 回の呼び出しにつき 1 アイテムの 1 フィールドだけのシークレット値を返し、すべての呼び出しを監査します。
- vaultgate ホスト上では何も実行されません。 どのツールも、エージェントから送られた内容を好きな場所で実行することはありません。
ssh_runとwinrm_runは、許可リストに従って設定済みの単一ホスト上で単一のコマンドを実行します(あらゆるコマンドを受け付けるターゲットには、専用フラグとデプロイメント側の同意の両方が必要です)。すべての操作はターゲット上で実行されます。 - エージェントが保持するのはトークンだけです。 マスターパスワードと API キーは、コンソールの Vault ページでボールトに接続すると、ホスト上の vaultgate プロセス内でのみシークレットキーを使って暗号化されます。
- 標準に準拠しています。 MCP 認可仕様(2026-07-28)に基づく OAuth 2.1、PKCE、RFC 9728 / 8414 / 8707 / 7591 / 7009 / 9207、およびクライアント ID メタデータドキュメントに対応しています。
- あらゆる Bitwarden に対応します。 bitwarden.com、bitwarden.eu、セルフホストの Bitwarden、Vaultwarden に対応しています。
- 運用はシンプルです。 単一のプロセス、単一の SQLite ファイル、構造化ログ、ヘルスプローブ、監査証跡を備えています。
docker compose upでインストールが完了します。
他の Bitwarden MCP サーバーとの比較
ホスト型エージェントは HTTPS 経由で MCP サーバーに接続するため、ボールトの隣でプロセスを実行できません。一方、他の Bitwarden MCP サーバーは、まさにそのローカルプロセス向けに作られています。
| サーバー | 実行場所 | マスターパスワード/API キーの保持者 | クライアントの認証 | 同意とスコープ | 失効 | 監査証跡 | 認証情報を見ずに使用する方法 |
|---|---|---|---|---|---|---|---|
公式 bitwarden/mcp-server | ローカル、stdio。README では、パブリックにホストしてはならないと記載されています | お使いのマシン:クライアントの設定にある bw CLI セッション(BW_SESSION)、または OS のパスワードダイアログ | なし。プロセスを起動した人が使用します | なし。起動したクライアントはすべてのツールを使用できます | 保管庫をロックするか、bw セッションを終了します | 記載なし | 記載なし |
| warden-mcp、リモートモード | ホストする長時間稼働の HTTP サービス | クライアントが、各呼び出しで X-BW-Password、X-BW-ClientId、X-BW-ClientSecret ヘッダーとして送信します | 組み込みのものはありません(「v1 に組み込みの認証レイヤーはありません」) | なし。READONLY と NOREVEAL のスイッチは、すべてのクライアントに同じように適用されます | Bitwarden の認証情報をローテーションします | 記載なし | 記載なし |
| 一般的なコミュニティ製サーバー、例:vaultwarden-mcp、bitwarden-mcp-server | ローカルの stdio、または平文の HTTP ポート | メールアドレスとマスターパスワードを保持する環境変数から取得するサーバープロセス | なし | なし | Bitwarden の認証情報をローテーションします | 記載なし | 記載なし |
| vaultgate | ホスト上で実行され、ホスト型エージェントから HTTPS 経由でアクセス可能 | vaultgate プロセスのみ。エージェントが保持するのは不透明なトークンです | 組み込みの OAuth 2.1 認可サーバー:TOTP によるオペレーターログイン、PKCE、RFC 9728 / 8414 / 8707 / 7591 / 7009 / 9207、クライアント ID メタデータドキュメント | クライアントごとの同意ページ。vault:read、vault:reveal、vault:generate、vault:write(デフォルトでは無効)。有効化した各コネクターには actions:* スコープ | コンソールの Agents ページから、クライアントごとまたはトークンごとに失効できます。リフレッシュトークンはローテーションされ、再利用されるとトークンファミリーが失効します | すべてのツール呼び出し、ログイン、同意、トークン発行、リフレッシュ、失効を記録し、エクスポートできます | 定義した対象に対する型付きアクション:http(Microsoft Graph を含む)、sql、ssh、winrm、code(Semble) |
「記載なし」とは、プロジェクトの README に説明がないことを意味します。日付付きの検証メモとリンク、および公式の stdio サーバーを選ぶほうがよい場合については、docs/comparison.md を参照してください。 |
クイックスタート
現在のバージョンは 0.1.0-rc.26(package.json。リリースには GitHub でタグが付けられます)です。Docker Engine と Compose プラグインがインストールされ、DNS 名がこの VM を指し、ポート 80 と 443 がインターネットから到達可能な VM で、次を実行します。
git clone https://github.com/adamrowles1996/vaultgate.git
cd vaultgate
cp .env.example .env
.env で VAULTGATE_DOMAIN、VAULTGATE_PUBLIC_URL、VAULTGATE_VERSION を設定し、次を実行します。
mkdir -p secrets
head -c 32 /dev/urandom | base64 > secrets/vaultgate_secret_key
touch secrets/bw_password secrets/bw_client_secret
chmod 0400 secrets/* && sudo chown 10001 secrets/*
docker compose up -d
docker compose logs -f vaultgate
初回起動時、ログに一度限りの /setup?token=… URL が出力されます。これを開き、メールアドレス、パスワード、認証アプリのコード(TOTP)を使ってオペレーターアカウントを作成します。このパスワードは vaultgate 独自のオペレーターログイン用であり、Bitwarden のマスターパスワードではありません。また、Bitwarden のマスターパスワードになることもありません。サインインして、Vault ページでボールトに接続します。サーバー、API キーのクライアント ID とシークレット、マスターパスワードを入力してください。vaultgate はこの接続情報を VAULTGATE_SECRET_KEY で暗号化して保存するため、再起動やアップグレード後も維持されます。その後、Claude(または Claude Code、Codex、MCP Inspector)に https://<host>/mcp をリモート MCP サーバーとして追加し、同意ページでスコープを承認します。vaultgate が使用する bw CLI はイメージにバンドルされ、install.sh によってインストールされるため、ホスト側でほかに必要なものはありません。手順については docs/guides/first-run.md、詳細とイメージの検証については docs/guides/install-docker-compose.md を参照してください。
エージェントが認証情報を読み取るのではなく使用できるようにするには、VAULTGATE_ENABLE_ACTIONS=true と、使用したい各コネクターのスイッチを設定して再起動し、コンソールの Connections ページで接続先(ターゲット)を追加します。詳しくは docs/guides/actions.md を参照してください。
仕組み
Claude / Codex ──HTTPS + Bearer──▶ vaultgate ──loopback──▶ bw serve ──▶ Bitwarden
▲ │ │
│ │ └──pinned──▶ your API, database, SSH or WinRM host
└── OAuth 2.1 ◀──────┘ (credential injected by vaultgate, result scrubbed)
(consent page, operator login with TOTP)
- エージェントが
/mcpを呼び出すと、WWW-Authenticateによる認証要求が返されます。 - 保護されたリソースのメタデータから認可サーバーを検出し、登録(Client ID Metadata Document、動的登録、または事前登録された ID)を行った後、同意ページに移動します。
- あなたがログイン(パスワード+TOTP)し、スコープを承認します。対象は
vault:read、vault:reveal、vault:generate、任意のvault:write、およびデプロイで有効にした各コネクターのactions:*スコープです。 actions:*スコープがある場合、エージェントは許可されたターゲットを一覧表示して呼び出します。ツールはhttp_request、sql_query、sql_execute、ssh_run、winrm_run、および Semble 接続用のcode_search、code_find_related、code_readです。vaultgate はボールトから認証情報を取得し、ターゲットで操作を実行して、機密情報を除去した結果を返します。認証情報がエージェントに渡ることはありません。- ボールトのスコープがある場合、アイテムの検索、メタデータの読み取り、秘密のフィールドを一度に 1 つずつ開示すること、パスワードの生成、さらに許可されていればアイテムの作成や更新ができます。
インストール
vaultgate の手前では常に TLS を終端する必要があります。以下のどの方法でも、ホストされたエージェントが到達できる公開 https:// オリジンを用意します。
| 方法 | ガイド |
|---|---|
| Caddy を使った Docker Compose(推奨) | docs/guides/install-docker-compose.md |
Debian または Ubuntu VM、install.sh | docs/guides/install-linux.md |
| 独自のリバースプロキシ(Caddy、nginx) | docs/guides/reverse-proxy.md |
リリースでは、linux/amd64 と linux/arm64 向けに ghcr.io/adamrowles1996/vaultgate:<version> を公開します。これは Sigstore cosign で署名され、SBOM と来歴証明書が付属します。また、スクリプトによるインストール用に vaultgate-<version>.tgz とその .sha256 も公開します。
ドキュメント
| ドキュメント | 内容 |
|---|---|
docs/guides/ | ユーザーガイド:初回実行、Claude、Claude Code、Codex、Inspector への接続、ツールとスコープ、セルフホスト可能な Bitwarden、バックアップ、アップグレード、セキュリティモデル、FAQ |
docs/spec/ | 規範的な仕様。項目ごとにファイルを分けています |
docs/PLAN.md | マイルストーン、完了基準、リスク |
docs/THREAT_MODEL.md | 資産、攻撃者、緩和策、残存リスク |
docs/comparison.md | vaultgate と他の Bitwarden MCP サーバーとの違い。日付付きの検証メモも記載しています |
docs/adoption.md | 各種一覧、チャネル、アプリストアの定義、およびそれぞれの申請手順 |
server.json | MCP Registry の掲載情報。公開方法については、docs/guides/publishing.md を参照してください |
docs/adr/ | アーキテクチャ決定記録 |
CONTRIBUTING.md | 開発ワークフローと品質ゲート |
SECURITY.md | 脆弱性の報告 |
開発
Node 26(.nvmrc を参照)と、固定バージョンの外部リンターを使用するための mise が必要です。
mise install # actionlint, shellcheck, shfmt, hadolint, gitleaks, editorconfig-checker
npm ci
npm run dev # runs src/main.ts directly with Node's type stripping
npm run quality # format, every linter, types, dead code, file sizes, provenance, tests at 100%
CI で実行されるすべてのチェックは、ローカルで npm run quality を実行しても実行できます。リポジトリで適用されるルールとその理由については、CONTRIBUTING.md を参照してください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。