インストール
コンテンツ詳細
インストール
{
"mcpServers": {
"cve-mcp": {
"command": "python",
"args": ["-m", "cve_mcp.server"],
"cwd": "/absolute/path/to/cve-mcp-server",
"env": {
"NVD_API_KEY": "your-key-here",
"GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx",
"ABUSEIPDB_KEY": "your-abuseipdb-key",
"GREYNOISE_API_KEY": "your-greynoise-key",
"SHODAN_KEY": "your-shodan-key"
}
}
}
}🛡️ CVE MCP Server
AIが拓くセキュリティインテリジェンス — 27のツール、21のデータソース、たった1つのプロトコル。
Claudeをフルスペクトラムのセキュリティアナリストに変える、プロダクション品質の Model Context Protocol (MCP) サーバー です。NVD、EPSS、CISA KEV、Shodan、VirusTotal、GreyNoise を渡り歩いて15以上のブラウザタブと格闘する代わりに、Claudeに1つ質問するだけで、数秒で関連づけられたインテリジェンスを取得できます。Python、FastMCP、httpx、aiosqlite、Pydantic v2、defusedxml で構築されています。
課題: 1つのCVEをトリアージするには、NVDでCVSSスコアを確認し、EPSSで悪用確率を調べ、CISA KEVで実際の悪用状況を確認し、GitHubでパッチを探し、VirusTotalでマルウェアの関連性を調べる — そしてそれらすべてを頭の中で関連づける必要があります。50件のCVEともなれば、丸1日が失われます。
解決策: CVE MCP Server は、21のAPIにまたがる27のセキュリティツールへの直接アクセスをClaudeに提供します。「CVE-2024-3400にパッチを当てるべきか?」と尋ねれば、Claudeが関連するすべてのソースに並列でクエリを実行し、複合リスクスコアを計算し、根拠を伴う優先順位付きの推奨事項を提示します。
🌍 GARS-2026 — グローバル・エージェンティックAI準備度調査
セキュリティ専門家、開発者、エンタープライズチームがエージェンティックAI(MCPサーバー、ツール呼び出し、ガバナンス、human-in-the-loopワークフロー)に対してどれだけ準備できているかを測定する、グローバルな学術研究を実施しています。
このリポジトリをご利用の方は、ご回答いただけると貴重なデータポイントになります。
📋 アンケートに回答する(10分): Survey
- 60問 · 匿名 · SRH Berlin監修
- casky.ai への早期アクセス用に 50 Casky Tokens を進呈
- 結果はCC-BY 4.0の下、オープンアクセスで公開
📑 目次
- アーキテクチャ
- ツールカタログ
- インストール
- APIキーのセットアップ
- 設定
- クイックスタート
- 使用例
- リスクスコアの解説
- データソース
- テストの実行
- アーキテクチャ詳解
- セキュリティとプライバシー
- トラブルシューティング
- ロードマップと既知の制限
- コントリビューション
- ライセンス
🏗️ アーキテクチャ
┌─────────────────────────────────────────────────────────────────────┐
│ Claude Desktop / Claude Code │
│ (MCP Client via stdio) │
└──────────────────────────────┬──────────────────────────────────────┘
│ Model Context Protocol (stdio)
▼
┌─────────────────────────────────────────────────────────────────────┐
│ CVE MCP Server (Python) │
│ ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ 27 MCP │ │ Composite │ │ SQLite Cache │ │
│ │ Tools │ │ Risk Engine │ │ + Audit Log │ │
│ └──────┬──────┘ └──────┬───────┘ └───────┬───────┘ │
│ │ │ │ │
│ ┌──────┴────────────────┴───────────────────┴──────┐ │
│ │ Async HTTP Client (httpx) │ │
│ │ Rate Limiter · Response Cache │ │
│ └──────────────────────┬───────────────────────────┘ │
└─────────────────────────┼───────────────────────────────────────────┘
│ HTTPS (outbound only)
┌───────────────┼───────────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ VULNERABILITY│ │ NETWORK │ │ THREAT │
│ INTELLIGENCE │ │ INTELLIGENCE │ │ INTELLIGENCE │
├──────────────┤ ├──────────────┤ ├──────────────┤
│ NVD API 2.0 │ │ AbuseIPDB │ │ VirusTotal │
│ EPSS / FIRST │ │ GreyNoise v3 │ │ MalwareBazaar│
│ CISA KEV │ │ Shodan │ │ ThreatFox │
│ OSV.dev │ │ CIRCL PDNS │ │ Ransomwhere │
│ GitHub GHSA │ │ │ │ AlienVault │
│ MITRE ATT&CK │ │ │ │ URLScan.io │
└──────────────┘ └──────────────┘ └──────────────┘
すべての通信は 送信方向のHTTPSのみ — インバウンドポートは一切開きません。APIキーは環境変数から読み込まれ、ログに記録されることはありません。プライベート/内部IPアドレスは、すべてのルックアップツールでブロックされます。
🔍 ツールカタログ(27ツール)
コア脆弱性インテリジェンス(8ツール)
| ツール | 説明 | 必要なAPIキー | 使用例 |
|---|---|---|---|
lookup_cve |
NVDからCVSSスコア、CWE、影響製品、参照情報、タイムラインを含む詳細なCVEレコードを取得 | 無料/キー不要(キー推奨) | lookup_cve("CVE-2024-3400") |
search_cves |
キーワード、製品名、深刻度、日付範囲でNVDを検索 | 無料/キー不要(キー推奨) | search_cves(keyword="Apache Log4j", severity="CRITICAL") |
get_epss_score |
1つ以上のCVEのEPSS悪用確率(0〜1)とパーセンタイルを取得 | 無料/キー不要 | get_epss_score("CVE-2024-3400") |
check_kev_status |
CVEがCISAの既知の悪用された脆弱性カタログに含まれるか確認 | 無料/キー不要 | check_kev_status("CVE-2021-44228") |
get_cvss_details |
CVSS v3.1ベクター文字列を各指標ごとに解析・解説 | 無料/キー不要 | get_cvss_details("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H") |
get_cwe_info |
組み込みデータベースからCWE IDでCommon Weakness Enumerationの詳細を検索 | 無料/キー不要 | get_cwe_info("CWE-79") |
get_cve_references |
CVEの全参照リンク(パッチ、アドバイザリ、エクスプロイト)を抽出・分類 | 無料/キー不要(キー推奨) | get_cve_references("CVE-2023-44487") |
bulk_cve_lookup |
最大20件のCVEを1回の呼び出しで並列エンリッチメント付きバッチ取得 | 無料/キー不要(キー推奨) | bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"]) |
エクスプロイト&攻撃インテリジェンス(4ツール)
| ツール | 説明 | 必要なAPIキー | 使用例 |
|---|---|---|---|
search_exploits |
公開された概念実証エクスプロイトとエクスプロイトコードリポジトリをGitHubで検索 | GITHUB_TOKEN(オプション) |
search_exploits("CVE-2024-3400") |
get_mitre_techniques |
CVEまたはCWEを関連するMITRE ATT&CKの技術、戦術、緩和策にマッピング | 無料/キー不要 | get_mitre_techniques("CVE-2021-44228") |
check_poc_availability |
複数ソースにまたがりCVEの既知の概念実証コードの存在を判定 | GITHUB_TOKEN(オプション) |
check_poc_availability("CVE-2024-3400") |
get_attack_patterns |
CWEまたはCVEに関連するCAPEC攻撃パターンの詳細を取得 | 無料/キー不要 | get_attack_patterns("CWE-89") |
フェーズ3:高度なリスク評価とレポーティング(4ツール)
| ツール | 説明 | 必要なAPIキー | 使用例 |
|---|---|---|---|
calculate_risk_score |
CVSS、EPSS、KEVステータス、PoCの可用性を用いて0〜100の複合リスクスコアを計算 | 無料/キー不要(キー推奨) | calculate_risk_score("CVE-2024-3400") |
generate_risk_report |
1つ以上のCVEに対する推奨事項付きの整形された経営層向けセキュリティレポートを生成 | 無料/キー不要(キー推奨) | generate_risk_report(["CVE-2024-3400", "CVE-2023-44487"]) |
prioritize_cves |
複合リスクスコアでCVEリストをランク付けし、トリアージの優先順位を決定 | 無料/キー不要(キー推奨) | prioritize_cves(["CVE-2024-3400", "CVE-2023-4966", "CVE-2023-44487"]) |
get_trending_cves |
高いEPSSスコアと最近のKEV追加に基づくトレンドCVEを取得 | 無料/キー不要 | get_trending_cves(days=7, min_epss=0.5) |
ネットワークインテリジェンス(4ツール)
| ツール | 説明 | 必要なAPIキー | 使用例 |
|---|---|---|---|
lookup_ip_reputation |
AbuseIPDB経由でIPアドレスの悪用履歴と信頼度スコアを確認 | ABUSEIPDB_API_KEY |
lookup_ip_reputation("185.220.101.34") |
check_ip_noise |
GreyNoiseにIPのスキャン/攻撃活動、分類、関連CVEを問い合わせ | GREYNOISE_API_KEY |
check_ip_noise("185.220.101.34") |
shodan_host_lookup |
Shodan経由でIPのオープンポート、サービス、バナー、脆弱性を取得 | SHODAN_API_KEY |
shodan_host_lookup("8.8.8.8") |
passive_dns_lookup |
CIRCL Passive DNSからドメインの過去のDNS解決データを取得 | CIRCL_PDNS_USER + CIRCL_PDNS_PASSWORD |
passive_dns_lookup("example.com") |
脅威インテリジェンス(4ツール)
| ツール | 説明 | 必要なAPIキー | 使用例 |
|---|---|---|---|
virustotal_lookup |
ファイルハッシュ、URL、ドメイン、IPを70以上のアンチウイルスエンジンで分析 | VIRUSTOTAL_API_KEY |
virustotal_lookup(hash="44d88612fea8a8f36de82e1278abb02f") |
search_malware |
ハッシュ、タグ、シグネチャでMalwareBazaarからマルウェアサンプルを検索 | ABUSECH_AUTH_KEY(オプション) |
search_malware(tag="Emotet") |
search_iocs |
マルウェアファミリに関連する侵害指標(IOC)をThreatFoxに問い合わせ | ABUSECH_AUTH_KEY(オプション) |
search_iocs(malware="CobaltStrike") |
check_ransomware |
Ransomwhereからランサムウェアの支払いアドレスとトランザクションデータを検索 | 無料/キー不要 | check_ransomware(address="bc1q...") |
DevSecOps(3ツール)
| ツール | 説明 | 必要なAPIキー | 使用例 |
|---|---|---|---|
scan_dependencies |
パッケージ名とバージョンをOSV.devに対してスキャンし既知の脆弱性を検出 | 無料/キー不要 | scan_dependencies(ecosystem="PyPI", packages={"requests": "2.28.0"}) |
scan_github_advisories |
エコシステム、パッケージ、深刻度でGitHub Security Advisoriesを検索 | GITHUB_TOKEN(オプション) |
scan_github_advisories(ecosystem="pip", package="django") |
urlscan_check |
URLScan.ioにURLをスキャン提出、または過去のスキャン結果を取得 | URLSCAN_API_KEY |
urlscan_check("https://suspicious-site.com") |
📦 インストール
前提条件
- Python 3.10+(3.11または3.12を推奨)
- pip または uv パッケージマネージャ
- リポジトリをクローンするための Git
- 環境変数にアクセスできるターミナル
ステップバイステップのセットアップ
# 1. Clone the repository
git clone https://github.com/mukul975/cve-mcp-server.git
cd cve-mcp-server
# 2. Create and activate a virtual environment
python -m venv venv
# macOS / Linux:
source venv/bin/activate
# Windows (PowerShell):
.\venv\Scripts\Activate.ps1
# Windows (CMD):
venv\Scripts\activate.bat
# 3. Install dependencies
pip install -e .
# 4. Copy and configure environment variables
cp .env.example .env
# Edit .env with your API keys (see API Keys Setup section below)
# 5. Verify the server starts
python -m cve_mcp.server
uvを使う(より高速な代替手段)
git clone https://github.com/mukul975/cve-mcp-server.git
cd cve-mcp-server
uv venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
uv pip install -e .
cp .env.example .env
テスト依存関係を含める場合
pip install -e ".[test]"
🔑 APIキーのセットアップ
APIキーは優先度別に整理されています — まず Tier 1 のキーを取得して無料ツールで最大のカバレッジを確保し、必要に応じてTier 2、Tier 3を段階的に追加してください。
Tier 1:高優先度(無料、即時アクセス、最大カバレッジ)
| 環境変数 | 有効になる機能 | 取得方法 | 無料枠の制限 | 必須? |
|---|---|---|---|---|
NVD_API_KEY |
NVD参照が10倍高速化(50 req/30s vs 5) | nvd.nist.govで申請 | 30秒あたり50リクエスト | オプション(ただし強く推奨) |
GITHUB_TOKEN |
GitHubアドバイザリ検索+エクスプロイトPoC検索 | github.com/settings/tokensでPAT作成 | 1時間あたり5,000リクエスト | オプション(未設定時は60/hr) |
Tier 2:推奨(無料アカウント、大きな価値)
| 環境変数 | 有効になる機能 | 取得方法 | 無料枠の制限 | 必須? |
|---|---|---|---|---|
ABUSEIPDB_KEY |
IPレピュテーション検索 | abuseipdb.comで登録 | 1日あたり1,000チェック | IPツールには必須 |
VIRUSTOTAL_KEY |
ファイル/URL/ドメイン/IPのマルウェアスキャン | virustotal.comでサインアップ | 1日500ルックアップ、毎分4回 | VTツールには必須 |
GREYNOISE_API_KEY |
IPノイズ/スキャン活動インテリジェンス | viz.greynoise.ioでサインアップ | 週50クエリ(コミュニティ) | GreyNoiseツールには必須 |
SHODAN_KEY |
ホスト/ポート/サービス偵察 | account.shodan.ioで登録 | 基本ホスト検索(無料枠) | Shodanツールには必須 |
Tier 3:オプション(拡張インテリジェンス)
| 環境変数 | 有効になる機能 | 取得方法 | 無料枠の制限 | 必須? |
|---|---|---|---|---|
URLSCAN_KEY |
URLスキャンとウェブサイト分析 | urlscan.ioでサインアップ | 1日5,000パブリックスキャン | オプション |
CIRCL_PDNS_USER |
CIRCL Passive DNS検索 | circl.luでアクセス申請 | パートナーアクセスのみ | オプション |
CIRCL_PDNS_PASS |
CIRCL Passive DNS認証 | CIRCL登録時に発行 | パートナーアクセスのみ | オプション |
⚡ キーなしでも開始可能: 8つのツールはAPIキーなしで動作します — EPSS、CISA KEV、OSV.dev、MITRE ATT&CK、CWE検索、CVSS解析、Ransomwhere、NVD(低レート)。サーバーはすぐに使い始められ、キーは段階的に追加できます。
⚙️ 設定
環境変数(.env.example)
# NVD API key — free at https://nvd.nist.gov/developers/request-an-api-key
# Without key: 5 req/30s | With key: 50 req/30s
NVD_API_KEY=
# GitHub token — increases rate limit from 60/hr to 5000/hr (no scopes needed)
GITHUB_TOKEN=
# Threat intelligence keys (all optional — tools degrade gracefully without them)
ABUSEIPDB_KEY= # https://www.abuseipdb.com/account/api
VIRUSTOTAL_KEY= # https://www.virustotal.com/gui/join-us
URLSCAN_KEY= # https://urlscan.io/user/signup
SHODAN_KEY= # https://account.shodan.io/register
# GreyNoise — uses /v3/ip/{ip} endpoint (NOT the deprecated /v3/community)
GREYNOISE_API_KEY= # https://viz.greynoise.io/signup
# CIRCL Passive DNS — requires partner registration
CIRCL_PDNS_USER=
CIRCL_PDNS_PASS=
# Optional overrides
CACHE_DB_PATH= # defaults to ~/.cve-mcp/cache.db
AUDIT_LOG_PATH= # defaults to ~/.cve-mcp/audit.log
REQUEST_TIMEOUT=30 # HTTP timeout in seconds
MAX_RETRIES=3 # retries on transient errors
Claude Desktopの設定
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"cve-mcp": {
"command": "python",
"args": ["-m", "cve_mcp.server"],
"cwd": "/absolute/path/to/cve-mcp-server",
"env": {
"NVD_API_KEY": "your-key-here",
"GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx",
"ABUSEIPDB_KEY": "your-abuseipdb-key",
"GREYNOISE_API_KEY": "your-greynoise-key",
"SHODAN_KEY": "your-shodan-key"
}
}
}
}
⚠️ 重要: 常に 絶対パス を使用してください。設定変更後はClaude Desktopを完全に終了(Cmd+Q / Alt+F4)してください — リロードでは不十分です。
Claude Codeの設定
# Basic setup
claude mcp add cve-mcp -- python -m cve_mcp.server
# With environment variables (repeat -e for each key)
claude mcp add cve-mcp -e NVD_API_KEY=your_key -e VULNCHECK_TOKEN=your_token -- python -m cve_mcp.server
# Or just run from the project directory — python-dotenv auto-loads .env on startup
# Verify it's connected
claude mcp list
🚀 クイックスタート
ステップ1:インストール(2分)
git clone https://github.com/mukul975/cve-mcp-server.git
cd cve-mcp-server
python -m venv venv && source venv/bin/activate
pip install -e .
ステップ2:まず無料ツールでテスト
.env ファイルは不要です。Claude DesktopまたはClaude Codeにサーバーを追加して、次を試してください:
「CVE-2021-44228とは何か?実際に悪用されているか?」
Claudeは lookup_cve(NVD)、get_epss_score(EPSS)、check_kev(CISA KEV)を使用します — すべて無料、キー不要です。
「これらのPythonパッケージの脆弱性をスキャンして:requests 2.28.0、flask 2.2.0、django 3.2.0」
ステップ3:最初のキーを追加して10倍のパフォーマンスを実現
echo 'NVD_API_KEY=your-key-here' > .env
nvd.nist.gov で無料のNVDキーを申請 — メールで即時発行、レート制限が 30秒あたり5回から50回 に向上します。
ステップ4:フルパワーモード
Tier 1とTier 2のキーを追加したら:
「CVE-2024-3400のリスクスコアを計算し、即座にパッチを当てるべきか教えてください。」
💬 使用例
シナリオ1:「Log4Shellにすぐパッチを当てるべきか?」
あなた: CVE-2021-44228(Log4Shell)に即時パッチが必要か分析してください。リスクスコアと推奨事項を教えてください。
Claudeは裏側で複数のツールをオーケストレーションします:
→ lookup_cve("CVE-2021-44228")
CVSS 3.1: 10.0 (CRITICAL) | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
→ get_epss_score("CVE-2021-44228")
EPSS: 0.97531 (97.5%) | Percentile: 99.99%
→ check_kev("CVE-2021-44228")
✅ IN CISA KEV — Added 2021-12-10 | Known ransomware use: Yes
→ check_poc_exists("CVE-2021-44228")
✅ WEAPONIZED — 300+ public PoC repositories found
→ calculate_risk_score("CVE-2021-44228")
Risk Score: 97/100 (CRITICAL) | Urgency: PATCH IMMEDIATELY
Claudeの回答: 「CVE-2021-44228は 97/100(CRITICAL) のスコアです。Apache Log4jのリモートコード実行、CVSS 10.0、EPSS確率97.5%、ランサムウェアキャンペーンを含むCISA KEVでの活発な悪用が確認されており、公開エクスプロイトは300件以上。直ちにパッチを適用してください。」
シナリオ2:「Pythonのrequirements.txtをスキャンして」
あなた: これらの依存関係をスキャンしてください:requests==2.28.0、flask==2.2.0、django==3.2.0、pillow==9.0.0、cryptography==37.0.0
→ scan_dependencies(ecosystem="PyPI", packages={...})
Found 12 vulnerabilities across 4 packages
Claudeの回答: 「パッケージ全体で 12件の脆弱性 を発見しました。即時の対応が必要: Django 3.2.0(SQLインジェクションを含む3件のクリティカルCVE)、Pillow 9.0.0(ヒープオーバーフロー)、cryptography 37.0.0(OpenSSLチェーン)。以下にアップグレードしてください:django>=4.2.16、pillow>=10.3.0、cryptography>=42.0.0。」
シナリオ3:「疑わしいIPを調査して」
あなた: 疑わしいIP 185.220.101.34を調査してください — 悪意がありますか?
→ check_ip_reputation("185.220.101.34")
AbuseIPDB Confidence: 100% | Reports: 4,832 | ISP: Tor Exit Node
→ check_ip_noise("185.220.101.34")
GreyNoise: MALICIOUS | Tags: [Tor Exit Node, Web Scanner]
CVEs targeted: CVE-2024-3400, CVE-2023-46805
→ shodan_host_lookup("185.220.101.34")
Open ports: 22, 80, 443, 9001 | OS: Linux
Claudeの回答: 「185.220.101.34は既知のTor出口ノード であり、AbuseIPDBによって100%悪意があると評価され、4,832件の悪用報告があります。GreyNoiseはCVE-2024-3400(Palo Alto)とCVE-2023-46805(Ivanti)への活発なスキャンを確認しています。推奨:ファイアウォールでブロック。」
シナリオ4:「経営層向けセキュリティレポートを生成して」
あなた: 次のCVEの経営層向けセキュリティレポートを生成してください:CVE-2024-3400、CVE-2023-44487、CVE-2023-4966、CVE-2024-21887
→ compare_cves([...])
Compiles: NVD, EPSS, KEV, PoC availability, MITRE ATT&CK mapping
Generates: Ranked risk table, remediation timeline, executive summary
📊 リスクスコアの解説
calculate_risk_score ツールは、4つの独立したシグナルを重み付けして 0〜100の複合リスクスコア を生成します。
計算式
Risk Score = (CVSS × 0.20) + (EPSS × 0.35) + (KEV × 0.30) + (PoC × 0.15)
| コンポーネント | 重み | 捉える内容 |
|---|---|---|
| CVSS v3.1基本スコア | 20% | 理論上の最悪ケースの深刻度 |
| EPSS確率 | 35% | 次の30日以内に悪用される統計的可能性 |
| CISA KEVステータス | 30% | 実際の悪用が確認されたか |
| PoCの可用性 | 15% | 公開エクスプロイトコードが攻撃者の参入障壁を下げる |
ブースト倍率
- KEV + アクティブPoC → ×1.15
- CVSS ≥ 9.0 + EPSS > 0.7 → ×1.10
- 公開から7日未満 → ×1.05
スコアは100でキャップされます。
リスクラベル
| スコア | ラベル | 推奨される対応 |
|---|---|---|
| 0 – 25 | LOW | 次のメンテナンスウィンドウでスケジュール |
| 26 – 50 | MEDIUM | SLAに従い30日以内にパッチ |
| 51 – 75 | HIGH | 7日以内にパッチ;チームリードにエスカレーション |
| 76 – 100 | CRITICAL | 24〜48時間以内にパッチ。 緊急変更ウィンドウ。 |
なぜこの重み付けなのか?
EPSSに最も高い重み(35%)が与えられる のは、実際の悪用を予測する最良の指標であり、CVSSだけよりもはるかに優れているからです。CVSS 10.0でもEPSS 0.01なら理論上は危険ですが、実際には悪用されにくいです。KEVは30% でグラウンドトゥルース(予測ではなく確認された悪用)です。CVSSは20% で、EPSSデータが不十分な新規CVEの深刻度コンテキストを捉えます。PoCは15% で、公開エクスプロイトが実世界の攻撃を劇的に加速させることを反映しています。
🌐 データソース
| # | ソース | 提供データ | 認証 | レート制限(無料) |
|---|---|---|---|---|
| 1 | NVD | CVE詳細、CVSS、CWE、CPE | apiKey ヘッダー(オプション) |
5 req/30s(キーありで50) |
| 2 | EPSS | 悪用確率とパーセンタイル | なし | 1,000 req/min |
| 3 | CISA KEV | 活発に悪用されているCVEカタログ | なし | 静的ファイル |
| 4 | OSV.dev | オープンソースパッケージの脆弱性 | なし | 公開制限なし |
| 5 | GitHub Advisories | GHSAアドバイザリ、パッチ、影響バージョン | Bearer トークン |
60/hr(PATありで5,000) |
| 6 | MITRE ATT&CK | TTP、技術、緩和策 | なし | 公開制限なし |
| 7 | AbuseIPDB | IP悪用信頼度、レポート、ISP、地理情報 | Key ヘッダー |
1日1,000チェック |
| 8 | GreyNoise | IPノイズ/スキャン活動、分類 | key ヘッダー |
週50クエリ |
| 9 | Shodan | オープンポート、サービス、バナー、CVE | key クエリパラメータ |
基本ルックアップ |
| 10 | VirusTotal | マルチAVスキャン結果、レピュテーション | x-apikey ヘッダー |
500/日、4/分 |
| 11 | MalwareBazaar | マルウェアサンプル、ハッシュ、シグネチャ | Auth-Key ヘッダー |
フェアユース |
| 12 | ThreatFox | マルウェアファミリに関連するIOC | Auth-Key ヘッダー |
フェアユース |
| 13 | Ransomwhere | ランサムウェアBTCアドレスとトランザクション | なし | 公開制限なし |
| 14 | URLScan.io | URLスキャン、スクリーンショット、DOM | API-Key ヘッダー |
1日5,000パブリックスキャン |
| 15 | CIRCL PDNS | 過去のパッシブDNSレコード | HTTP Basic Auth | パートナーアクセス |
| 16 | GitHub Code Search | エクスプロイトPoCリポジトリ検索 | Bearer トークン |
GHSA制限と共有 |
| 17 | Exploit-DB | 公開エクスプロイトデータベースCSV | なし | 公開制限なし |
| 18 | Nuclei Templates | コミュニティ検出テンプレート | なし | 公開制限なし |
| 19 | MSRC | Microsoftセキュリティアドバイザリ | なし | 公開制限なし |
| 20 | Red Hat Security | Red Hat CVEアドバイザリ | なし | 公開制限なし |
| 21 | Ubuntu Security | Ubuntu CVEトラッカー | なし | 公開制限なし |
🧪 テストの実行
# Run the full test suite
pytest tests/ -v
# Run specific test files
pytest tests/test_validators.py tests/test_risk_scorer.py -v
# Run with coverage
pytest tests/ -v --cov=src/cve_mcp --cov-report=term-missing
MCP Inspectorでのテスト
npx @modelcontextprotocol/inspector python -m cve_mcp.server
http://localhost:6274 で起動します — 各ツールを対話的にテストし、入力スキーマを表示し、応答フォーマットを検査できます。
テストがカバーする範囲
- 単体テスト: リスクスコア計算、CVSSベクター解析、入力検証
- 統合テスト: ツール登録、パラメータ検証、キー欠如時のエラーハンドリング
- キャッシュテスト: SQLiteキャッシュ書き込み、TTL失効、キャッシュヒット/ミス
- セキュリティテスト: プライベートIPブロック、XMLボム保護(defusedxml)、入力サニタイズ
🏛️ アーキテクチャ詳解
ファイル構成
src/cve_mcp/
├── server.py # FastMCP server — all 27 @mcp.tool() definitions
├── config.py # Environment config and API base URLs
├── models.py # Pydantic models (CVERecord, KEVEntry, EPSSScore, ...)
├── audit.py # Rotating audit log (50MB, 5 backups)
├── api/
│ ├── nvd_client.py # NVD REST API v2.0
│ ├── osv_client.py # OSV.dev package vulnerability API
│ ├── epss_client.py # FIRST EPSS API
│ ├── kev_client.py # CISA KEV catalog
│ ├── ip_intel.py # AbuseIPDB + GreyNoise
│ ├── domain_intel.py # crt.sh + CIRCL passive DNS
│ ├── shodan_client.py # Shodan host intelligence
│ ├── hash_intel.py # MalwareBazaar + VirusTotal
│ ├── url_safety.py # URLScan.io
│ ├── malware_intel.py # ThreatFox IOC lookup
│ ├── ransomware_intel.py# Ransomwhere Bitcoin address lookup
│ ├── exploit_intel.py # GitHub PoC/exploit search
│ ├── vendor_advisory.py # MSRC + Red Hat + Ubuntu advisories
│ ├── attack_mapping.py # MITRE ATT&CK STIX mapping
│ ├── cve_timeline.py # CVE event timeline builder
│ ├── dependency_scan.py # OSV-based dependency scanning
│ ├── poc_checker.py # GitHub + Exploit-DB + Nuclei PoC search
│ ├── report_generator.py# Vuln report + CVE comparison matrix
│ └── rate_limiter.py # Token bucket rate limiter for NVD
├── cache/
│ └── sqlite_cache.py # Async SQLite cache with per-key TTL
└── utils/
├── validators.py # CVE ID normalization, IP/hash validation
└── risk_scorer.py # Composite risk score computation
キャッシュ戦略
| リソース | TTL |
|---|---|
| CVEレコード(NVD) | 1時間 |
| EPSSスコア | 6時間 |
| KEVカタログ | 1時間 |
| IP/ドメインインテリジェンス | 1時間 |
| Exploit-DB CSV | 24時間 |
| ATT&CK STIXデータ | 24時間 |
| ランサムウェアインテリジェンス | 24時間 |
監査ログ
すべてのツール呼び出しは ~/.cve-mcp/audit.log に記録されます:
{
"timestamp": "2026-04-14T10:23:45.123Z",
"tool": "lookup_cve",
"parameters": {"cve_id": "CVE-2024-3400"},
"duration_ms": 342,
"cache_hit": false,
"status": "ok"
}
APIキーと応答ペイロードは 監査ログに一切書き込まれません。
🔐 セキュリティとプライバシー
お使いのマシンから送信されるデータ
- 送信方向のHTTPSのみ — インバウンドポートを開かず、テレメトリもありません
- CVE ID、IP、ハッシュ、ドメイン、パッケージ名は、検索のためにそれぞれのAPIに送信されます
- API応答はSQLiteにローカルキャッシュされます — キャッシュされたデータはお使いのマシン上に留まります
プライベートIPのブロック
すべてのネットワークインテリジェンスツールは、外部API呼び出しの前にプライベートおよび予約済みIPレンジをブロックします:
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16(RFC 1918)127.0.0.0/8(ループバック)、169.254.0.0/16(リンクローカル)::1、fc00::/7(IPv6プライベート)
APIキーの保護
- キーは環境変数のみから読み込まれます — ハードコードされることはありません
.envはgitignoreされています- キーはログ、キャッシュ、監査エントリに一切含まれません
XMLの安全性
すべてのXML解析には defusedxml を使用し、XMLボム攻撃(billion laughs、XXEインジェクション)を防ぎます。
🔧 トラブルシューティング
サーバーが起動しない
# Ensure virtual environment is activated and package is installed
pip install -e .
python --version # must be 3.10+
Claude Desktopにハンマーアイコン(🔨)が表示されない
- 設定のJSON構文エラー(末尾のカンマがないか)を確認してください
- 絶対パス を使用してください — 相対パスはサイレントに失敗します
- Claude Desktopを完全に終了(Cmd+Q / Alt+F4)して再起動してください
NVDがレート制限される
# Add your free NVD API key to .env
NVD_API_KEY=your-key-here
# https://nvd.nist.gov/developers/request-an-api-key
サーバーは超過リクエストを自動的にキューに入れますが、キーがあれば10倍のスループットが得られます。
GreyNoiseが401 Unauthorizedを返す
# Verify your key works:
curl -H "key: YOUR_KEY" https://api.greynoise.io/v3/ip/8.8.8.8
# The server uses /v3/ip/{ip} — NOT the deprecated /v3/community endpoint
Windowsのエンコーディング問題
$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"
🗺️ ロードマップと既知の制限
サーバーが行わないこと
- アクティブスキャンなし — インテリジェンス/参照専用で、お使いのインフラを検査しません
- 書き込み操作なし — 外部APIからの読み取りのみ(URLScanへの提出を除く)
- CVSS v4.0スコアリングなし — 組み込みの計算機はv3.1のみに対応;NVDが提供するv4.0スコアは表示されますが、再計算はされません
既知のAPI制限
- NVDは1クエリあたり最大 2,000件 の結果を返します
- 新品のCVE(24時間未満)のEPSSスコアはまだ存在しない場合があります
- CISA KEVは米国の営業日のみ更新されます
- GreyNoiseコミュニティティア:週50クエリ
- VirusTotal無料枠:毎分4リクエスト
- CIRCL PDNSは手動登録と承認が必要です
- Ransomwhereは新しいアドレスに対して 90日間のエンバーゴ があります
計画されている改善
- CVSS v4.0ローカル計算機
- KEV追加とCVEウォッチリスト上のEPSSスコア変更に対するWebhook/アラート
- SIEM統合用のSTIX 2.1エクスポート
- ゼロインストール展開のためのDockerコンテナ
- ストリーミング可能なHTTPトランスポート(MCP SSE)
- 追加ソース:Censys、SecurityTrails、VulnCheck
🤝 コントリビューション
コントリビューションを歓迎します。
新しいツールの追加
server.pyに@mcp.tool()デコレータ付きのツール関数を追加utils/validators.pyに入力検証を追加api/にAPIクライアントを実装tests/にテストを追加- このREADMEを更新
@mcp.tool()
async def my_new_tool(param: str, ctx: Context = None) -> str:
"""
One-line description for Claude to know when to use this tool.
Args:
param: Description of the parameter
"""
app = _get_app(ctx)
# validate → cache check → API call → cache write → audit → return
テスト要件
- すべての新規ツールには、モック応答を用いた少なくとも1つのオフラインテストが必要です
- リスクスコアの変更には、計算式の検証テストケースを含める必要があります
- ネットワークツールには、プライベートIPブロックを検証するテストを含める必要があります
- すべてのテストがパスする必要があります:
pytest tests/ -v
📄 ライセンス
MIT License — 詳細は LICENSE を参照してください。
Copyright (c) 2025-2026 Mahipal Jangra (mukul975)
Built with 🔐 by Mahipal Jangra · Berlin, Germany
Turning security intelligence into conversation.
代替品








VIP会員