mcpField
V
Vulnify

Vulnify

リモート
docs.vulnify.ioセキュリティ25 日前に更新
リポジトリ公式サイト

Vulnify について

Vulnify MCP は、データの読み取り、書き込み、削除、エクスポート、送信前にポリシー判定を求める AI エージェント向けの、Vulnify の実行時認可 MCP サーバーです。記録しない事前チェックと監査記録を残す判定を区別し、REVIEW の処理は人に委ねます。

主な機能

  1. 01操作に対するポリシー判定の確認
  2. 02セキュリティ判定の記録と取得
  3. 03ポリシーの一覧表示とテスト
  4. 04強制ドライランによるポリシー変更計画
  5. 05MCP ツール呼び出しの判定評価

活用シーン

  1. 01エージェントによるデータ操作前の認可確認
  2. 02複数のケースを使ったポリシーテスト
  3. 03記録済み判定と人によるレビュー状況の追跡
  4. 04ツールを実行せずに MCP ツール呼び出しを判定

MCP 対応

ポリシー確認、判定の記録と取得を行うツールを MCP クライアントに提供します。ホスト型エンドポイントは OAuth 2.1 または API キーに対応し、ローカルプロセスでは API キーを使います。ツールの失敗は ALLOW ではなく MCP エラーとして返されます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.vulnify.io/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://mcp.vulnify.io/mcp認証が必要
パッケージ
npm@vulnify/mcp0.1.4

ツール

詳細

Vulnify

Vulnify MCP

AI エージェントがデータを読み取り、書き込み、削除、エクスポート、送信する前に、Vulnify に確認します。
finalDecision は正式な結果です。ALLOW、REVIEW、BLOCK のいずれかです。

npm version npm downloads license CI

Claude に接続  ·  ドキュメント  ·  MCP  ·  変更履歴  ·  Node SDK

すべてのエージェントのアクションに判定が返されます。ALLOW、REVIEW、BLOCK のいずれかです。

@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:readget_decision
decisions:writedecide_action
policies:readlist_policies
policies:testcheck_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}"
      }
    }
  }
}

動作の仕組み

エージェントのアクションは Vulnify に送られます。finalDecision は ALLOW(アクションを実行できます)、REVIEW(人が判断します)、または BLOCK(アクションは実行されません)です。

finalDecision フィールドが確定結果です。ツールエラーは ALLOW ではありません。

ツール

各ツールには、タイトルと readOnlyHint、destructiveHint、idempotentHint、openWorldHint があります。ヒントは、クライアントがツールをどのように表示するかを示します。ツールの動作自体は変わりません。

ツールAPI記録するかreadOnlyHint備考
check_actionPOST /v1/policies/test(1 件)いいえtruePII スキャンを省略し、何も記録しません。イベント ID はありません。
decide_actionPOST /v1/eventsはいfalseセキュリティイベントと監査記録を書き込みます。finalDecision が正式な結果です。
get_decisionGET /v1/events/{id}いいえtrue判定を読み取ります。オプションの wait は、REVIEW が ALLOW または BLOCK になるまでポーリングします(最大 30 秒)。
list_policiesGET /v1/policiesいいえtrueコードとして管理されたポリシーを名前順に並べます。
test_policiesPOST /v1/policies/testいいえtrue最大 200 件のケースに対応します。PII スキャンを省略します。提案された policies は保存されません。
plan_policy_changesPOST /v1/policies/applyいいえtruedryRun は強制的に true に設定されます。組織全体に有効な LIVE キーが必要です。
check_mcp_tool_callPOST /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_actionpolicies:testPOST /v1/mcp/policies/test
test_policiespolicies:testPOST /v1/mcp/policies/test
decide_actiondecisions:writePOST /v1/mcp/events
get_decisiondecisions:readGET /v1/mcp/events/{id}
list_policiespolicies:readGET /v1/mcp/policies
plan_policy_changesAPI キーおよび stdio のみOAuth の tools/list から除外
check_mcp_tool_callAPI キーおよび 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 です。

許可された読み取り:SupportBot、1件のレコード、内部宛て、低リスク。

Vulnify アプリの監査エクスポートは、SHA-256 チェックサムを含む JSON または CSV のダウンロードです。SIEM エクスポートは JSON または CEF 形式の行です。

設定

変数場所必須用途
VULNIFY_API_KEYstdio プロセスはいAPI キー(vln_live_... または vln_test_...)。HTTP ではこの変数にフォールバックしません。
VULNIFY_BASE_URL両方いいえAPI のベース URL。デフォルトは https://api.vulnify.io です。
OAUTH_INTROSPECTION_SECRETHTTPユーザーログインの場合は必須POST /oauth/introspect 用のベアラーシークレットです。サーバー上に保持されます。API キーの使用には必要ありません。
OPENAI_APPS_CHALLENGEHTTPいいえ設定すると、GET /.well-known/openai-apps-challenge はこの値を text/plain として返します。未設定の場合、このパスは 404 になります。
PORTHTTPいいえリッスンポート。デフォルトは 8080 です。
HOSTHTTPいいえバインドアドレス。デフォルトは 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 キーは含まれません。

ステータス意味
401API キーまたはアクセストークンが見つからない、無効、取り消し済み、または期限切れです。
403キーが別のエージェントに紐づいている、呼び出し元の IP が許可リストに登録されていない、アクセストークンに必要なスコープがない、または組織全体用の LIVE キーなしで plan_policy_changes が呼び出されました。
413JSON ボディが 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。

コメント

MCP は初めてですか?

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

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