Vulnify について
Vulnify MCP は、データの読み取り、書き込み、削除、エクスポート、送信前にポリシー判定を求める AI エージェント向けの、Vulnify の実行時認可 MCP サーバーです。記録しない事前チェックと監査記録を残す判定を区別し、REVIEW の処理は人に委ねます。
主な機能
- 01操作に対するポリシー判定の確認
- 02セキュリティ判定の記録と取得
- 03ポリシーの一覧表示とテスト
- 04強制ドライランによるポリシー変更計画
- 05MCP ツール呼び出しの判定評価
活用シーン
- 01エージェントによるデータ操作前の認可確認
- 02複数のケースを使ったポリシーテスト
- 03記録済み判定と人によるレビュー状況の追跡
- 04ツールを実行せずに MCP ツール呼び出しを判定
MCP 対応
ポリシー確認、判定の記録と取得を行うツールを MCP クライアントに提供します。ホスト型エンドポイントは OAuth 2.1 または API キーに対応し、ローカルプロセスでは API キーを使います。ツールの失敗は ALLOW ではなく MCP エラーとして返されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.vulnify.io/mcpclaude mcp add --transport http io-vulnify https://mcp.vulnify.io/mcp{"mcpServers":{"io-vulnify":{"type":"http","url":"https://mcp.vulnify.io/mcp"}}}Cursor で開く{"servers":{"io-vulnify":{"type":"http","url":"https://mcp.vulnify.io/mcp"}}}VS Code で開く{"mcpServers":{"io-vulnify":{"type":"http","url":"https://mcp.vulnify.io/mcp"}}}{"mcpServers":{"io-vulnify":{"serverUrl":"https://mcp.vulnify.io/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.vulnify.io/mcp認証が必要ツール
詳細
Vulnify MCP
AI エージェントがデータを読み取り、書き込み、削除、エクスポート、送信する前に、Vulnify に確認します。
finalDecision は正式な結果です。ALLOW、REVIEW、BLOCK のいずれかです。
Claude に接続 · ドキュメント · MCP · 変更履歴 · Node SDK
@vulnify/mcp は、AI エージェント向けのランタイム認可レイヤーである Vulnify の MCP サーバーです。エージェントが最初に確認します。このプロセスは https://api.vulnify.io へのプロキシとして動作します。イベントや API キーは保存しません。
https://mcp.vulnify.io/mcp で Vulnify にサインインします(OAuth 2.1)。このホスト型サーバーはステートレスな Streamable HTTP を使用します。ローカルで使用する場合は、VULNIFY_API_KEY を設定して npx -y @vulnify/mcp を実行します。
check_action はドライランです。PII スキャンを省略し、何も記録しません。decide_action は実際の判定を記録します。REVIEW は担当者の確認を待ちます。このサーバーでは承認も拒否もできません。
独自のプロセス内で判定するアプリケーションコードには、Node SDK(@vulnify/sdk)を使用します。このパッケージは SDK に依存しません。SDK は一部の通信障害をフェイルクローズの判定に変換します。このサーバーはそうした障害を MCP ツールエラーとして返すため、モデルが ALLOW として解釈することはありません。
クイックスタート
正確な情報は docs.vulnify.io/mcp を参照してください。同じ手順が docs/clients.md にも記載されています。
Vulnify にサインインする
https://mcp.vulnify.io/mcp に接続します。API キーと OAuth クライアントのフィールドは空欄のままにしてください。クライアントには HTTP 401 と次の内容が返されます。
WWW-Authenticate: Bearer realm="https://mcp.vulnify.io/mcp", resource_metadata="https://mcp.vulnify.io/.well-known/oauth-protected-resource/mcp", scope="decisions:read decisions:write policies:read policies:test"
本文は {"error":"unauthorized","message":"Sign in with Vulnify, or send an API key as Authorization: Bearer or X-Vulnify-Key:."} です。保護されたリソースのメタデータには、認可サーバー https://api.vulnify.io が記載されています。
組織を選択し、クライアントが要求するスコープを許可します。
| スコープ | ツール |
|---|---|
decisions:read | get_decision |
decisions:write | decide_action |
policies:read | list_policies |
policies:test | check_action, test_policies |
アクセスを許可すると、ホスト型サーバーでこれら5つのツールが利用できるようになります。plan_policy_changes と check_mcp_tool_call はこの一覧には含まれません。これらの利用には API キーが必要です。スコープが不足している場合は、そのスコープ名を示すツールエラーが返されます。このエラーは ALLOW ではありません。Settings > Connected apps から接続を取り消してください:app.vulnify.io/settings/connected-apps。
Claude
Vulnify は Claude のコネクタディレクトリで利用できます:Claude に接続。一覧で「Connect」を選択し、Vulnify でサインインしてください。手順ガイド:Claude のアクションに対する人間の承認。
URL を使って追加するには、「Settings」>「Connectors」>「Add custom connector」を開きます。URL に https://mcp.vulnify.io/mcp を設定してください。API キーは貼り付けないでください。「Add Vulnify in Claude」を選ぶと、名前と URL が入力されたダイアログが開きます。その後、Claude が「Sign in with Vulnify」を開始します。
Cursor
Cursor にインストールすると、ホスト型サーバーが追加され、サインインが開始されます。
.cursor/mcp.json または ~/.cursor/mcp.json で同じサーバーを使う場合は、ヘッダーを付けずに URL を指定します:
{
"mcpServers": {
"vulnify": {
"url": "https://mcp.vulnify.io/mcp"
}
}
}
Grok
grok.com/connectors を開き、「New Connector」>「Custom」を選択します。名前に Vulnify を設定します。URL に https://mcp.vulnify.io/mcp を設定します。OAuth フィールドは空のままにしてください。Grok が「Sign in with Vulnify」を開始します。
Claude Code
claude mcp add --transport http vulnify https://mcp.vulnify.io/mcp
その後、Claude Code がサインインします。このコマンドに API キーを渡さないでください。
API キーまたはローカル npx
plan_policy_changes または check_mcp_tool_call が必要な場合、クライアントがブラウザーを開けない場合、またはキーに IP 許可リストが設定されている場合は、API キーを使用します。ローカルプロセスには Node.js 20 以降が必要で、VULNIFY_API_KEY を読み取ります。OAuth 同意ページは開きません。
npx -y @vulnify/mcp
VULNIFY_API_KEY=vln_live_... npx -y @vulnify/mcp
キーは vln_live_... または vln_test_... です。TEST キーではサンドボックスのイベントが保存されます。これらはメインのダッシュボードには表示されません。
ホスト型サーバーでは、どちらのヘッダーも引き続き使用できます。リクエストごとにキーを送信してください:
Authorization: Bearer <key>
X-Vulnify-Key: <key>
API キーを使ったセッションでは、7 つすべてのツールが一覧表示されます。
Cursor、ホスト型:
{
"mcpServers": {
"vulnify": {
"url": "https://mcp.vulnify.io/mcp",
"headers": {
"Authorization": "Bearer vln_live_..."
}
}
}
}
Cursor、ローカル:
{
"mcpServers": {
"vulnify": {
"command": "npx",
"args": ["-y", "@vulnify/mcp"],
"env": {
"VULNIFY_API_KEY": "vln_live_..."
}
}
}
}
ホスト型サーバーでは、X-Vulnify-Key を Authorization の代わりに使用できます。
API キーを使った Claude Code:
claude mcp add --transport http vulnify https://mcp.vulnify.io/mcp --header "Authorization: Bearer vln_test_your_key"
シェルの履歴にキーを直接書き込むより、環境変数を使用してください。サインインする場合は、ヘッダーなしの Claude Code コマンドを使用します。
Claude Desktop ではローカルプロセスを実行できます。macOS ではファイルは ~/Library/Application Support/Claude/claude_desktop_config.json です。Windows では %APPDATA%\Claude\claude_desktop_config.json です。保存後、アプリを再起動してください。
{
"mcpServers": {
"vulnify": {
"command": "npx",
"args": ["-y", "@vulnify/mcp"],
"env": {
"VULNIFY_API_KEY": "vln_live_..."
}
}
}
}
VS Code、.vscode/mcp.json、ホスト型:
{
"servers": {
"vulnify": {
"type": "http",
"url": "https://mcp.vulnify.io/mcp",
"headers": {
"Authorization": "Bearer ${input:vulnify-api-key}"
}
}
}
}
VS Code、ローカル:
{
"servers": {
"vulnify": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@vulnify/mcp"],
"env": {
"VULNIFY_API_KEY": "${input:vulnify-api-key}"
}
}
}
}
動作の仕組み
finalDecision フィールドが確定結果です。ツールエラーは ALLOW ではありません。
ツール
各ツールには、タイトルと readOnlyHint、destructiveHint、idempotentHint、openWorldHint があります。ヒントは、クライアントがツールをどのように表示するかを示します。ツールの動作自体は変わりません。
| ツール | API | 記録するか | readOnlyHint | 備考 |
|---|---|---|---|---|
check_action | POST /v1/policies/test(1 件) | いいえ | true | PII スキャンを省略し、何も記録しません。イベント ID はありません。 |
decide_action | POST /v1/events | はい | false | セキュリティイベントと監査記録を書き込みます。finalDecision が正式な結果です。 |
get_decision | GET /v1/events/{id} | いいえ | true | 判定を読み取ります。オプションの wait は、REVIEW が ALLOW または BLOCK になるまでポーリングします(最大 30 秒)。 |
list_policies | GET /v1/policies | いいえ | true | コードとして管理されたポリシーを名前順に並べます。 |
test_policies | POST /v1/policies/test | いいえ | true | 最大 200 件のケースに対応します。PII スキャンを省略します。提案された policies は保存されません。 |
plan_policy_changes | POST /v1/policies/apply | いいえ | true | dryRun は強制的に true に設定されます。組織全体に有効な LIVE キーが必要です。 |
check_mcp_tool_call | POST /v1/gateway/mcp | はい | false | ツール名をアクションに対応付け、判定を記録します。ツールは実行しません。 |
すべてのツールで destructiveHint は false です。各呼び出しは呼び出し元自身の Vulnify 組織内で完結するため、すべてのツールで openWorldHint は false です。読み取り専用ツールでは idempotentHint は true で、decide_action と check_mcp_tool_call では false です。idempotencyKey を指定すると、記録済みの判定を再試行した際に同じイベントが返されます。
ポリシーの一覧取得、テスト、計画の呼び出しは、キーごとに 1 分あたり 60 リクエストに制限されています。バッチのドライランには test_policies を使用してください。POST /v1/events には別の制限があります。OpenAPI の説明には、制限を超過したことのみが記載されています。
安全性
このサーバーでは、レビューを変更したりポリシーを保存したりできません。
- 承認ツールも拒否ツールもありません。Vulnify で
REVIEWを解決するのは人間です。 - 適用ツールはありません。
plan_policy_changesはすべてのリクエストでdryRun: trueを指定してPOST /v1/policies/applyを呼び出します。ツールの入力にdryRunフィールドはありません。サーバーは最後にdryRunを設定するため、呼び出し元がドライランを無効にすることはできません。ツールは差分を返します。 POST /v1/gateway/httpはツールではありません。ALLOWの場合、その API エンドポイントは HTTP 呼び出しを転送します。このサーバーは転送しません。
plan_policy_changes には、組織全体に有効な LIVE キーが必要です。TEST キーまたはエージェントに紐付けられたキーでは 403 が返されます。OAuth セッションでは plan_policy_changes と check_mcp_tool_call は一覧に表示されません。
OAuth スコープ
ユーザーログインはホスト型 HTTP サーバーを使用します。ローカルの stdio プロセスでは、引き続き API キーを使用します。ホスト型サーバーはツールをスコープに対応付けます。
| ツール | スコープ | OAuth ルート |
|---|---|---|
check_action | policies:test | POST /v1/mcp/policies/test |
test_policies | policies:test | POST /v1/mcp/policies/test |
decide_action | decisions:write | POST /v1/mcp/events |
get_decision | decisions:read | GET /v1/mcp/events/{id} |
list_policies | policies:read | GET /v1/mcp/policies |
plan_policy_changes | API キーおよび stdio のみ | OAuth の tools/list から除外 |
check_mcp_tool_call | API キーおよび stdio のみ | OAuth の tools/list から除外 |
スコープが不足しているトークンでは、そのスコープ名を示すツールエラーが返されます。このエラーは ALLOW ではありません。有効なイントロスペクション結果は最大 60 秒間再利用され、exp を過ぎて再利用されることはありません。
MCP ゲートウェイとの違い
https://mcp.vulnify.io/mcp(およびローカルの stdio プロセス)は、MCP クライアントが接続するサーバーです。クライアントはその後、上記のツールを呼び出します。
check_mcp_tool_call はこれとは異なります。1 件のツール呼び出しを api.vulnify.io の POST /v1/gateway/mcp に送信して判定を記録し、そこで終了します。ツールは実行されません。また、クライアントがこのサーバーに接続しても、そのゲートウェイは呼び出されません。
IP 許可リスト
API キーには、許可する送信元 IP を登録できます。そのキーを使用して https://mcp.vulnify.io/mcp 経由で呼び出す場合、送信元は Cursor や VS Code が実行されているマシンではなく、ホストされたサーバーの外向き IP アドレスになります。オフィスやノートパソコンのアドレスだけを含む許可リストでは、ホストされたサーバーからのアクセスが拒否されます。許可リストに登録されたアドレスを持つホストで npx -y @vulnify/mcp を使用してください。Vulnify でサインインする場合、この API キーは送信されません。
製品
スクリーンショットはデモ用ワークスペースのものです。エージェントは SupportBot です。
Vulnify アプリの監査エクスポートは、SHA-256 チェックサムを含む JSON または CSV のダウンロードです。SIEM エクスポートは JSON または CEF 形式の行です。
設定
| 変数 | 場所 | 必須 | 用途 |
|---|---|---|---|
VULNIFY_API_KEY | stdio プロセス | はい | API キー(vln_live_... または vln_test_...)。HTTP ではこの変数にフォールバックしません。 |
VULNIFY_BASE_URL | 両方 | いいえ | API のベース URL。デフォルトは https://api.vulnify.io です。 |
OAUTH_INTROSPECTION_SECRET | HTTP | ユーザーログインの場合は必須 | POST /oauth/introspect 用のベアラーシークレットです。サーバー上に保持されます。API キーの使用には必要ありません。 |
OPENAI_APPS_CHALLENGE | HTTP | いいえ | 設定すると、GET /.well-known/openai-apps-challenge はこの値を text/plain として返します。未設定の場合、このパスは 404 になります。 |
PORT | HTTP | いいえ | リッスンポート。デフォルトは 8080 です。 |
HOST | HTTP | いいえ | バインドアドレス。デフォルトは 0.0.0.0 です。 |
記録された判断を特定のエージェントに紐づける場合は、エージェントに紐づいた LIVE キーを使用してください。plan_policy_changes には 組織全体用の LIVE キーが必要です。
VULNIFY_TEST_API_KEY は npm run test:live 専用です。サーバーはこの変数を読み取りません。
HTTP サーバー
npx -y @vulnify/mcp --http
コンテナは、非 root ユーザーとして HTTP サーバーを実行します。
docker build -t vulnify-mcp .
docker run --rm -p 8080:8080 -e PORT=8080 vulnify-mcp
コンテナの起動に API キーは必要ありません。リクエストごとにキーを送信してください。
curl -sS localhost:8080/health
curl -sS -o /dev/null -w '%{http_code}\n' -X POST localhost:8080/mcp \
-H 'content-type: application/json' -d '{}'
ヘルスチェックは JSON を出力します。キーなしの POST は 401 を出力します。
GET /.well-known/mcp/server-card.json にキーは必要ありません。サーバーが登録するツール(名前、説明、入力スキーマ)の一覧、OAuth でサインインするか、ヘッダーに Vulnify API キーを指定できること、ドキュメントとこのリポジトリへのリンクが記載されています。
curl -sS https://mcp.vulnify.io/.well-known/mcp/server-card.json
エラー
ツールの失敗は MCP ツールエラー(isError)になります。API キーは含まれません。
| ステータス | 意味 |
|---|---|
| 401 | API キーまたはアクセストークンが見つからない、無効、取り消し済み、または期限切れです。 |
| 403 | キーが別のエージェントに紐づいている、呼び出し元の IP が許可リストに登録されていない、アクセストークンに必要なスコープがない、または組織全体用の LIVE キーなしで plan_policy_changes が呼び出されました。 |
| 413 | JSON ボディが API の上限である 200 KB を超えています。 |
| 429 | キーがレート制限されています。ポリシー関連の呼び出しは 1 分あたり 60 回までです。記録された判断を再試行する場合は、同じ idempotencyKey を使用してください。 |
セキュリティ
脆弱性は [email protected] に報告してください。開示ポリシーは vulnify.io/disclosure に記載されています。SECURITY.md をご覧ください。
キーはログに記録されません。リクエストログに記録されるのは、メソッド、パス、ステータスです。機密データのスキャン用に送信された content は API に転送され、このサーバーのログには書き込まれません。API はそのテキストをメモリ上でスキャンし、保存しません。
このパッケージはシェルを実行せず、フックも登録しません。ツールの引数やコミット済みの設定ファイルにキーを記載しないでください。
このプロセスが使用するネットワークエンドポイント:
- すべてのツール呼び出し、および API キーの確認時の
GET /v1/policiesには、https://api.vulnify.io(またはVULNIFY_BASE_URL)を使用します。API キーは/v1/*にAuthorization: Bearerとして送信されます。ユーザーアクセストークンは/v1/mcp/*にAuthorization: Bearerとして送信されます。 vln_oat_...トークンの検証には、同じオリジン上のPOST /oauth/introspectを使用し、Authorization: BearerにOAUTH_INTROSPECTION_SECRETを設定します。このシークレットはクライアントに送信されず、ログにも記録されません。https://mcp.vulnify.io/mcpはホスト型の HTTP トランスポートです。サーバープロセスはこの URL を呼び出しません。
開発
npm install
npm test
npm run lint
npm run build
npm run test:live は、VULNIFY_TEST_API_KEY が設定されている場合に https://api.vulnify.io の list_policies を呼び出し、設定されていない場合はスキップします。イベントは記録されません。
公開については RELEASING.md に記載されています。
ライセンス
MIT。Copyright 2026 Vulnify。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。