Vaulted MCP Server — Encrypted Secret Sharing for AI Agents について
Vaulted MCP Serverは、AIエージェントによる暗号化済みの期限付きシークレットの作成と取得を可能にします。環境変数、ファイル、dotenvのキーをローカルで読み取り、値をLLMのコンテキストに含めません。
主な機能
- 01使い捨てシークレットリンクの作成
- 02環境変数、ファイル、dotenv入力のローカル解決
- 03AES-256-GCM暗号化
- 04ブラウザー、クリップボード、ファイルへのシークレット出力
- 05状態とローカル履歴の追跡
活用シーン
- 01値をエージェントに見せず環境変数を共有
- 02会話履歴に残さず復号したシークレットを渡す
- 03共有シークレットの閲覧状況を確認
MCP 対応
create_secret、view_secret、check_status、list_secretsの4つのMCPツールを提供します。stdioで通信し、MCP対応クライアントに設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| content | string | はい | 暗号化して共有するシークレットの内容。最大 1000 文字。 |
| max_views | enum | いいえ | シークレットが自動消去されるまでに閲覧できる回数の上限です。デフォルトは 1 です。1 | 3 | 5 | 10 |
| expiry | enum | いいえ | シークレットが期限切れになるまでの時間です。デフォルトは 24h です。1h | 2h | 6h | 12h | 24h | 3d | 7d | 14d | 30d |
| passphrase | string | いいえ | 追加保護のための任意のパスフレーズです。シークレットを閲覧するには、受信者がこのパスフレーズを入力する必要があります。 |
詳細
@vaulted/mcp-server
Claude Desktop、Cursor、Windsurf、およびMCP互換のAIツールから、暗号化された自己破棄型シークレットを直接共有できます。
- 🔒 ゼロ知識のE2E暗号化(AES-256-GCM、鍵がサーバーに送信されることはありません)
- 🙈 エージェントに値を見せずに共有:環境変数、ファイル、
.envキーをコンテキストに露出させずに共有できます - 🛠️ 4つのツール:
create_secret、view_secret、check_status、list_secrets - 📋 ステータスをリアルタイムで追跡できるローカル履歴
- 💻 Claude Desktop、Cursor、Windsurf、Claude Code、VS Codeで動作します
エージェントに値を見せないシークレット共有
最大の特長は、機密情報の値がローカルで解決され、LLMに渡されないことです。エージェントに環境変数やファイルの共有を依頼すると、MCP サーバーがマシンから直接値を読み取ります。エージェントに表示されるのはセキュアなリンクのみで、シークレット自体は表示されません。
"Share the value of my STRIPE_SECRET_KEY env var"
→ Agent passes: env:STRIPE_SECRET_KEY (never sees the value)
→ Server resolves it locally, encrypts, returns the link
つまり、機密情報の値が会話履歴やLLMのコンテキストに現れることはありません。
インストール
Node.js ≥ 18が必要です。
npxでインストールせずに実行する場合:
npx -y @vaulted/mcp-server
または、グローバルにインストールします:
npm install -g @vaulted/mcp-server
vaulted-mcp-server
クイックスタート
MCPホストの設定に追加し、アプリケーションを再起動してください。エージェントはすぐにVaultedの4つのツールをすべて利用できるようになります。
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
設定
Claude Desktop
ファイル:~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
Cursor
ファイル:~/.cursor/mcp.json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
Windsurf
ファイル:~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
Claude Code
プロジェクトのルートにある.mcp.json(またはグローバル設定の~/.claude/.mcp.json):
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
VS Code
ファイル:.vscode/mcp.json
{
"servers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
その他のMCPクライアント
npx @vaulted/mcp-serverをstdioトランスポートとして実行します。サーバーは標準のMCP stdioプロトコルを使用します。
オプションのフラグ
| フラグ | デフォルト | 説明 |
|---|---|---|
--base-url | https://vaulted.fyi | Vaulted APIのベースURL(セルフホスト可能なインスタンス向け) |
--allowed-dirs | (none) | ファイルベースの入力ソースからアクセスできるディレクトリをカンマ区切りで指定します(CWDに追加) |
フラグはargs配列で渡します:
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server", "--base-url", "https://your-instance.example.com"]
}
}
}
複数の許可ディレクトリを指定する場合:
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server", "--allowed-dirs", "/home/user/secrets,/tmp/creds"]
}
}
}
ツールのリファレンス
create_secret
シークレットを暗号化して保存し、共有可能な自動消去リンクを返します。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
content | string | required | 暗号化するシークレット(最大 1000 文字)。エージェントに内容を見せない入力プレフィックスに対応しています。 |
max_views | "1" | "3" | "5" | "10" | "1" | 自動消去までの閲覧回数 |
expiry | "1h" | "2h" | "6h" | "12h" | "24h" | "3d" | "7d" | "14d" | "30d" | "24h" | 有効期限までの時間 |
passphrase | string | (none) | 任意のパスフレーズ保護 |
label | string | (none) | ローカルの履歴に表示する、人が読めるラベル |
戻り値: { success: true, data: { url, statusUrl, expiresIn, maxViews, passphraseProtected }, message }
view_secret
Vaulted URL からシークレットを取得して復号します。デフォルトではブラウザーで開きます。復号した値を会話に含めないようにするには、output_modeを使用してください。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
url | string | (one req.) | #フラグメントを含む Vaulted URL 全体 |
secret_id | string | (one req.) | シークレット ID(urlの代わりに指定) |
encryption_key | string | (with secret_id) | URL フラグメント内の暗号化キー(secret_idと併せて指定必須) |
output_mode | "browser" | "clipboard" | "file" | "direct" | "browser" | 復号した値の送信先 |
file_path | string | (none) | output_modeが"file"の場合に必須 |
passphrase | string | (none) | パスフレーズで保護されたシークレットに必須 |
出力モード:
browser— デフォルトのブラウザーでシークレット URL を開きます(ブラウザー内で復号されるため、値はエージェントのコンテキストに入りません)clipboard— 復号した値をクリップボードにコピーします。エージェントには何も返されませんfile— 復号した値をfile_pathに書き込みます。エージェントには何も返されませんdirect— 応答で復号した値を返します(値がエージェントのコンテキストに入るため、慎重に使用してください)
戻り値: output_modeによって異なります。ブラウザー/クリップボード/ファイルの各モードでは、平文を返さずに成功を通知します。
check_status
シークレットが閲覧された回数と、まだ有効かどうかを確認します。閲覧回数は消費しません。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
url | string | (one req.) | ステータス URL(例:https://vaulted.fyi/s/<id>/status?token=...) |
secret_id | string | (one req.) | シークレット ID(url の代わりに指定) |
status_token | string | (with id) | シークレット作成時に発行されたステータストークン(secret_id と併せて指定する必要があります) |
previousViews | number | (none) | 前回確認時の閲覧回数を渡すと、前回の確認以降に新たな閲覧があったかどうかを検出できます。回数が増加すると、レスポンスに「新しい閲覧が検出されました!」と表示されます。 |
戻り値: { success: true, data: { views, maxViews, status, expiresAt }, message }
list_secrets
ローカルで追跡しているすべてのシークレットを、API から取得した最新のステータスとともに表示します。
| パラメーター | 型 | 説明 |
|---|---|---|
| (none) | — | パラメーターはありません |
戻り値: { success: true, data: { entries: [...], suggestedAction? }, message }
未消費で有効なシークレットがある場合は suggestedAction が含まれ、監視のために check_status を使用するよう促します。
レスポンス形式
すべてのツールで一貫したレスポンス形式を使用します。
// Success
{ "success": true, "data": { /* tool-specific */ }, "message": "Human-readable summary" }
// Error
{ "success": false, "error": { "code": "SECRET_EXPIRED", "message": "...", "suggestion": "..." } }
エラーコード: SECRET_EXPIRED、SECRET_CONSUMED、PASSPHRASE_REQUIRED、ENV_VAR_NOT_FOUND、FILE_NOT_FOUND、PATH_TRAVERSAL_BLOCKED、DOTENV_KEY_NOT_FOUND、API_UNREACHABLE、API_ERROR、ENCRYPTION_FAILED、FILE_WRITE_ERROR、INVALID_INPUT
例
シークレットを作成する
"Share this API key securely: sk-abc123"
→ チャットに一度だけ使用できるリンクが返されます。Slack、メール、またはチケットで共有してください。
エージェントに内容を見せずに環境変数を共有する
"Share the value of my GITHUB_TOKEN env var securely"
→ エージェントは env:GITHUB_TOKEN をツールに渡します。サーバーが値をローカルで読み取るため、エージェントがトークンを目にすることはありません。
エージェントに内容を見せずにファイルを共有する
"Share the contents of ~/.ssh/id_rsa.pub securely"
→ エージェントは file:~/.ssh/id_rsa.pub を渡します。ファイルはローカルで読み取られ、リンクが返される前に暗号化されます。
エージェントに内容を見せずに .env ファイルからキーを共有する
"Share the DATABASE_URL from my .env.local"
→ エージェントは dotenv:.env.local:DATABASE_URL を渡します。指定されたキーだけが解析され、暗号化されます。ファイル内のその他の値が読み取られることはありません。
ブラウザーでシークレットを表示する
"Open this secret: https://vaulted.fyi/s/abc123#key..."
→ ブラウザーが復号された内容を開きます。値が会話に含まれることはありません。
シークレットをクリップボードに表示する
"Retrieve this secret to my clipboard: https://vaulted.fyi/s/abc123#key..."
→ 復号された値がクリップボードにコピーされます。チャットに機密情報が返されることはありません。
シークレットをファイルに保存する
"Save this secret to /tmp/creds.txt: https://vaulted.fyi/s/abc123#key..."
→ 復号された値が /tmp/creds.txt に書き込まれます。チャットに機密情報が返されることはありません。
シークレットを直接表示する(値をエージェントに返す)
"Retrieve this secret and return the value to me: https://vaulted.fyi/s/abc123#key..."
→ 復号された値がレスポンスで返されます。会話内で値が必要な場合に限り使用してください。チャット履歴に表示されます。
シークレットが閲覧されたかどうかを確認する
"Has my secret been viewed yet?"
→ 閲覧回数、最大閲覧回数、有効期限を返します。閲覧回数は消費しません。
新しい閲覧をポーリングする
"Let me know when someone views my secret — previous view count was 0"
→ previousViews: 0 を渡します。回数が増加すると、レスポンスに「新しい閲覧が検出されました!」と表示されます。
最近のシークレットを一覧表示する
"What secrets have I shared recently?"
→ API から取得した最新のステータスとともに、ローカル履歴を返します。各シークレットの閲覧回数、残りの閲覧回数、有効期限を確認できます。
エージェントに見えない入力ソース
create_secret の content パラメーターでは、暗号化の前にサーバーが値をローカルで解決するよう指示するプレフィックスを使用できます。解決された値がエージェントに返されることはありません。
| プレフィックス | 例 | 解決される値 |
|---|---|---|
| (なし) | the plain value | リテラル文字列 |
env: | env:STRIPE_SECRET_KEY | process.env.STRIPE_SECRET_KEY |
file: | file:/home/user/.ssh/id_rsa | 指定されたパスにあるファイルの内容 |
dotenv: | dotenv:.env.local:DATABASE_URL | .env.local 内の DATABASE_URL の値 |
パスのセキュリティ: ファイルと dotenv のパスは、process.cwd() および設定した --allowed-dirs に対して検証されます。許可されたディレクトリの外を指すシンボリックリンクは、PATH_TRAVERSAL_BLOCKED で拒否されます。
シークレットをコンテキストに含めない出力モード: view_secret では browser、clipboard、または file の出力モードを使用してください。復号された値は、エージェントの応答や会話履歴に入ることなく、あなたに直接届けられます。
セキュリティモデル
- エンドツーエンド暗号化: @vaulted/crypto を使って、AES-256-GCM 暗号化をローカルで実行します。サーバーが平文を見ることはありません。
- URL フラグメント内の鍵: 暗号化鍵は URL の
#フラグメント内にのみ存在し、サーバーに送信されたり、ログに記録されたりすることはありません。 - ゼロ知識サーバー: vaulted.fyi は暗号文のみを保存します。シークレットを復号することはできません。
- 自動消去: 閲覧回数の上限に達したとき、または TTL の有効期限が切れたときの、いずれか早い方でシークレットが削除されます。
- アカウント不要、テレメトリーなし: 匿名で利用できます。API キーは不要です。
- 設計上、エージェントには見えません: 入力ソースのプレフィックス(
env:、file:、dotenv:)により、機密性の高い値が LLM を経由することはありません。
詳しくは vaulted.fyi/security をご覧ください。
貢献
git clone https://github.com/vaulted-fyi/vaulted-mcp-server
cd vaulted-mcp-server
npm install
npm test
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。