cisa-cybersecurity-mcp-server について
cisa-cybersecurity-mcp-serverは、CISAのKEV、ICSアドバイザリー、SSVC判断点、最新アラートをセキュリティチームに提供します。CVEの一括確認とBOD 26-04の修正期限算出に対応し、APIキーは不要です。
主な機能
- 01複数のCVEをKEVと一括照合
- 02ベンダー、製品、期限でKEVを検索
- 03SSVC判断点とBOD 26-04の期限を取得
- 04ICSセキュリティアドバイザリーの検索と閲覧
- 05CISAの最新アドバイザリーとアラートを取得
活用シーン
- 01スキャン結果のCVEをKEVカタログと照合
- 02ベンダーや製品の期限超過脆弱性を特定
- 03資産の公開状況に応じた修正期限を把握
- 04産業制御製品のアドバイザリーを検索
MCP 対応
STDIOとStreamable HTTPに対応し、MCP経由で7つのツールと2つのリソースを公開します。公開されているCISAデータソースを使用し、キーは不要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://cisa-cybersecurity.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-cisa-cybersecurity https://cisa-cybersecurity.caseyjhand.com/mcp{"mcpServers":{"cyanheads-cisa-cybersecurity":{"type":"http","url":"https://cisa-cybersecurity.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-cisa-cybersecurity":{"type":"http","url":"https://cisa-cybersecurity.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-cisa-cybersecurity":{"type":"http","url":"https://cisa-cybersecurity.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-cisa-cybersecurity":{"serverUrl":"https://cisa-cybersecurity.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
7| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| topic | enum | はい | 返す参照ブロック:directives(BOD 26-04 Table 1 とその定義)、kev_fields、ssvc_values、sectors、advisory_id_formats、severity_bands、sources(このサーバーが現在保持するデータ)。directives | kev_fields | ssvc_values | sectors | advisory_id_formats | severity_bands | sources |
詳細
@cyanheads/cisa-cybersecurity-mcp-server
MCP 経由で、BOD 26-04 の期限を含む CISA 既知の悪用された脆弱性、SSVC による優先順位付け、ICS アドバイザリーの全コーパス(CSAF)を利用できます。キー不要。STDIO または Streamable HTTP。
公開ホスト型サーバー: https://cisa-cybersecurity.caseyjhand.com/mcp
概要
CISA の脆弱性データを一か所に集約しています。既知の悪用された脆弱性カタログとその修復期限、CVE ごとの SSVC 判断ポイント、2010 年まで遡る ICS アドバイザリー、CISA の最新アラートを確認できます。スキャン対象の CVE をまとめて 1 回の呼び出しで KEV と照合したり、特定ベンダーの期限超過項目を見つけたり、BOD 26-04 の対応スケジュールを確認したりできます。API キーは不要です。
ツール
| ツール | 説明 |
|---|---|
cisa_list_reference | 入力で使用する語彙(BOD 26-04 のスケジュール、KEV フィールド、SSVC 値、セクター、ID 形式、重大度区分)を説明し、サーバーが保持するデータを報告します |
cisa_check_cve_status | 最大 200 個の CVE ID を 1 回の呼び出しで KEV と照合します。期限、期限超過状況、ランサムウェア関連およびフォレンジック・トリアージのフラグ、引用された指令を確認できます |
cisa_search_kev | ベンダー、製品、CWE、追加日、期限、期限超過状況、ランサムウェアとの関連、フォレンジック・トリアージのティア、指令で KEV を検索します |
cisa_get_ssvc | CVE ごとに CISA が公開する SSVC 判断ポイントを取得し、指定された資産の露出状況に基づいて BOD 26-04 のスケジュールを算出します |
cisa_search_ics_advisories | ベンダー、製品、CVE、CWE、KEV への登録状況、CVSS、重大度、セクター、シリーズ、日付、またはフリーテキストで ICS アドバイザリーを検索します |
cisa_get_advisory | 1 件の ICS アドバイザリーを確認します。影響を受ける製品バージョン、CVE ごとの CVSS と CWE、修復策、セクター、改訂履歴を参照できます |
cisa_get_alerts | CISA のアドバイザリー、アラート、または ICS アドバイザリーのフィードから最新項目を一覧表示します |
リソース
| リソース | 説明 |
|---|---|
cisa://kev/{cveId} | CVE ID による KEV カタログのエントリー 1 件 |
cisa://advisory/{advisoryId} | CSAF 2.0 からフラット化した ICS アドバイザリー 1 件 |
どちらのリソースも上記のツールで完全にカバーされているため、ツールのみを使うクライアントでも機能は失われません。
機能リファレンス
cisa_list_reference ツール
- 必須の
topicは 1 つです。指定できる値はdirectives、kev_fields、ssvc_values、sectors、advisory_id_formats、severity_bands、sourcesです。インプロセス状態のみを読み取るため、ほかのツールが失敗している場合でも応答できます。 directivesは、BOD 26-04 Table 1 の全 16 行を含むtimelineTable(remediationTimelineDaysとforensicTriageRequiredを含む)、definitions、supersedesを追加します。sourcesは、KEV のcatalogVersion、アドバイザリーインデックスのready/documentCount/syncStatus、SSVC キャッシュの TTL、キャッシュされたフィードの期間を報告します。
cisa_check_cve_status ツール
- 1 回の呼び出しで最大 200 件の
cveIdsを指定できます。キャッシュされた KEV スナップショットから応答し、上流へのリクエストは行いません。KEV に含まれない CVE はエラーではなく、inKev: falseとして返されます。 - CVE ごとに、
dateAdded、dueDate、daysUntilDue、overdue、requiredAction、knownRansomwareCampaignUse、forensicTriage、cwes[]、エントリーの注記に含まれるすべての URL をkindで型付けしたreferences[]、3 状態のdirective(BOD 26-04、BOD 22-01、またはnull)を返します。応答にはcatalogスナップショットと、期限の計算に使用したasOf日付も含まれます。 detail: "summary"を指定すると、KEV に含まれる各レコードをトリアージ用フィールド(日付、期限の状態、ディレクティブ、ベンダーと製品のラベル、ランサムウェアとフォレンジックトリアージのフラグ)に絞り込みます。これにより、200 件すべてを含むバッチでも簡潔に保てます。デフォルトはfullです。
cisa_search_kev ツール
- フィルターは AND 条件で組み合わされます。
vendorProjectとproduct(CPE 名ではなく CISA 独自のラベル)、nameContains、cwe、cveIdPrefix、dateAddedFrom/dateAddedTo、dueBefore/dueAfter、overdue、ransomware、forensicTriage、directive(BOD 26-04/BOD 22-01/none)を指定できます。1 ページあたり最大 100 件(デフォルトは 25 件)で、不透明なcursorを使用します。dateAdded(デフォルト)またはdueDateで並べ替えます。 totalCountとappliedFiltersを報告します。該当結果が 0 件の場合は、原因となったフィルターと、それを外した場合に何件の結果が得られるかを示します。nameContainsは大文字・小文字とアクセントを正規化したうえで a-z と 0-9 を検索し、除外したその他の文字があれば通知に記載します。- 型付きエラー:
catalog_unavailable(再試行可能)、invalid_date_range、empty_search_text
cisa_get_ssvc ツール
- 1 回の呼び出しで最大 50 件の
cveIdsを指定でき、それぞれについて最新の Vulnrichment を検索します。また、assetExposureはpublicly_exposed、not_publicly_exposed、unknown(デフォルト。両方の分岐を返します)から指定できます。 - CVE ごとに、CISA が公開している場合は
found、exploitation、automatable、technicalImpact、cvss、cwesを返し、bod2604.timelines[]にはtableRow、remediationTimelineDays、forensicTriageRequiredを含めます。KEV エントリーにはkevAssignedが追加され、露出状況が指定されている場合はassignmentAgreesも追加されます。 - エンリッチメントのない CVE は、
guidanceを含むfound: falseとして返されます。enrichment_source_unavailable(再試行可能)が発生するのは、すべての取得に失敗した場合のみです。
cisa_search_ics_advisories tool
- タイトル、ベンダー名、製品名を対象とする全文検索
qのほか、vendor、product(大文字と小文字を区別しない部分一致)、cve、cwe、inKev、cvssMin/cvssMax、severity、sector、series(ICSA/ICSMA)、publisher(coordinator/other)、publishedFrom/publishedTo、revisedFrom/revisedToで絞り込めます。revised(デフォルト)、published、maxCvss、relevance(qが必要)で並べ替えられます。1ページあたり最大50件(デフォルトは20件)で、不透明なcursorを使用します - 結果には
advisoryId、最大20件のcvesとcveCount、kevCves、severityDerivedを含むmaxCvss、sectors、url、csafUrl、attributionのほか、totalCountとappliedFiltersが含まれます。該当結果が0件の場合は、原因となったフィルターが示されます。KEV スナップショットが読み込まれていない場合、kevCvesは省略され、その旨が示されます - 型付きエラー:
mirror_not_ready、mirror_busy、catalog_unavailable(再試行可能)、mirror_unavailable、invalid_cvss_range、invalid_date_range、relevance_sort_without_query、empty_search_text
cisa_get_advisory tool
advisoryId(任意のリビジョンサフィックス)、任意のsections(advisory、summary、products、vulnerabilities、revisionHistory、references、acknowledgments)、脆弱性エントリーを選択するcves、および完全一致で大文字と小文字を区別する製品定義を選択するproductIdsを指定できます。cvesとproductIdsを指定すると、それぞれに対応するセクションも指定したことになりますkind: "full"を返します。sectionsを指定せずに読み込んだ結果が24,000バイトを超える場合は、セクションごとのバイト数と CVE ID を含むkind: "outline"を返します。その場合はsectionsを指定して再度呼び出してください- インデックスにない ID の場合、
found: falseとguidance、indexCheckpoint、indexLastSyncedAtを返します。ガイダンスには、勧告がインデックスより新しい可能性がある場合について記載されます - 型付きエラー:
mirror_not_ready、mirror_busy(再試行可能)、mirror_unavailable、unknown_section、unknown_cve、cves_need_vulnerabilities_section、unknown_product_id、product_ids_need_products_section
cisa_get_alerts tool
feed:advisories(デフォルト)、alerts、またはics。limitは最大30で、上流ウィンドウのサイズを指定します。since(YYYY-MM-DD)でそのウィンドウ内を絞り込めますが、ウィンドウより前の日付は指定できません- 各項目には
title、link、pubDate、summary(HTML タグを除去し、最大1,200文字に制限。切り詰められた場合はsummaryTruncatedで示されます)が含まれます。ICS の項目には、cisa_get_advisory用のadvisoryIdも含まれます。windowにはitemCount、oldest、newest、upstreamWindowSizeが含まれます - すべての応答に
fetchedAtとstaleが含まれます。更新に失敗した場合は、最後のウィンドウが古いデータとして返され、再試行方法が示されます。古いデータによる結果が空でも、何も公開されていない証拠にはなりません。キャッシュされたウィンドウがない場合は、feed_unavailable(再試行可能)が返されます
cisa://kev/{cveId} resource
- 1件の KEV レコードを
application/jsonとして返します。形状は、デフォルトのdetail: "full"を指定したcisa_check_cve_statusの結果と同じです。KEV に含まれない CVE は、見つからない場合のエラーになります - 一覧には追加日時が新しい順に30件が返されます。
cveIdはスナップショットから最大100件の候補を補完します
cisa://advisory/{advisoryId} resource
- フラット化された勧告1件を
application/jsonとして返します。cisa_get_advisoryと同じく、24,000バイトを超える場合は概要に切り替わります。このテンプレートではsections、cves、productIdsを指定できないため、概要が返された場合はツールを使用して詳細を取得してください - 一覧にはリビジョン日時が新しい順に30件の勧告が返されます。
advisoryIdはインデックスから最大100件の候補を補完します
特徴
@cyanheads/mcp-ts-core を基盤としています。stdio および Streamable HTTP トランスポート、切り替え可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを備えています。
CISA 固有の機能:
- アカウントやキーは不要で、4 つの公開ソースを利用できます。KEV JSON フィード、Vulnrichment、CSAF ICS アドバイザリーリポジトリ、CISA の RSS フィードです。
- いずれのソースも検索機能を提供していないため、フィルターはローカルで実行します。KEV はメモリ内スナップショットを定期的に取得して変更を確認し、ICS アドバイザリーは FTS5 を備えた SQLite インデックスを使用します。日付フィルターには、
YYYY-MM-DD形式の実際の暦日を指定します。 - 不正な KEV 更新は拒否され、最後に取得した有効なスナップショットが引き続き使用されます。有効なスナップショットがない場合、読み取り時に再試行可能な
catalog_unavailableが返されます。 - KEV、SSVC、アラートのツールは、アドバイザリーインデックスの初期化がバックグラウンドで行われている間も、最初のリクエストから利用できます。
- BOD 26-04 Table 1 はデータとして含まれているため、計算されるタイムラインは、公表済みの判断ポイントをテーブルで参照したものです。これはコンプライアンスの判定ではなく、CISA の KEV 期限と照合せず、別途報告されます。
エージェントに適した出力:
- すべてのレスポンスに出典情報を含めます。KEV の
catalogバージョンとasOf日付、検索の基となるインデックスのチェックポイント、すべてのアドバイザリーのurl、csafUrl、attributionが含まれます。 - 判別可能な出力を提供します。3 状態の
directive、型付きのreferences[].kind、found/inKevのブール値、上流データで公表されていない深刻度レベルを示すseverityDerived、復旧方法のヒントを含む型付きのエラー理由です。 - 検索結果が空の場合や上流データに欠落がある場合は、その理由を説明します。検索結果が 0 件の場合は該当するフィルターを示し、既知の欠落に該当するフィルター(セクター関連の注記は 2017 年以降のみ、CVSS v2 のみのアドバイザリー、KEV の改訂タイムスタンプなし)についても明記します。詳しくは既知の制限事項をご覧ください。
はじめに
公開ホストインスタンス
公開インスタンス(https://cisa-cybersecurity.caseyjhand.com/mcp)を利用できます。インストールは不要です。Streamable HTTP を介して、任意の MCP クライアントから接続できます。
{
"mcpServers": {
"cisa-cybersecurity-mcp-server": {
"type": "streamable-http",
"url": "https://cisa-cybersecurity.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
以下を MCP クライアントの設定ファイルに追加します。API キーは不要です。
{
"mcpServers": {
"cisa-cybersecurity-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/cisa-cybersecurity-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、npx を使用します(Bun は不要です)。
{
"mcpServers": {
"cisa-cybersecurity-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/cisa-cybersecurity-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、Docker を使用します。
{
"mcpServers": {
"cisa-cybersecurity-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-v", "cisa-mirror:/usr/src/app/.mirror",
"ghcr.io/cyanheads/cisa-cybersecurity-mcp-server:latest"
]
}
}
}
Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24 以降)。
- 認証情報は不要です。すべての上流ソースは、キー不要で公開されています。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/cisa-cybersecurity-mcp-server.git
- ディレクトリに移動します:
cd cisa-cybersecurity-mcp-server
- 依存関係をインストールします:
bun install
設定
すべての変数は任意です。どの変数も設定されていなくても、サーバーは正常に動作します。
| 変数 | 説明 | デフォルト |
|---|---|---|
CISA_KEV_REFRESH_CRON | KEV 更新ポーリングの Cron です。off にすると無効になります。 | */30 * * * * |
CISA_CSAF_MIRROR_PATH | ICS アドバイザリの SQLite インデックスへのパスです。 | <user cache dir>/cisa-cybersecurity-mcp-server/csaf.sqlite3 |
CISA_CSAF_MIRROR_AUTO_INIT | 初回実行時にバックグラウンドでインデックスを作成します。 | true |
CISA_CSAF_REFRESH_CRON | アドバイザリ更新の Cron です(起動時にも一度実行されます)。off にすると両方が無効になります。 | 17 */6 * * * |
CISA_VULNRICHMENT_CACHE_TTL_SECONDS | キャッシュされた SSVC レコードの TTL です。 | 21600 |
CISA_FEED_CACHE_TTL_SECONDS | 解析済み RSS フィード期間の TTL です。 | 900 |
CISA_HTTP_TIMEOUT_MS | すべての上流フェッチに対するリクエストごとのタイムアウト(ミリ秒)です。 | 30000 |
MCP_TRANSPORT_TYPE | トランスポートです。stdio または http を指定します。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモードです。stateless、stateful、または auto を指定します。 | stateless |
MCP_AUTH_MODE | 認証方式です。none、jwt、または oauth を指定します。 | none |
MCP_LOG_LEVEL | ログレベルです(debug、info、warning、error など)。 | info |
LOGS_DIR | ログファイルのディレクトリです(Node.js のみ)。 | <project-root>/logs |
STORAGE_PROVIDER_TYPE | SSVC キャッシュのストレージバックエンドです。in-memory、filesystem、または supabase を指定します。 | in-memory |
OTEL_ENABLED | OpenTelemetry を有効にします。 | false |
任意の上書き設定の全一覧は .env.example を参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
ICS アドバイザリインデックス
2 つの ICS ツールとアドバイザリリソースは、CISA_CSAF_MIRROR_PATH にある CSAF コーパスのローカル SQLite インデックスを読み込みます。デフォルトでは、ユーザーのキャッシュディレクトリが使用されます。初回実行時にサーバーがバックグラウンドでインデックスを構築します。準備が整うまでは、これらの機能は再試行可能な mirror_not_ready を返し、トピック sources を指定した cisa_list_reference で進捗を確認できます。パスを開けない場合、ICS 機能は再試行できない mirror_unavailable で失敗しますが、他のすべてのツールは引き続き動作します。
同じインデックスを共有するプロセスは、順番に同期を行います。コンテナ、CI、または個別にシードする場合(CISA_CSAF_MIRROR_AUTO_INIT=false にし、更新を手動で行うには CISA_CSAF_REFRESH_CRON=off にします)は、スクリプトを直接実行してください。
bun run mirror:init # full build, idempotent, safe to re-run after an interrupt
bun run mirror:refresh # requires a completed mirror:init; fetches changed documents only
bun run mirror:verify # readiness, sync status, checkpoint, count, content version, SQLite integrity; non-zero on failure
一時的な SQLite ロックが発生すると、再試行可能な mirror_busy が返されます。少し待ってから再試行してください。一部の更新後に処理が中断した場合、適用済みの行は引き続き読み取り可能で、失敗したドキュメントは次回に再試行されます。sources は syncStatus: partial と failedDocumentCount を報告し、mirror:refresh と mirror:verify はゼロ以外の終了コードを返します。
Docker
docker build -t cisa-cybersecurity-mcp-server .
docker run --rm -p 3010:3010 -v cisa-mirror:/usr/src/app/.mirror cisa-cybersecurity-mcp-server
Dockerfile のデフォルトは、HTTP トランスポート、ステートレスセッションモード、および /var/log/cisa-cybersecurity-mcp-server へのログ出力です。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。イメージでは CISA_CSAF_MIRROR_PATH=/usr/src/app/.mirror/csaf.sqlite3 が設定されています。コンテナを再作成してもアドバイザリインデックスを保持できるように、/usr/src/app/.mirror にボリュームをマウントしてください。イメージには mirror:* スクリプトが含まれているため、docker exec <container> bun run mirror:refresh を実行できます。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。4 つのサービスを接続し、更新ジョブをスケジュールして、サーフェスを登録します。 |
src/config | サーバー固有の環境変数を Zod で解析および検証します。 |
src/mcp-server/tools | ツール定義(*.tool.ts)です。 |
src/mcp-server/resources | リソース定義(*.resource.ts)です。 |
src/mcp-server/schemas | KEV ツールおよびリソースとアドバイザリツールおよびリソースで共有する出力スキーマとレンダラーです。 |
src/reference | 静的な参照データです。BOD 26-04 Table 1、標準セクター名、CVSS バンドが含まれます。 |
src/services/kev-catalog | KEV JSON フィードです。スナップショット、派生インデックス、条件付き更新を扱います。 |
src/services/vulnrichment | CVE ごとの SSVC エンリッチメント取得と TTL キャッシュです。 |
src/services/csaf-mirror | ICS アドバイザリインデックスです。スキーマ、取り込み、正規化、クエリを扱います。 |
src/services/cisa-feeds | 3 つの RSS フィードを解析し、TTL 付きでキャッシュします。 |
scripts/ | ビルド、チェック、mirror:* コマンドです。 |
tests/ | src/ に対応する単体テスト、統合テスト、ファズテスト、スモークテストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては CLAUDE.md/AGENTS.md を、実装済みの仕様については docs/design.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックに
try/catchは使用しないでください。 - リクエスト単位のログには
ctx.logを、テナント単位のストレージにはctx.stateを使用してください。 - 新しいツールとリソースは、
src/mcp-server/*/definitions/index.tsのバレル経由で登録してください。 - 外部ソースはラップしてください。生データを検証し、ドメイン型に正規化してから出力スキーマに従って返します。上流で省略されたフィールドを決して作り出さないでください。
貢献
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
ライセンスの対象はこのコードであり、提供されるデータではありません。KEV のエントリーは米国政府の著作物としてパブリックドメインで、Vulnrichment は CC0-1.0 ですが、CSAF リポジトリにはライセンスの記載がなく、多くのアドバイザリにはベンダーの文章が再掲載されています。そのため、再配布する前に各アドバイザリの url で再利用の権利を確認してください。このプロジェクトは CISA または Department of Homeland Security と提携しておらず、これらの組織から承認も受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。