Wundervault MCP について
Wundervault MCPは、秘密情報の平文をエージェントのコンテキストに渡さずに、AIエージェントからVaultを操作できるようにします。ローカルデーモンが復号した秘密情報をサブプロセスに注入し、出力を除去して返します。
主な機能
- 01値を含めずVault項目を一覧表示
- 02秘密情報をコマンド環境に注入
- 03許可された設定ファイルに秘密情報を書き込み
- 04Vaultの鍵でSSHコマンドとrsyncを実行
- 05アクセス階層と人による承認
活用シーン
- 01Vault内の認証情報でデプロイを実行
- 02認証情報をプロジェクト設定に書き込み
- 03SSH経由でリモートホスト上のコマンドを実行
- 04Vault内のSSH鍵でディレクトリを同期
MCP 対応
stdio MCPサーバーは、Vaultの一覧、取得、注入、実行、転送ツールをMCPクライアントに提供します。ローカルデーモンが秘密情報を復号して受け渡し、平文はエージェントに返しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @wundervault/mcp-serverWUNDERVAULT_AGENT_NAMEThe agent's name, as added in your vault and enrolled on this computer with wundervault-agent --enrol.WUNDERVAULT_AGENT_TOKENシークレットOptional. Overrides the token that wundervault-agent --enrol saved for this agent.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
1掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
@wundervault/mcp-server
AI エージェントのためのゼロ知識シークレット保管庫です。 エージェントとのチャットや .env ファイルに貼り付けた API キーは、すべてコンテキストウィンドウ、トランスクリプト、プロバイダーログに残ります。Wundervault の解決策は、エージェントにシークレットを一切渡さないことです。エージェントは「キーを注入してこのデプロイを実行して」のように、作業を依頼します。するとローカルデーモンがシークレットを復号し、サブプロセスの環境に注入して、バッファをゼロ化し、エージェントに出力が渡る前にその内容を消去します。
このリポジトリは、あらゆる Model Context Protocol クライアント(Claude Code、Cursor、Cline など)にこのワークフローを提供する MCP サーバーです。
主張を鵜呑みにせず、テストしてください。 ゼロ知識の特性は、ご自身のネットワーク境界で約 5 分あれば独立して検証できます(ブラウザーの DevTools または mitmproxy のカナリアテストを利用)。ガイドと当方のテストトランスクリプトはこちらです:wundervault.com/verify。
仕組み
┌──────────────┐ MCP (stdio) ┌───────────────────┐ ciphertext only ┌───────────────────┐
│ AI agent │──────────────▶│ wundervault-mcp │◀─────────────────▶│ wundervault.com │
│ (Claude, …) │◀──────────────│ + local daemon │ │ stores encrypted │
└──────────────┘ "burned" ack │ decrypts HERE │ │ blobs, no keys │
└─────────┬─────────┘ └───────────────────┘
│ secret → subprocess env
│ (buffer zeroed after spawn)
▼
┌───────────────────┐
│ your command │ stdout/stderr scrubbed
│ (deploy, API, …) │ before the agent sees it
└───────────────────┘
シークレットはアップロード前にクライアント側で Web Crypto を介して AES-256-GCM で暗号化されます。ホスト型サービスに保存されるのは暗号文のみで、鍵、パスフレーズ、平文を導き出すことはできません。
インストール
npm install -g @wundervault/mcp-server
クイックスタート
{
"mcpServers": {
"wundervault": {
"command": "wundervault-mcp",
"env": {
"WUNDERVAULT_AGENT_NAME": "<agent-name>"
}
}
}
}
キーが MCP 設定に記載されることはありません。サーバーはエージェント名を指定し、そのエージェントの認証情報をローカルの wundervault-agent デーモンに Unix ソケット経由で要求します。
onboard.py はエージェントを登録し、デーモンを起動します。
新規アカウントを作成しますか?wundervault.com では、この設定を生成する 90 秒のエージェントオンボーディングフローを利用できます。
対応プラットフォーム
検証済みのプラットフォームは Linux です。 macOS ではシークレットを受け渡せますが、Windows は対応していません。
受け渡しは設計上 POSIX 専用です。sudo のレシピでは /bin/sh を介してパイプ処理し、git/ssh-passphrase のレシピでは mkfifo と setsid が必要です。Windows では、これらの仕組みは深い箇所で失敗するのではなく、明確な「未対応」エラーを返します。
単一インスタンスロックには 2 つの実装があります。Linux ではカーネルが保持する抽象ソケットを使用し、それ以外ではループバックポートを使用します。テストでカバーされているのは Linux の実装のみです。macOS で未検証の内容とその理由については、HANDOFF-lock-on-non-linux.md を参照してください。CI では両方のプラットフォームで実行しますが、ロックのテストスイートは Linux で実行します。
セキュリティモデル
- ゼロ知識: 暗号化キーは MCP サーバーのプロセス内にのみ存在します。Wundervault サーバーがキーを参照することはありません。
- 読み取り後に消去: 平文のシークレットが呼び出し元のエージェントに返されることはありません。復号後、エージェントに返されるのは
"Secret retrieved and burned."のみです。 - 実行時の出力消去: コマンドの stdout/stderr は、返される前に平文を含まないよう消去されます。シェルのエスケープパターン(
$()、バッククォート、sh -c、eval)およびシークレットをファイルにリダイレクトする処理は、復号前に拒否されます。 - ディレクティブの完全性: サーバー側のディレクティブ署名(PBKDF2-HMAC-SHA256、600k 回の反復)は、シークレットを解放する前に検証されます。
- タイミングセーフ: HMAC の比較には
crypto.timingSafeEqualを使用します。 - 階層型アクセス: エントリごとのアクセス階層はサーバー側で適用されます。高階層のシークレットをエージェントが使用するには、事前に人間の承認が必要です。
誠実にお伝えする制限事項
- このプラットフォームはオープンコアです。この MCP サーバーとブラウザー暗号化ライブラリは AGPL-3.0 で公開されているため、秘密情報に触れるすべての部分を監査できますが、ホスト型サービス自体はオープンソースではありません。
- エージェントのそばでローカルデーモンを実行する必要があります。完全なエアギャップ環境には対応していません。
- 設計上、エージェントが秘密情報の値を読み取ることは決してできません。ワークフローでモデルに秘密情報そのものについて推論させる必要がある場合、この設計は適していません。
ツール
vault_entries_list
このエージェントが利用できるすべての保管庫エントリを一覧表示します。エントリ ID と秘密情報の名前を返します。値は返しません。
Input: {}
Output: "Vault entries (N):\n [entry_id] secret_name (tier: read)"
vault_entry_get
保管庫の秘密情報を取得して復号します。任意で、その秘密情報を使ってコマンドを実行できます。
Input:
entry_id: string # from vault_entries_list
purpose: string # audit log reason
exec?: string # optional shell command
Output: "Secret retrieved and burned." (plaintext NEVER returned)
セキュアな実行パターン(sudo の例):
sudo -S systemctl restart nginx <<< "$WUNDERVault_SECRET"
echo $WUNDERVault_SECRET | sudo -S は使用しないでください。プロセスログに秘密情報が露出します。
vault_exec
保管庫の秘密情報を環境変数として注入して、ローカルまたは SSH 経由のリモートホストでシェルコマンドを実行します。秘密情報はサブプロセスに注入され、起動直後にバッファーがゼロクリアされます。復号前にエスケープパターンは拒否されます。
Input:
purpose: string # audit log reason
command: string # full shell command (no escape patterns)
entry_id?: string # secret to inject (omit for SSH-key-only remote exec)
working_dir?: string
inject_as?: { env_key, pre_command?, post_command? } # override entry's exec_config
remote_host?: { host, user, ssh_key_entry_id? | ssh_key? }
remote_host.ssh_key_entry_id を指定すると、SSH キーは保管庫から取得され、ディスクに書き込まれることなく使用されます。
vault_entry_inject_env
エージェントを経由して平文が渡ることなく、保管庫の秘密情報を設定ファイル(~/.npmrc、~/.netrc、~/.docker/config.json、またはプロジェクトの .env)に直接書き込みます。
Input:
entry_id: string
purpose: string
file_path: string # allowed config file paths only
env_key: string # variable name to set
vault_rsync
SSH 経由で rsync を使用して、ローカルディレクトリをリモートホストに同期します。SSH キーは保管庫から取得されます(一時キーファイルは転送直後に削除されます)。
vault_entry_forget
ローカルの参照を破棄します。サーバー上では何もしません。
Input: { entry_id: string }
Output: "Reference [id] discarded from local context."
認証情報
MCP サーバーは独自のキーを保持せず、コマンドラインからキーを受け取ることもありません。最初のツール呼び出し時に、次のように認証情報を解決します。
WUNDERVAULT_AGENT_NAME(必須)で、このプロセスがどの登録済みエージェントであるかを指定します。- エージェントトークンは
WUNDERVAULT_AGENT_TOKENから読み取られるか、~/.wundervault/agents/<name>.tokenから読み取られます。 - トークンは
~/.wundervault/agents/<name>.sock経由でローカルデーモンに提示され、デーモンから API キー、暗号化キー、保管庫の URL が返されます。
デーモンが実行されていない場合、より安全性の低い情報源にフォールバックせず、ツール呼び出しは手順を示すメッセージとともに失敗します。onboard.py を実行してエージェントを登録し、デーモンを起動してください。
CLI オプション
wundervault-mcp [options]
--url <url> API base URL override (default: supplied by the daemon)
--help Show help
--api-key、--enc-key、--credentials フラグはありません。不明なオプションは拒否されます。
エージェントのウォレット(x402)
x402 の支払いは単なる署名であり、ウォレットキーは他の秘密情報と同様、保管庫に保存できます。キーをtier 2に保存し、エージェントに vault_exec 経由で支払いペイロードに署名させると、キーはローカルの署名用サブプロセスに注入されます。モデルのコンテキストに入ることはなく、使用するたびに所有者の承認が必要です(エージェントによる拒否された呼び出しにはリクエスト ID が含まれます。承認はそのエージェントと秘密情報に限定され、1 回のみ、または 15 分/60 分間有効です)。Base Sepolia でエンドツーエンドの動作を確認済みです。検証済みの実行内容は wundervault.com/agent-wallets で公開されています。支払い固有のポリシー(支出上限、支払先の許可リスト)はまだ実装されていません。互換性はありますが、製品化はされていません。
サンドボックス/デモモード
WUNDERVAULT_MOCK=1 を設定すると、wundervault-agent デーモンや認証情報なしでサーバーを実行できます。このモードでは、すべてのツール呼び出しが保管庫に接続する代わりに、[DEMO MODE] と明記された代表的な応答を返します。実際の秘密情報が使われることは一切ありません。これは、アカウントなしでツールのインターフェースを試せるようにするため、また MCP ディレクトリのスキャナーや CI(例:Glama)がサーバーを起動して各ツールを実行し、実際の保管庫を使わずにビルドを検証できるようにするためのモードです。デフォルトでは無効であり、本番環境で有効になることはありません。
"env": { "WUNDERVAULT_MOCK": "1" } // demo/CI only — returns fake, labelled output
ソースからビルドする
git clone https://github.com/wundervault/wundervault-mcp.git
cd wundervault-mcp
npm install
npm run build # compiles TypeScript to dist/
npm test # run the test suite
最新情報
リリース情報、セキュリティに関するお知らせ、製品に関する投稿は、X の @wundervault1 で公開しています。リリース履歴の全文は、wundervault.com/changelogをご覧ください。
ライセンス
GNU Affero General Public License v3.0 or later(AGPL-3.0-or-later)のもとでライセンスされています。LICENSEをご覧ください。
Wundervault はオープンコアです。この MCP サーバーとクライアントはオープンソースで、wundervault.comのホステッドサービスは商用サービスです。商用利用やホスティングに関するお問い合わせは、wundervault.com/contactからご連絡ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。