
생산 수준의 MCP 서버로, Claude에게 21개의 API를 통해 27개의 보안 인텔리전스 도구를 제공합니다 — CVE 조회, EPSS 점수, CISA KEV, MITRE ATT&CK, Shodan, VirusTotal 등.

AI 기반 보안 인텔리전스를 손캊게 — 28개의 도구 + 단일 호출 triage_cve 오케스트레이터, 24개 데이터 소스, 하나의 프로토콜.
프로덕션 등급의 Model Context Protocol (MCP) 서버로, Claude를 전방위 보안 분석가로 변환합니다. 15개 이상의 브라우저 탭을 NVD, EPSS, CISA KEV, Shodan, VirusTotal, GreyNoise 사이에서 전환할 필요 없이, Claude에게 한 가지 질문만 하면 수초 내에 상호 연관된 인텔리전스를 얻을 수 있습니다. Python, FastMCP, httpx, aiosqlite, Pydantic v2 및 defusedxml로 구축되었습니다.
문제점: 단일 CVE를 심사하려면 NVD에서 CVSS 점수, EPSS에서 익스플로잇 확률, CISA KEV에서 활성 익스플로잇 상태, GitHub에서 패치, VirusTotal에서 악성코드 연관성을 각각 조회한 다음, 모든 정보를 정신적으로 상호 연관시켜야 합니다. 50개의 CVE라면 하루 종일 걸리는 작업입니다.
해결책: CVE MCP 서버는 Claude에게 24개 API에 걸친 28개의 보안 도구에 직접 접근 권한을 부여하며, 단일 호출 오케스트레이터인 triage_cve 를 앞세웁니다. "CVE-2024-3400에 대해 패치해야 할까요?"라고 물으면 Claude는 모든 관련 소스에 동시에 요청을 분산하고, 복합 위험 점수(CISA KEV 하드 오버라이드 포함)를 계산한 후, 증거와 함께 우선순위가 매겨진 권장 사항을 제공합니다.
보안 전문가, 개발자 및 엔터프라이즈 팀이 에이전틱 AI(MCP 서버, 도구 호출, 거버넌스, 인간-인-더-루프 워크플로우)에 대해 실제로 얼마나 준비되어 있는지 측정하는 글로벌 학술 연구를 진행 중입니다.
이 저장소를 사용하신다면, 여러분의 응답은 매우 가치 있는 데이터 포인트가 될 것입니다.
📋 설문조사 참여 (10분 소요): 설문조사
┌─────────────────────────────────────────────────────────────────────┐ │ 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 주소는 모든 조회 도구에서 차단됩니다.
---
## 🔍 도구 카탈로그 (28개 도구)
### ⭐ 오케스트레이션 (v0.2.0) — 여기서 시작
| 도구 | 설명 | API 키 필요 | 사용 예 |
|------|-------------|-----------------|---------------|
| `triage_cve` | 단일 호출 트라이지로 NVD + EPSS + CISA KEV(+ `depth != "quick"`일 때 공개 PoC)를 동시에 처리하고, KEV 하드 오버라이드로 합성 위험 점수를 계산하며, NIST NVD가 제한될 때 VulnCheck NVD++로 폴백하고, `depth="deep"`일 때 SSVC v2 게이트 결정을 출력합니다. | 무료 / 키 없음 (키 권장) | `triage_cve("CVE-2021-44228", depth="deep")` |
> **MCP 프리미티브를 통해서도 노출됨** — 리소스: `kev://catalog`, `epss://scores/{cve_id}`, `manifest://tool-hash` (등록된 도구 표면에 대한 SHA-256, 변조 탐지용). 프롬프트: `patch_decision`, `compare_and_prioritize`, `dependency_triage`.
### 핵심 취약점 인텔리전스 (8개 도구)
| 도구 | 설명 | API 키 필요 | 사용 예 |
|------|-------------|-----------------|---------------|
| `lookup_cve` | NVD에서 CVSS 점수, CWE, 영향을 받는 제품, 참조, 타임라인을 포함한 상세 CVE 레코드를 가져옵니다. | 무료 / 키 없음 (키 권장) | `lookup_cve("CVE-2024-3400")` |
| `search_cves` | 키워드, 제품명, 심각도 또는 날짜 범위로 NVD에서 CVE를 검색합니다. | 무료 / 키 없음 (키 권장) | `search_cves(keyword="Apache Log4j", severity="CRITICAL")` |
| `get_epss_score` | 하나 이상의 CVE에 대한 EPSS 익스플로잇 확률(0–1) 및 백분위수를 가져옵니다. | 무료 / 키 없음 | `get_epss_score("CVE-2024-3400")` |
| `check_kev_status` | CVE가 CISA의 알려진 익스플로잇 취약점(KEV) 카탈로그에 있는지 확인합니다. | 무료 / 키 없음 | `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로 공통 약점 열거(CWE) 상세 정보를 조회합니다. | 무료 / 키 없음 | `get_cwe_info("CWE-79")` |
| `get_cve_references` | CVE에 대한 모든 참조 링크를 추출하고 분류합니다(패치, 권고, 익스플로잇). | 무료 / 키 없음 (키 권장) | `get_cve_references("CVE-2023-44487")` |
| `bulk_cve_lookup` | 단일 호출에서 최대 20개의 CVE에 대한 세부 정보를 병렬 보강과 함께 일괄 가져옵니다. | 무료 / 키 없음 (키 권장) | `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` | 하나 이상의 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` | IP 스캔/공격 활동, 분류 및 관련 CVE에 대해 GreyNoise를 질의합니다. | `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` | ThreatFox에서 악성코드 패밀리와 연결된 침해 지표(IoC)를 질의합니다. | `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 보안 권고를 검색합니다. | `GITHUB_TOKEN` (선택 사항) | `scan_github_advisories(ecosystem="pip", package="django")` |
| `urlscan_check` | URL을 스캔 제출하거나 URLScan.io에서 이전 스캔 결과를 검색합니다. | `URLSCAN_API_KEY` | `urlscan_check("https://suspicious-site.com")` |
---
## 📦 설치
### 사전 요구 사항
- **Python 3.10+** (3.11 또는 3.12 권장)
- **pip** 또는 **uv** 패키지 관리자
- 저장소 복제를 위한 **Git**
- 환경 변수에 접근 가능한 터미널
### 단계별 설정```bash
# 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
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
### 테스트 종속성 포함```bash
pip install -e ".[test]"
API 키는 우선순위에 따라 구성되어 있습니다 — 무료 도구로 최대 범위를 확보하려면 Tier 1 키를 먼저 획득한 후, 필요에 따라 Tier 2, Tier 3을 점진적으로 추가하세요.
⚡ 키 없이 시작하기: 총 8개의 도구가 API 키 없이도 작동합니다 — EPSS, CISA KEV, OSV.dev, MITRE ATT&CK, CWE 조회, CVSS 파싱, Ransomwhere, NVD (제한된 속도). 서버를 즉시 사용할 수 있으며, 필요에 따라 키를 점진적으로 추가할 수 있습니다.
NVD_API_KEY=
GITHUB_TOKEN=
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_API_KEY= # https://viz.greynoise.io/signup
CIRCL_PDNS_USER= CIRCL_PDNS_PASS=
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````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 mcp add cve-mcp -- python -m cve_mcp.server
claude mcp add cve-mcp -e NVD_API_KEY=your_key -e VULNCHECK_TOKEN=your_token -- python -m cve_mcp.server
claude mcp list
---
## 🚀 빠른 시작
### 1단계: 설치 (2분)```bash
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 .
.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"
echo 'NVD_API_KEY=your-key-here' > .env
무료 NVD 키를 [nvd.nist.gov](https://nvd.nist.gov/developers/request-an-api-key)에서 요청하세요 — 이메일로 즉시 제공되며, 속도 제한이 **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, 97.5% EPSS 확률, CISA KEV에서 확인된 활발한 악용(랜섬웨어 캠페인 포함), 300개 이상의 공개 익스플로잇. 즉시 패치하십시오."
당신: 다음 의존성을 스캔하세요: 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
**클로드의 응답:** "패키지에서 **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
클로드의 응답: "185.220.101.34는 알려진 Tor 출구 노드입니다 AbuseIPDB에서 4,832개의 남용 신고로 100% 악성으로 평가되었습니다. GreyNoise는 CVE-2024-3400(Palo Alto) 및 CVE-2023-46805(Ivanti)에 대한 능동적 스캔을 확인했습니다. 권장 사항: 방화벽에서 차단하십시오."
사용자: 다음에 대한 경영진 보안 보고서를 생성하십시오: 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)
점수는 100으로 제한됩니다.
숫자 점수 방식은 scoring_version 1.0 (triage_cve, calculate_risk_score, health_check에서 표시됨)입니다. 위의 선형 가중 합계는 v1 숫자 점수의 기본값이며, 하나의 강제 재정의가 있습니다.
Act / Attend / Track* / Track)은 triage_cve(depth="deep")를 통해 정성적이고 설명 가능한 대안으로 0–100 숫자 대신 사용할 수 있습니다.**EPSS가 가장 높은 가중치(35%)**를 받는 이유는 실제 악용을 예측하는 가장 좋은 단일 지표이기 때문입니다. CVSS만으로는 훨씬 부족합니다. CVSS 10.0에 EPSS 0.01인 경우 이론적으로는 위험하지만 실제로는 가능성이 낮습니다. **KEV는 30%**로 사실입니다: 예측이 아닌 확인된 악용입니다. **CVSS는 20%**로 EPSS 데이터가 충분하지 않은 새로운 CVE의 심각도 맥락을 포착합니다. **PoC는 15%**로 공개 익스플로잇이 실제 공격을 극적으로 가속화한다는 점을 반영합니다.
triage_cve 오케스트레이터 — 한 번의 도구 호출로 NVD + EPSS + CISA KEV (+ depth != "quick"인 경우 공개 PoC 발견)을 동시에 조회하고, 복합 위험 점수를 계산하며, 깔끔한 보고서를 반환합니다. depth는 quick / standard(기본값) / deep입니다. **deep**은 추가로 SSVC v2 게이트형 결정을 출력합니다.triage_cve 내부에서 자동으로 사용되는 투명한 NVD 대체), CIRCL hashlookup, HIBP Pwned Passwords 범위 API.scoring_version — KEV에 등록된 CVE는 항상 CRITICAL(점수 ≥ 76)입니다. 점수 버전은 triage_cve 및 health_check에 보고됩니다.MCP_TRANSPORT=http를 설정하여 stdio 대신 HOST:PORT(기본값 , 상태 비저장)에서 스트리밍 가능한 HTTP를 제공합니다. 이 함께 제공됩니다.pytest tests/ -v
pytest tests/test_validators.py tests/test_risk_scorer.py -v
pytest tests/ -v --cov=src/cve_mcp --cov-report=term-missing
### MCP Inspector로 테스트하기```bash
npx @modelcontextprotocol/inspector python -m cve_mcp.server
http://localhost:6274에서 열리며 — 각 도구를 대화형으로 테스트하고, 입력 스키마를 확인하며, 응답 형식을 검사할 수 있습니다.
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`에 기록됩니다:```json
{
"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 키와 응답 페이로드는 감사 로그에 기록되지 않습니다.
모든 네트워크 인텔리전스 도구는 외부 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 사설).env는 git에 무시됨defusedxml은 XML 폭탄 공격(빌리언 래프, XXE 주입)을 방지하기 위해 모든 XML 파싱에 사용됩니다.
pip install -e . python --version # must be 3.10+
**Claude Desktop에 망치 아이콘(🔨)이 표시되지 않습니다**
- 구성 파일에서 JSON 구문 오류(후행 쉼표 없음)가 있는지 확인하세요
- **절대 경로**를 사용하세요 — 상대 경로는 자동으로 실패합니다
- Claude Desktop을 완전히 종료(Cmd+Q / Alt+F4)한 후 다시 시작하세요
### NVD 요금 제한됨```bash
# Add your free NVD API key to .env
NVD_API_KEY=your-key-here
# https://nvd.nist.gov/developers/request-an-api-key
서버는 초과 요청을 자동으로 대기열에 넣지만, 키를 사용하면 10배의 처리량을 얻을 수 있습니다.
curl -H "key: YOUR_KEY" https://api.greynoise.io/v3/ip/8.8.8.8
### Windows 인코딩 문제```powershell
$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"
기여를 환영합니다.
server.py에 @mcp.tool() 데코레이터와 함께 도구 함수 추가
utils/validators.py에 입력 검증 추가
api/에 API 클라이언트 구현
tests/에 테스트 추가
이 README 업데이트```python @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)
### 테스트 요구 사항
- 모든 새로운 도구는 모의 응답을 사용한 최소 하나의 오프라인 테스트를 포함해야 합니다
- 위험 점수 변경에는 공식 검증 테스트 케이스가 포함되어야 합니다
- 네트워크 도구는 사설 IP 차단을 확인하는 테스트를 포함해야 합니다
- 모든 테스트는 통과해야 합니다: `pytest tests/ -v`
---
## 📄 라이선스
MIT 라이선스 — 자세한 내용은 [LICENSE](https://github.com/mukul975/cve-mcp-server/blob/HEAD/LICENSE)를 참조하세요.```
Copyright (c) 2025-2026 Mahipal Jangra (mukul975)
🔐로 제작되었으며, 제공: Mahipal Jangra · 베를린, 독일
보안 인텔리전스를 대화로 전환합니다.
| ENV 변수 | 활성화 기능 | 획득 방법 | 무료 티어 한도 | 필수 여부? |
|---|
NVD_API_KEY | NVD 조회 10배 속도 향상 (30초당 50회 vs 5회) | nvd.nist.gov에서 요청 | 30초당 50회 요청 | 선택 사항이지만 강력 권장 |
GITHUB_TOKEN | GitHub Advisory 검색 + 익스플로잇 PoC 검색 | github.com/settings/tokens에서 PAT 생성 | 시간당 5,000회 요청 | 선택 사항 (없으면 시간당 60회) |
| ENV 변수 | 활성화 기능 | 획득 방법 | 무료 티어 한도 | 필수 여부? |
|---|
ABUSEIPDB_KEY | IP 평판 조회 | abuseipdb.com에서 등록 | 일일 1,000회 확인 | IP 도구에 필수 |
VIRUSTOTAL_KEY | 파일/URL/도메인/IP 악성코드 검사 | virustotal.com에서 가입 | 일일 500회 조회, 분당 4회 | VT 도구에 필수 |
GREYNOISE_API_KEY | IP 노이즈/스캔 활동 인텔리전스 | viz.greynoise.io에서 가입 | 주당 50회 쿼리 (커뮤니티) | GreyNoise 도구에 필수 |
SHODAN_KEY | 호스트/포트/서비스 정찰 | account.shodan.io에서 등록 | 기본 호스트 조회 (무료 티어) | Shodan 도구에 필수 |
| ENV 변수 | 활성화 기능 | 획득 방법 | 무료 티어 한도 | 필수 여부? |
|---|
URLSCAN_KEY | URL 검사 및 웹사이트 분석 | urlscan.io에서 가입 | 일일 5,000회 공개 스캔 | 선택 사항 |
CIRCL_PDNS_USER | CIRCL Passive DNS 조회 | circl.lu에서 접근 요청 | 파트너 전용 | 선택 사항 |
CIRCL_PDNS_PASS | CIRCL Passive DNS 인증 | CIRCL 등록 시 제공 | 파트너 전용 | 선택 사항 |
| 구성 요소 | 가중치 | 의미 |
|---|
| CVSS v3.1 기본 점수 | 20% | 이론적 최악의 심각도 |
| EPSS 확률 | 35% | 향후 30일 내 실제 악용될 통계적 가능성 |
| CISA KEV 상태 | 30% | 야생에서 확인된 활성 악용 |
| PoC 가용성 | 15% | 공개 익스플로잇 코드가 공격자의 장벽을 낮춤 |
| 점수 | 라벨 | 권장 조치 |
|---|
| 0 – 25 | LOW | 다음 유지보수 기간에 예약 |
| 26 – 50 | MEDIUM | SLA에 따라 30일 이내 패치 |
| 51 – 75 | HIGH | 7일 이내 패치; 팀 리드에게 에스컬레이션 |
| 76 – 100 | CRITICAL | 24~48시간 이내 패치. 긴급 변경 창. |
0.0.0.0:8000Dockerfilekev://catalog, epss://scores/{cve_id}, manifest://tool-hash (등록된 도구 표면에 대한 SHA-256); 프롬프트 patch_decision, compare_and_prioritize, dependency_triage.sampling/createMessage를 발행하지 않음(Unit 42 MCP-샘플링 공격 벡터). 새로운 아웃바운드 경로는 스킴/호스트 허용 목록에 포함됩니다.| # | 소스 | 제공 데이터 | 인증 | 속도 제한 (무료) |
|---|
| 1 | NVD | CVE 세부 정보, CVSS, CWE, CPE | apiKey 헤더 (선택 사항) | 30초당 5회 (키 사용 시 50회) |
| 2 | EPSS | 악용 확률 및 백분위수 | 없음 | 분당 1,000회 |
| 3 | CISA KEV | 활성 악용된 CVE 카탈로그 | 없음 | 정적 파일 |
| 4 | OSV.dev | 오픈소스 패키지 취약점 | 없음 | 공개된 제한 없음 |
| 5 | GitHub Advisories | GHSA 권고, 패치, 영향을 받는 버전 | Bearer 토큰 | 시간당 60회 (PAT 사용 시 5,000회) |
| 6 | MITRE ATT&CK | TTP, 기술, 완화 | 없음 | 공개된 제한 없음 |
| 7 | AbuseIPDB | IP 남용 신뢰도, 신고, ISP, 지리 | Key 헤더 | 일일 1,000회 확인 |
| 8 | GreyNoise | IP 잡음/스캔 활동, 분류 | key 헤더 | 주당 50회 쿼리 |
| 9 | Shodan | 열린 포트, 서비스, 배너, CVE | key 쿼리 매개변수 | 기본 조회 |
| 10 | VirusTotal | 다중 AV 스캔 결과, 평판 | x-apikey 헤더 | 일일 500회, 분당 4회 |
| 11 | MalwareBazaar | 악성코드 샘플, 해시, 서명 | Auth-Key 헤더 | 적절한 사용 |
| 12 | ThreatFox | 악성코드 계열과 연결된 IOCs | Auth-Key 헤더 | 적절한 사용 |
| 13 | Ransomwhere | 랜섬웨어 BTC 주소 및 거래 | 없음 | 공개된 제한 없음 |
| 14 | URLScan.io | URL 스캔, 스크린샷, DOM | API-Key 헤더 | 일일 5,000건 공개 스캔 |
| 15 | CIRCL PDNS | 과거 수동 DNS 레코드 | HTTP 기본 인증 | 파트너 액세스 |
| 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 추적기 | 없음 | 공개된 제한 없음 |
| 22 | VulnCheck NVD++ | NVD 스키마 CVE 레코드 (투명한 NVD 대체) | Bearer 토큰 (무료 커뮤니티) | VulnCheck 커뮤니티 등급 기준 |
| 23 | CIRCL hashlookup | 알려진 정상 파일 메타데이터 (NSRL + 기타), hashlookup:trust | 없음 | 최선의 노력 |
| 24 | HIBP Pwned Passwords | k-익명성 범위 API를 통한 유출된 비밀번호 개수 | 없음 | 엄격한 제한 없음 |