MCP-сервер с 27 инструментами threat intelligence через 21 API: CVE-поиск (NVD), EPSS-скоринг, CISA KEV, MITRE ATT&CK, Shodan, VirusTotal, ExploitDB, Censys, AlienVault OTX. Всё это из Claude в одном запросе.
Требуются API-ключи: NVD_API_KEY, SHODAN_API_KEY, VT_API_KEY.
Получить: nvd.nist.gov/developers/request-an-api-key, shodan.io, virustotal.com
# Claude Desktop — claude_desktop_config.json:
{ "mcpServers": { "cve-mcp": { "command": "uvx", "args": ["cve-mcp-server"], "env": { "NVD_API_KEY": "key", "SHODAN_API_KEY": "key", "VT_API_KEY": "key" } } } }
# Claude Code (CLI):
claude mcp add cve-mcp --env NVD_API_KEY=key --env SHODAN_API_KEY=key --env VT_API_KEY=key -- uvx cve-mcp-server
# OpenCode — ~/.config/opencode/opencode.json:
{ "mcp": { "cve-mcp": { "type": "local", "command": ["uvx", "cve-mcp-server"], "environment": { "NVD_API_KEY": "key", "SHODAN_API_KEY": "key", "VT_API_KEY": "key" } } } }

Интеллект безопасности на основе ИИ у вас под рукой — 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 означает запрос CVSS-оценок в NVD, вероятности эксплуатации в EPSS, статуса активной эксплуатации в CISA KEV, патчей на GitHub и связей с вредоносным ПО в VirusTotal — а затем мысленная корреляция всей информации. Для 50 CVE это целый потерянный день.
Решение: CVE MCP Server дает Claude прямой доступ к 28 инструментам безопасности через 24 API — с оркестратором triage_cve для одного вызова. Спросите «Нужно ли нам исправлять CVE-2024-3400?», и Claude параллельно обратится ко всем релевантным источникам, рассчитает комплексную оценку риска (с жестким приоритетом CISA KEV) и выдаст приоритизированную рекомендацию с доказательствами.
Я провожу глобальное академическое исследование, измеряющее реальную готовность специалистов по безопасности, разработчиков и корпоративных команд к агентному ИИ — 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 (только исходящий трафик)
┌───────────────┼───────────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 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-адреса заблокированы во всех инструментах поиска.
| Инструмент | Описание | Требуется ключ API | Пример использования |
|---|---|---|---|
triage_cve |
Однострочный триаж, который параллельно запрашивает NVD + EPSS + CISA KEV (+ публичные PoC, если depth != "quick"), вычисляет комплексную оценку риска с жестким приоритетом KEV, при throttling 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.
| Инструмент | Описание | Требуется ключ API | Пример использования |
|---|---|---|---|
lookup_cve |
Получение детальной записи CVE из NVD, включая оценки CVSS, CWE, затронутые продукты, ссылки и временную шкалу | Бесплатно / Без ключа (рекомендуется ключ) | lookup_cve("CVE-2024-3400") |
search_cves |
Поиск CVE в NVD по ключевым словам, названию продукта, уровню серьезности или диапазону дат | Бесплатно / Без ключа (рекомендуется ключ) | search_cves(keyword="Apache Log4j", severity="CRITICAL") |
get_epss_score |
Получение вероятности эксплуатации EPSS (0–1) и процентиля для одной или нескольких CVE | Бесплатно / Без ключа | get_epss_score("CVE-2024-3400") |
check_kev_status |
Проверка, входит ли CVE в каталог CISA Known Exploited Vulnerabilities | Бесплатно / Без ключа | 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 |
Поиск информации о Common Weakness Enumeration по ID CWE из встроенной базы данных | Бесплатно / Без ключа | get_cwe_info("CWE-79") |
get_cve_references |
Извлечение и категоризация всех ссылок для CVE (патчи, advisory, эксплойты) | Бесплатно / Без ключа (рекомендуется ключ) | get_cve_references("CVE-2023-44487") |
bulk_cve_lookup |
Пакетное получение деталей до 20 CVE за один вызов с параллельным обогащением данных | Бесплатно / Без ключа (рекомендуется ключ) | bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"]) |
| ### Инструменты эксплойтов и атак (4 инструмента) |
| Инструмент | Описание | Требуется ключ API | Пример использования |
|---|---|---|---|
search_exploits |
Поиск публичных proof-of-concept эксплойтов и репозиториев с кодом эксплойтов на 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 |
Определение наличия известного кода proof-of-concept для CVE из различных источников | GITHUB_TOKEN (необязательно) |
check_poc_availability("CVE-2024-3400") |
get_attack_patterns |
Получение деталей паттернов атак CAPEC, связанных с CWE или CVE | Бесплатно / Без ключа | get_attack_patterns("CWE-89") |
| Инструмент | Описание | Требуется ключ API | Пример использования |
|---|---|---|---|
calculate_risk_score |
Вычисление составного балла риска от 0 до 100 на основе CVSS, EPSS, статуса KEV и наличия PoC | Бесплатно / Без ключа (рекомендуется ключ) | 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 |
Получение актуальных CVE на основе высоких баллов EPSS и недавних добавлений в KEV | Бесплатно / Без ключа | get_trending_cves(days=7, min_epss=0.5) |
| Инструмент | Описание | Требуется ключ API | Пример использования |
|---|---|---|---|
lookup_ip_reputation |
Проверка истории злоупотреблений IP-адресом и балла доверия через AbuseIPDB | ABUSEIPDB_API_KEY |
lookup_ip_reputation("185.220.101.34") |
check_ip_noise |
Запрос к GreyNoise для получения данных о сканировании/атаках, классификации и связанных CVE | GREYNOISE_API_KEY |
check_ip_noise("185.220.101.34") |
shodan_host_lookup |
Получение открытых портов, сервисов, баннеров и уязвимостей для IP через Shodan | SHODAN_API_KEY |
shodan_host_lookup("8.8.8.8") |
passive_dns_lookup |
Получение исторических данных DNS-разрешений для домена из пассивного DNS CIRCL | CIRCL_PDNS_USER + CIRCL_PDNS_PASSWORD |
passive_dns_lookup("example.com") |
| Инструмент | Описание | Требуется ключ 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 для индикаторов компрометации, связанных с семействами вредоносного ПО | ABUSECH_AUTH_KEY (необязательно) |
search_iocs(malware="CobaltStrike") |
check_ransomware |
Поиск адресов оплаты выкупа и данных о транзакциях в Ransomwhere | Бесплатно / Без ключа | check_ransomware(address="bc1q...") |
| Инструмент | Описание | Требуется ключ 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") |
# 1. Клонируйте репозиторий
git clone https://github.com/mukul975/cve-mcp-server.git
cd cve-mcp-server
# 2. Создайте и активируйте виртуальное окружение
python -m venv venv
# macOS / Linux:
source venv/bin/activate
# Windows (PowerShell):
.\venv\Scripts\Activate.ps1
# Windows (CMD):
venv\Scripts\activate.bat
# 3. Установите зависимости
pip install -e .
# 4. Скопируйте и настройте переменные окружения
cp .env.example .env
# Отредактируйте .env с вашими ключами API (см. раздел "Настройка ключей API" ниже)
# 5. Проверьте запуск сервера
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 # или .venv\Scripts\activate в Windows
uv pip install -e .
cp .env.example .env
pip install -e ".[test]"
Ключи API организованы по приоритету — сначала получите ключи Уровня 1 для максимального покрытия бесплатными инструментами, затем постепенно добавляйте ключи Уровня 2 и Уровня 3 по мере необходимости.
| Переменная окружения | Что открывает | Как получить | Лимиты бесплатного тарифа | Обязательно? |
|---|---|---|---|---|
NVD_API_KEY |
Поиск в NVD в 10 раз быстрее (50 запросов/30 сек вместо 5) | Запросите на nvd.nist.gov | 50 запросов за 30 секунд | Необязательно, но настоятельно рекомендуется |
GITHUB_TOKEN |
Поиск в GitHub Advisory + поиск эксплойтов PoC | Создайте PAT на github.com/settings/tokens | 5 000 запросов в час | Необязательно (без него 60 в час) |
| Переменная окружения | Что открывает | Как получить | Лимиты бесплатного тарифа | Обязательно? |
|---|---|---|---|---|
ABUSEIPDB_KEY |
Проверка репутации IP | Зарегистрируйтесь на abuseipdb.com | 1 000 проверок в день | Обязательно для инструментов с IP |
VIRUSTOTAL_KEY |
Сканирование файлов/URL/доменов/IP на вредоносное ПО | Зарегистрируйтесь на virustotal.com | 5 000 проверок в день, 4 в минуту | Обязательно для инструментов VT |
GREYNOISE_API_KEY |
Разведка данных о шуме/сканировании IP | Зарегистрируйтесь на viz.greynoise.io | 50 запросов в неделю (сообщество) | Обязательно для инструментов GreyNoise |
SHODAN_KEY |
Разведка хостов/портов/сервисов | Зарегистрируйтесь на account.shodan.io | Базовые проверки хостов (бесплатный тариф) | Обязательно для инструментов Shodan |
| Переменная окружения | Что открывает | Как получить | Лимиты бесплатного тарифа | Обязательно? |
|---|---|---|---|---|
URLSCAN_KEY |
Сканирование URL и анализ сайтов | Зарегистрируйтесь на urlscan.io | 5 000 публичных сканирований в день | Необязательно |
CIRCL_PDNS_USER |
Проверки пассивного DNS CIRCL | Запросите доступ на circl.lu | Только для партнёров | Необязательно |
CIRCL_PDNS_PASS |
Аутентификация пассивного DNS CIRCL | Предоставляется при регистрации в CIRCL | Только для партнёров | Необязательно |
⚡ Начало без ключей: Восемь инструментов работают без каких-либо ключей API — EPSS, CISA KEV, OSV.dev, MITRE ATT&CK, поиск CWE, парсинг CVSS, Ransomwhere и NVD (со сниженным рейтингом запросов). Вы можете начать использовать сервер сразу и добавлять ключи постепенно.
# Ключ API NVD — бесплатно на https://nvd.nist.gov/developers/request-an-api-key
# Без ключа: 5 запросов/30 сек | С ключом: 50 запросов/30 сек
NVD_API_KEY=
# Токен GitHub — увеличивает лимит запросов с 60/час до 5000/час (scope не требуются)
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 — использует эндпоинт /v3/ip/{ip} (НЕ устаревший /v3/community)
GREYNOISE_API_KEY= # https://viz.greynoise.io/signup
# Пассивный DNS CIRCL — требует партнёрской регистрации
CIRCL_PDNS_USER=
CIRCL_PDNS_PASS=
# Необязательные переопределения
CACHE_DB_PATH= # по умолчанию ~/.cve-mcp/cache.db
AUDIT_LOG_PATH= # по умолчанию ~/.cve-mcp/audit.log
REQUEST_TIMEOUT=30 # Тайм-аут HTTP-запроса в секундах
MAX_RETRIES=3 # Повторы при временных ошибках
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 mcp add cve-mcp -- python -m cve_mcp.server
# С переменными окружения (повторите -e для каждого ключа)
claude mcp add cve-mcp -e NVD_API_KEY=your_key -e VULNCHECK_TOKEN=your_token -- python -m cve_mcp.server
# Или просто запустите из каталога проекта — python-dotenv автоматически загружает .env при старте
# Проверьте подключение
claude mcp list
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 — мгновенно по электронной почте, увеличивает лимит запросов с 5 до 50 за 30 секунд.
Как только вы добавите ключи Уровня 1 и Уровня 2:
«Рассчитай оценку риска для CVE-2024-3400 и скажи, нужно ли нам исправлять его немедленно.»
Вы: Проанализируй, требует ли 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")
✅ В CISA KEV — Добавлено 2021-12-10 | Известное использование вransomware: Да
→ check_poc_exists("CVE-2021-44228")
✅ ОРУЖИЕНО — Найдено 300+ публичных репозиториев PoC
→ calculate_risk_score("CVE-2021-44228")
Оценка риска: 97/100 (CRITICAL) | Срочность: ИСПРАВИТЬ НЕМЕДЛЕННО
Ответ Claude: «CVE-2021-44228 получает оценку 97/100 (CRITICAL). Удаленное выполнение кода в Apache Log4j, CVSS 10.0, 97.5% вероятность по EPSS, подтвержденная активная эксплуатация в CISA KEV, включая кампанииransomware, 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={...})
Найдено 12 уязвимостей в 4 пакетах
Ответ Claude: «Найдено 12 уязвимостей в ваших пакетах. Немедленные действия: Django 3.2.0 (3 критических CVE, включая SQL-инъекции), Pillow 9.0.0 (переполнение кучи), cryptography 37.0.0 (цепочка OpenSSL). Обновите до: django>=4.2.16, pillow>=10.3.0, cryptography>=42.0.0.»
Вы: Расследуй подозрительный IP 185.220.101.34 — вредоносный ли он?
→ check_ip_reputation("185.220.101.34")
AbuseIPDB Доверие: 100% | Отчеты: 4,832 | Провайдер: Tor Exit Node
→ check_ip_noise("185.220.101.34")
GreyNoise: MALICIOUS | Теги: [Tor Exit Node, Web Scanner]
Целевые CVE: CVE-2024-3400, CVE-2023-46805
→ shodan_host_lookup("185.220.101.34")
Открытые порты: 22, 80, 443, 9001 | ОС: Linux
Ответ Claude: «185.220.101.34 — известный Tor exit node, оцененный AbuseIPDB как 100% вредоносный с 4,832 отчетами о злоупотреблениях. GreyNoise подтверждает активное сканирование для CVE-2024-3400 (Palo Alto) и CVE-2023-46805 (Ivanti). Рекомендация: Заблокировать на файрволе.»
Вы: Сгенерируй отчет по безопасности для руководства по: CVE-2024-3400, CVE-2023-44487, CVE-2023-4966, CVE-2024-21887
→ compare_cves([...])
Собирает: NVD, EPSS, KEV, наличие PoC, сопоставление с MITRE ATT&CK
Генерирует: Ранжированную таблицу рисков, график исправлений, резюме для руководства
Инструмент calculate_risk_score выдает сводную оценку риска от 0 до 100, взвешивая четыре независимых сигнала.
Оценка риска = (CVSS × 0.20) + (EPSS × 0.35) + (KEV × 0.30) + (PoC × 0.15)
| Компонент | Вес | Что он отражает |
|---|---|---|
| Базовый балл CVSS v3.1 | 20% | Теоретическая максимальная критичность |
| Вероятность по EPSS | 35% | Статистическая вероятность эксплуатации в ближайшие 30 дней |
| Статус в CISA KEV | 30% | Подтвержденная активная эксплуатация в реальном мире |
| Наличие PoC | 15% | Публичный код эксплойта снижает порог для атакующих |
Оценка ограничена значением 100.
Числовая система оценки имеет scoring_version 1.0 (отображается в triage_cve, calculate_risk_score и health_check). Линейная взвешенная сумма выше является вариантом по умолчанию для v1 для числовой оценки, с одним жестким правилом:
Act / Attend / Track* / Track) доступно через triage_cve(depth="deep") как качественная, объяснимая альтернатива числовой оценке 0–100.| Оценка | Метка | Рекомендуемое действие |
|---|---|---|
| 0 – 25 | LOW | Запланировать на следующее окно обслуживания |
| 26 – 50 | MEDIUM | Исправить в течение 30 дней в соответствии со SLA |
| 51 – 75 | HIGH | Исправить в течение 7 дней; эскалировать руководителю команды |
| 76 – 100 | CRITICAL | Исправить в течение 24–48 часов. Аварийное окно изменений. |
EPSS получает самый высокий вес (35%), потому что это лучший предиктор реальной эксплуатации — намного лучше, чем один только CVSS. CVSS 10.0 с EPSS 0.01 теоретически опасен, но практически маловероятен. KEV на 30% — это подтвержденные факты: эксплуатация, а не прогноз. CVSS на 20% отражает контекст критичности для новых CVE, у которых недостаточно данных EPSS. PoC на 15% отражает тот факт, что публичные эксплойты значительно ускоряют реальные атаки.
triage_cve — один вызов инструмента, который параллельно опрашивает NVD + EPSS + CISA KEV (+ публичный поиск PoC при depth != "quick"), вычисляет сводную оценку риска и возвращает чистый отчет. Параметр depth принимает значения quick / standard (по умолчанию) / deep; deep дополнительно выдает квантованное решение SSVC v2.triage_cve, когда NIST NVD недоступен/ограничен), CIRCL hashlookup и range API HIBP Pwned Passwords.scoring_version — CVE из KEV всегда имеют статус CRITICAL (оценка ≥ 76); версия системы оценки сообщается в triage_cve и health_check.MCP_TRANSPORT=http, чтобы обслуживать потоковый HTTP на HOST:PORT (по умолчанию 0.0.0.0:8000, без состояния) вместо stdio. Включается Dockerfile.kev://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 (опционально) |
5 запросов/30 сек (50 с ключом) |
| 2 | EPSS | Вероятность эксплуатации и перцентили | Нет | 1 000 запросов/мин |
| 3 | CISA KEV | Каталог активно эксплуатируемых CVE | Нет | Статический файл |
| 4 | OSV.dev | Уязвимости пакетов открытого ПО | Нет | Опубликованных лимитов нет |
| 5 | GitHub Advisories | Уведомления GHSA, патчи, затронутые версии | Токен Bearer |
60/час (5 000 с персональным токеном доступа) |
| 6 | MITRE ATT&CK | TTP, техники, меры противодействия | Нет | Опубликованных лимитов нет |
| 7 | AbuseIPDB | Уровень доверия IP, отчёты, провайдер, геоданные | Заголовок Key |
1 000 проверок/день |
| 8 | GreyNoise | Шум/сканирование IP-адресов, классификация | Заголовок key |
50 запросов/неделю |
| 9 | Shodan | Открытые порты, сервисы, баннеры, CVE | Параметр запроса key |
Базовые запросы |
| 10 | VirusTotal | Результаты много-антивирусного сканирования, репутация | Заголовок x-apikey |
500/день, 4/мин |
| 11 | MalwareBazaar | Образцы вредоносного ПО, хеши, сигнатуры | Заголовок Auth-Key |
Fair use (справедливое использование) |
| 12 | ThreatFox | IOCs, связанные с семействами вредоносного ПО | Заголовок Auth-Key |
Fair use |
| 13 | Ransomwhere | BTC-адреса и транзакции шифровальщиков | Нет | Опубликованных лимитов нет |
| 14 | URLScan.io | Сканирование URL, скриншоты, DOM | Заголовок API-Key |
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 | Уведомления о CVE от Red Hat | Нет | Опубликованных лимитов нет |
| 21 | Ubuntu Security | Трекер CVE Ubuntu | Нет | Опубликованных лимитов нет |
| 22 | VulnCheck NVD++ | CVE-записи по схеме NVD (прозрачный запасной вариант NVD) | Токен Bearer (бесплатный Community) |
В соответствии с тарифом VulnCheck Community |
| 23 | CIRCL hashlookup | Метаданные известных хороших файлов (NSRL + другие), hashlookup:trust |
Нет | Best-effort (по возможности) |
| 24 | HIBP Pwned Passwords | Количество скомпрометированных паролей через API k-anonymity range | Нет | Без жёстких лимитов |
# Запуск полного набора тестов
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
npx @modelcontextprotocol/inspector python -m cve_mcp.server
Открывается по адресу http://localhost:6274 — интерактивно тестируйте каждый инструмент, просматривайте входные схемы и форматы ответов.
src/cve_mcp/
├── server.py # Сервер FastMCP — все 27 определений @mcp.tool()
├── config.py # Конфигурация окружения и базовые URL API
├── models.py # Модели Pydantic (CVERecord, KEVEntry, EPSSScore, ...)
├── audit.py # Ротационный аудит-лог (50 МБ, 5 резервных копий)
├── api/
│ ├── nvd_client.py # REST API NVD v2.0
│ ├── osv_client.py # API уязвимостей пакетов OSV.dev
│ ├── epss_client.py # API FIRST EPSS
│ ├── kev_client.py # Каталог CISA KEV
│ ├── ip_intel.py # AbuseIPDB + GreyNoise
│ ├── domain_intel.py # crt.sh + пассивный DNS CIRCL
│ ├── shodan_client.py # Информация о хостах Shodan
│ ├── hash_intel.py # MalwareBazaar + VirusTotal
│ ├── url_safety.py # URLScan.io
│ ├── malware_intel.py # Поиск IOC в ThreatFox
│ ├── ransomware_intel.py# Поиск Bitcoin-адресов Ransomwhere
│ ├── exploit_intel.py # Поиск PoC/эксплойтов в GitHub
│ ├── vendor_advisory.py # Уведомления MSRC + Red Hat + Ubuntu
│ ├── attack_mapping.py # Маппинг MITRE ATT&CK STIX
│ ├── cve_timeline.py # Построитель таймлайна событий CVE
│ ├── dependency_scan.py # Сканирование зависимостей на основе OSV
│ ├── poc_checker.py # Поиск PoC в GitHub + Exploit-DB + Nuclei
│ ├── report_generator.py# Генератор отчётов об уязвимостях + матрица сравнения CVE
│ └── rate_limiter.py # Лимитер запросов на основе ведерного алгоритма для NVD
├── cache/
│ └── sqlite_cache.py # Асинхронный кэш SQLite с индивидуальным TTL для каждого ключа
└── utils/
├── validators.py # Нормализация CVE ID, валидация IP/хешей
└── risk_scorer.py # Вычисление комплексного показателя риска
| Ресурс | Время жизни (TTL) |
|---|---|
| Записи CVE (NVD) | 1 час |
| Оценки EPSS | 6 часов |
| Каталог KEV | 1 час |
| Информация об IP/доменах | 1 час |
| CSV Exploit-DB | 24 часа |
| Данные ATT&CK STIX | 24 часа |
| Информация оransomware | 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 и полезная нагрузка ответов никогда не записываются в аудит-логи.
Все инструменты сетевой разведки блокируют частные и зарезервированные диапазоны IP перед любым внешним запросом:
- 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 (RFC 1918)
- 127.0.0.0/8 (loopback), 169.254.0.0/16 (link-local)
- ::1, fc00::/7 (частные IPv6)
.env добавлен в .gitignore.Для разбора XML используется defusedxml, чтобы предотвратить атаки с помощью XML-бомб (миллиард улыбок, внедрение XXE).
# Убедитесь, что виртуальная среда активирована, и пакет установлен
pip install -e .
python --version # должна быть 3.10+
В Claude Desktop не отображается значок молота (🔨) - Проверьте синтаксические ошибки JSON (не должно быть запятых в конце) в вашей конфигурации. - Используйте абсолютные пути — относительные пути не работают молча. - Полностью выйдите из Claude Desktop (Cmd+Q / Alt+F4) и перезапустите его.
# Добавьте ваш бесплатный ключ NVD API в .env
NVD_API_KEY=ваш-ключ-здесь
# https://nvd.nist.gov/developers/request-an-api-key
Сервер автоматически ставит избыточные запросы в очередь, но с ключом вы получаете в 10 раз большую пропускную способность.
# Проверьте, что ваш ключ работает:
curl -H "key: ВАШ_КЛЮЧ" https://api.greynoise.io/v3/ip/8.8.8.8
# Сервер использует /v3/ip/{ip} — НЕ устаревший эндпоинт /v3/community
$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"
Приглашаем к участию.
server.py с декоратором @mcp.tool()utils/validators.pyapi/tests/@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
pytest tests/ -vЛицензия MIT — подробности смотрите в LICENSE.
Copyright (c) 2025-2026 Mahipal Jangra (mukul975)
Создано с 🔐 Mahipal Jangra · Берлин, Германия
Превращаем данные о безопасности в диалог.