AIエージェントとシークレットを安全に共有する方法
著者 Maxim Novak
Claudeにサーバーの設定を頼んだとき、パスワードはどこへ行くのだろう?
チャットに直接入力した場合 — 「データベースのパスワードはこちら:...」 — それは会話履歴に残る。モデルのコンテキストに入る。AIプロバイダーのサーバーに保存される可能性もある。一度だけ使うAPIキーであっても、その影響範囲は共有そのものより大きくなりかねない。
開発者はすでに、インフラのセットアップ、デプロイのデバッグ、認証情報のローテーションにAIアシスタントを活用している。欠けているのは安全な受け渡しレイヤーだ — シークレットをLLMのコンテキストから除外しながら、エージェントがそれを使って作業できる仕組みが必要だ。
それが Vaulted MCPサーバー の役割だ。
概要
Vaulted MCPサーバー(@vaulted/mcp-server)は、Model Context Protocol サーバーで、AIアシスタントに暗号化されたシークレットを扱う4つのツールを提供する:
| ツール | 機能 |
|---|---|
create_secret | シークレットを暗号化して保存し、共有可能なワンタイムリンクを返す |
view_secret | Vaulted URLからシークレットを取得して復号する |
check_status | シークレットの存在と残り閲覧回数を確認する(閲覧回数を消費しない) |
list_secrets | ローカルで追跡しているシークレットとその現在のステータスを表示する |
Claude Desktop、Cursor、Windsurf、およびすべての stdio MCP クライアントに対応している。インストールは設定ブロック1つだけだ。
エージェント・ブラインドという差別化要素
多くの開発者が予想しない機能がある:エージェントにシークレットの値を直接渡す必要はない。
Vaulted MCPはエージェント・ブラインド入力ソースに対応している。生の値を渡す代わりに、参照を渡す:
env:STRIPE_KEY— 環境変数から値を読み取るfile:/path/to/api-key.txt— ファイルから読み取るdotenv:.env.local:DATABASE_URL—.envファイルから特定のキーを読み取る
MCPサーバーはサーバーサイドで(ローカルの、ターミナルプロセス上で)参照を解決する。解決された値は即座に暗号化され、LLMのコンテキストには一切入らない。エージェントは認証情報を一度も見ることなくタスクを完了できる。
つまり、こう言う代わりに:
「Stripeキーを共有して:sk_live_abc123...」
こう言えばいい:
「STRIPE_KEYの環境変数を安全に共有して」
エージェントは env:STRIPE_KEY を create_secret に渡す。キーが会話に現れることはない。
これが「エージェント・ブラインド」の意味だ:シークレットがエージェントのコンテキストウィンドウを通過することなく、エージェントがワークフローを処理する。
ゼロ知識暗号化
基盤となる暗号化は、VaultedのWebアプリやCLIと同じ AES-256-GCM だ。暗号化キーはURLフラグメントにのみ存在し、Vaultedのサーバーには送信されない。受信者がリンクを開くと、ブラウザがローカルで復号する。
サーバーが保存するのは、それ自身では復号できない暗号文(ciphertext)だ。AIアシスタントは平文(plaintext)を見ない。Vaulted APIも平文を見ない。リンクを持つ人だけが内容を読める。
はじめ方
Claude Desktopの設定ファイル(~/Library/Application Support/Claude/claude_desktop_config.json)にVaultedを追加する:
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
同じ設定フォーマットは Cursor(~/.cursor/mcp.json)と Windsurf(~/.codeium/windsurf/mcp_config.json)でも使える。
AIクライアントを再起動すれば、4つのツールがすぐに使えるようになる。アカウント作成は不要だ。
実際の使用例
APIキーを直接共有する:
「これを安全に共有して:sk-abc123」
エージェントが値を指定して create_secret を呼び出す。Slack やメールで送れる Vaulted リンクが返ってくる。
環境変数から共有する:
「STRIPE_KEYの環境変数を安全に共有して」
エージェントが env:STRIPE_KEY を指定して create_secret を呼び出す。実際のキーの値が会話に現れることはない。
クリップボードに取得する:
「そのシークレットをクリップボードに取得して」
エージェントが出力モード clipboard を指定して view_secret を呼び出す。復号された値がターミナルに表示されることなくクリップボードに届く。
シークレットが閲覧されたか確認する:
「シークレットはもう閲覧されたかな?」
エージェントが check_status を呼び出す。閲覧回数を消費せずに残り回数を確認できる。
内部の仕組み
npx @vaulted/mcp-server を実行すると、MCP stdioトランスポートを話すローカルプロセスが起動する。AIクライアントは他のMCPサーバーと同じように接続する。
エージェント・ブラインドソースの場合、サーバーは暗号化の前にローカル環境(環境変数、ファイル、.env キー)から値を読み取る。値は暗号化されないままローカルプロセスの外に出ることはない。Webアプリを使った場合と同様に、暗号文(ciphertext)として Vaulted の API に送信される。
シークレットは自己破壊する:閲覧制限(1、3、5、または10回)と有効期限(1時間から30日)を設定できる。制限に達すると、暗号文はサーバーから削除される。
パターンはシンプルだ:設定ブロックを1つ追加するだけで、AIアシスタントは認証情報を一度も見ることなく、責任を持って扱えるようになる。