mcpField
V
Vaulted MCP Server — Encrypted Secret Sharing for AI Agents

Vaulted MCP Server — Encrypted Secret Sharing for AI Agents

ローカル
github.com/vaulted-fyiAI・エージェント14 日前に更新

Vaulted MCP Server — Encrypted Secret Sharing for AI Agents について

Vaulted MCP Serverは、AIエージェントによる暗号化済みの期限付きシークレットの作成と取得を可能にします。環境変数、ファイル、dotenvのキーをローカルで読み取り、値をLLMのコンテキストに含めません。

主な機能

  1. 01使い捨てシークレットリンクの作成
  2. 02環境変数、ファイル、dotenv入力のローカル解決
  3. 03AES-256-GCM暗号化
  4. 04ブラウザー、クリップボード、ファイルへのシークレット出力
  5. 05状態とローカル履歴の追跡

活用シーン

  1. 01値をエージェントに見せず環境変数を共有
  2. 02会話履歴に残さず復号したシークレットを渡す
  3. 03共有シークレットの閲覧状況を確認

MCP 対応

create_secret、view_secret、check_status、list_secretsの4つのMCPツールを提供します。stdioで通信し、MCP対応クライアントに設定できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": [
"-y",
"@vaulted/mcp-server"
]
}
}
}
起動コマンドnpx -y @vaulted/mcp-server

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@vaulted/mcp-server

ツール

3

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
contentstringはい暗号化して共有するシークレットの内容。最大 1000 文字。
max_viewsenumいいえシークレットが自動消去されるまでに閲覧できる回数の上限です。デフォルトは 1 です。1 | 3 | 5 | 10
expiryenumいいえシークレットが期限切れになるまでの時間です。デフォルトは 24h です。1h | 2h | 6h | 12h | 24h | 3d | 7d | 14d | 30d
passphrasestringいいえ追加保護のための任意のパスフレーズです。シークレットを閲覧するには、受信者がこのパスフレーズを入力する必要があります。

詳細

@vaulted/mcp-server

npm version license

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-urlhttps://vaulted.fyiVaulted 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

シークレットを暗号化して保存し、共有可能な自動消去リンクを返します。

パラメーター型デフォルト説明
contentstringrequired暗号化するシークレット(最大 1000 文字)。エージェントに内容を見せない入力プレフィックスに対応しています。
max_views"1" | "3" | "5" | "10""1"自動消去までの閲覧回数
expiry"1h" | "2h" | "6h" | "12h" | "24h" | "3d" | "7d" | "14d" | "30d""24h"有効期限までの時間
passphrasestring(none)任意のパスフレーズ保護
labelstring(none)ローカルの履歴に表示する、人が読めるラベル

戻り値: { success: true, data: { url, statusUrl, expiresIn, maxViews, passphraseProtected }, message }


view_secret

Vaulted URL からシークレットを取得して復号します。デフォルトではブラウザーで開きます。復号した値を会話に含めないようにするには、output_modeを使用してください。

パラメーター型デフォルト説明
urlstring(one req.)#フラグメントを含む Vaulted URL 全体
secret_idstring(one req.)シークレット ID(urlの代わりに指定)
encryption_keystring(with secret_id)URL フラグメント内の暗号化キー(secret_idと併せて指定必須)
output_mode"browser" | "clipboard" | "file" | "direct""browser"復号した値の送信先
file_pathstring(none)output_modeが"file"の場合に必須
passphrasestring(none)パスフレーズで保護されたシークレットに必須

出力モード:

  • browser — デフォルトのブラウザーでシークレット URL を開きます(ブラウザー内で復号されるため、値はエージェントのコンテキストに入りません)
  • clipboard — 復号した値をクリップボードにコピーします。エージェントには何も返されません
  • file — 復号した値をfile_pathに書き込みます。エージェントには何も返されません
  • direct — 応答で復号した値を返します(値がエージェントのコンテキストに入るため、慎重に使用してください)

戻り値: output_modeによって異なります。ブラウザー/クリップボード/ファイルの各モードでは、平文を返さずに成功を通知します。


check_status

シークレットが閲覧された回数と、まだ有効かどうかを確認します。閲覧回数は消費しません。

パラメーター型デフォルト説明
urlstring(one req.)ステータス URL(例:https://vaulted.fyi/s/<id>/status?token=...)
secret_idstring(one req.)シークレット ID(url の代わりに指定)
status_tokenstring(with id)シークレット作成時に発行されたステータストークン(secret_id と併せて指定する必要があります)
previousViewsnumber(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_KEYprocess.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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。