关于 Vulnerability Exposure
Vulnerability Exposure 是本地 MCP 服务,可用公开漏洞与信誉数据评估公网 IP、域名、CVE 和软件版本。它适合需要精确版本判定、报告核查及未检查来源说明的安全审查;不会扫描目标。
主要功能
- 01精确版本漏洞确认
- 02Ubuntu 和 Debian 回移补丁检查
- 03KEV、EPSS、补丁与利用信息
- 04公网 IP 和域名暴露查询
- 05基于证据的报告核查
- 06按调查隔离结果
适用场景
- 01升级前审查软件版本
- 02评估公网 IP 或域名信誉
- 03区分已确认与相关 CVE
- 04核验漏洞报告草稿
MCP 相关
通过本地 stdio 向 MCP 客户端提供只读调查与查询工具,以及 security_assessment 提示词。MCP 客户端中的模型解读工具结果并撰写报告。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx vulnerability-exposure-mcpSHODAN_API_KEY密钥Shodan key for service banners (optional: without it the free InternetDB is used)VIRUSTOTAL_API_KEY密钥VirusTotal key for IP and domain reputation (optional)ABUSEIPDB_API_KEY密钥AbuseIPDB key for IP abuse reports (optional)NVD_API_KEY密钥NVD key for a higher rate limit, so version checks run faster (optional)GREYNOISE_API_KEY密钥GreyNoise key for more scanner lookups (optional; work-email accounts only)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
16收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| depth | enum | 否 | Quick Scan | Standard Analysis | Comprehensive Investigation | Expert Deep Dive |
| target | string | 是 |
详细介绍
漏洞暴露 MCP
一个 MCP 服务,用于检查公共 IP、域名、CVE 和软件版本是否存在已确认的漏洞和暴露风险。只有在 NVD 的版本范围确认某个版本受影响时,CVE 才会被判定为影响该版本;其他情况都会列出供审核,因此不会把相关或供应商范围内的 CVE 错报成与你有关的漏洞。
这是 Vulnerability Exposure Analyzer 的 MCP 版本。该应用需要 Cohere 密钥来运行自己的 Agent;此服务不需要任何大模型密钥,因为 MCP 客户端中的模型会调用工具并撰写报告。
它通过 stdio 在本地运行,因此适用于可启动本地 MCP 服务的客户端:Claude Desktop、Claude Code、Cursor、Windsurf、VS Code、LM Studio 等。ChatGPT 和 claude.ai 连接器等仅支持 Web 的客户端只接受远程(HTTPS)服务;此服务并未托管,因为公开部署需要自行进行身份验证,以防任何人使用你的 API 密钥。
输入公共 IP、域名、CVE ID(CVE-2026-111497)或产品和版本(PHP 8.3.10、OpenSSH 8.9p1 Ubuntu-3ubuntu0.6),即可从 NVD、CISA KEV、FIRST EPSS、Exploit-DB、OSV.dev、Shodan、VirusTotal、AbuseIPDB、Spamhaus、GreyNoise、SANS ISC、互联网注册机构和证书透明度日志中获取证据。


它保留了原应用报告中所有确保可靠性的特性:
- 与应用系统提示词相同的分析规则。由于客户端会截断较长的指令,服务的指令是简短摘要;
investigate_target会通过analyst_guide返回完整规则和报告格式。 - 基线查询在代码中运行,因此信誉和暴露检查绝不会依赖模型记得执行。
- 分析深度(快速扫描、标准、全面、专家)决定工具调用预算、各服务的上限,以及每个结果保留的详细程度。模型无法覆盖这些限制。
- 根据数据而非模型计算关键事实,包括将 CISA KEV 划分为已确认影响此目标和相关,因此无论使用哪个模型,结果数字都相同。
- 比单独使用 NVD 更新、更准确:Ubuntu 和 Debian 软件包会根据发行版自己的修复数据进行检查,因此回移植的修复也会被计入;NVD 尚未分析的近期 CVE 会列出供审核;对于 Next.js、React 和 Django 等软件包,在 NVD 收录相关信息之前,GitHub 公告会补足信息。每个 CVE 都会标明补丁状态以及是否已发布利用代码。
- 每个
investigation_id对应一次独立调查:这是investigate_target返回的随机标识,因此多个共享同一服务进程的聊天不会混淆证据。
有何不同
大多数 CVE 服务会按关键字或产品搜索 NVD,并返回所有匹配项,因此针对 nginx 1.30.0 的报告可能会列出多年前就已修复的 CVE。这个服务:
- 检查精确版本。 只有当 NVD 的版本范围包含该版本时,CVE 才会被确认为相关;对于 Ubuntu 或 Debian 软件包,还会排除发行版通过向后移植补丁修复的 CVE。关键字和产品级别的匹配项会单独列为相关项。
- 整合修复决策所需的上下文。 一次调用即可返回 CISA KEV 状态、EPSS、最低安全版本、已发布的漏洞利用和补丁状态,无需模型拼接多个查询结果。
- 检查报告,而不只是数据。 在你查看草稿前,
check_report会标记引用工具未返回的 CVE、把相关 CVE 称为已确认,或错误描述修复版本或漏洞利用的草稿。 - 说明未检查的内容。 每份报告都会列出未检查的来源(例如缺少密钥、查询失败),因此不会把缺失结果说成不存在问题。
它不会做什么
- 不进行扫描。 它不会连接目标。所有信息都来自公开数据库和目标的 DNS 记录,因此无法发现 Shodan 未发现的服务,也无法发现未告知它的软件中的漏洞。
- 仅支持公开目标。 私有、本地和保留 IP 地址,以及本地主机名均会被拒绝。
- 不进行身份验证或内部检查。 它无法查看已安装的软件包、配置或任何登录后才能访问的内容。此类检查请使用主机上的扫描器。
- 不利用漏洞或修复问题。 它会报告目标的公开信息,以及需要升级到的版本,但不会测试漏洞利用,也不会更改任何内容。
- 时效性取决于数据源。 NVD 尚未分析的 CVE 无法按版本确认,会列出供审核。
工具
| 工具 | 功能 | 所需密钥 |
|---|---|---|
investigate_target | 从这里开始。 对目标进行分类、设定深度、运行基线查询,并返回 investigation_id 和后续步骤 | 取决于目标 |
version_specific_vulnerability_check | NVD 确认影响此确切版本的 CVE,按 KEV、EPSS 和 CVSS 排序,并列出每项漏洞的修补状态、已发布的漏洞利用(Exploit-DB)以及最低安全版本。对于 Next.js、React、Express 和 Django 等软件包,还会补充 NVD 尚未收录的 GitHub 安全公告 | 无(NVD 密钥可选) |
distro_patch_check | 根据发行版自身的数据,检查 Ubuntu 或 Debian 软件包(例如 SSH 横幅中的 openssh 8.9p1-3ubuntu0.6)是否已通过回移修复各项 CVE | 无 |
nvd_lookup | 单个 CVE 的完整 NVD 记录,包含 KEV 和 EPSS | 无 |
cisa_kev_check | 根据 CVE ID 或产品名称查询 CISA 已知遭利用漏洞 | 无 |
cve_search | 按关键词搜索近期 NVD CVE | 无 |
resolve_domain | DNS A/AAAA 查询 | 无 |
shodan_search | 开放端口、服务、版本和托管信息。没有密钥时使用 Shodan 免费 InternetDB(端口、软件和 CVE,不含横幅) | 完整结果需要 SHODAN_API_KEY |
ip_owner | 通过区域互联网注册管理机构(RDAP)查询 IP 网络的注册对象 | 无 |
threat_lists_check | Spamhaus DROP(被劫持或用于犯罪的网络)和 GreyNoise(互联网扫描器);GreyNoise 无法应答时使用 SANS ISC 作为备用 | 无(GREYNOISE_API_KEY 可选) |
subdomains | 从证书透明度日志获取域名下的主机名(使用 crt.sh,或在无法使用时改用 Cert Spotter) | 无 |
virustotal_check | VirusTotal 引擎的信誉信息 | VIRUSTOTAL_API_KEY |
abuseipdb_check | 滥用举报和可信度评分 | ABUSEIPDB_API_KEY |
get_key_facts | 根据本次调查结果计算事实,以及 CISA KEV 已确认/相关项的区分 | 无 |
check_report | 根据调查数据检查报告草稿,不涉及模型,并列出查询结果不支持的 CVE ID、版本、EPSS 数值和声明(生命周期结束、无修补程序、面向互联网) | 无 |
check_api_keys | 显示已设置哪些密钥(绝不显示密钥值)以及获取其余密钥的途径 | 无 |
此外还有一个 security_assessment 提示词(目标 + 深度),用于加载分析员规则和工作流:investigate_target → 将其 investigation_id 传给每项查询 → get_key_facts → 起草报告 →
check_report → 修正其标记的问题。各项查询也可以独立使用,无需 ID:它们会采用下方的标准结果大小和每小时上限,但不受工具调用预算限制,也不会计入任何调查的关键事实。
| 深度 | 工具调用次数 | Shodan/VirusTotal/AbuseIPDB 调用次数 |
|---|---|---|
| 快速扫描 | 8 | 1 |
| 标准分析(默认) | 15 | 2 |
| 全面调查 | 25 | 4 |
| 专家深度分析 | 40 | 6 |
所有工具均为只读。私有、保留和云元数据 IP 均会被拒绝。
每个工具会发送什么,以及发送到哪里
没有任何工具会联系目标。 每次查询都会向公开数据源查询目标,因此目标自身的服务器永远不会收到来自你的请求。这些服务会看到你查询的内容和你的 IP 地址(如果你使用密钥,也会看到你的密钥)。
| 工具 | 发送内容 | 发送至 |
|---|---|---|
resolve_domain | 域名 | 你常用的 DNS 解析器 |
shodan_search | IP | 使用密钥时发送至 Shodan,不使用密钥时发送至 Shodan InternetDB |
virustotal_check | IP 或域名 | VirusTotal |
abuseipdb_check | IP | AbuseIPDB |
ip_owner | IP | IANA,然后是区域互联网注册管理机构(RDAP) |
threat_lists_check | IP | GreyNoise;如果 GreyNoise 无法响应,则发送至 SANS ISC。Spamhaus DROP 会完整下载,因此不会向 Spamhaus 发送 IP |
subdomains | 域名 | crt.sh;如果 crt.sh 不可用,则发送至 Cert Spotter |
version_specific_vulnerability_check | 软件名称和版本 | NVD;对于 Next.js 或 Django 等框架软件包,还会查询 OSV.dev |
distro_patch_check | 软件包名称和版本 | OSV.dev |
nvd_lookup、cve_search | CVE ID 或搜索词 | NVD(如果 NVD 不可用,则查询 Shodan CVEDB) |
| 上述工具中的 CVE 补充信息 | 仅 CVE ID | FIRST(EPSS)。CISA KEV 目录和 Exploit-DB 索引会完整下载,因此不会向它们发送任何内容 |
investigate_target | 根据目标运行适用的查询,如上所述 | |
get_key_facts、check_report、check_api_keys | 无 | 在你的计算机上运行 |
安装
需要 Python 3.11+。设置分三步:安装、按需保存密钥、连接 AI 客户端。
最简单的方式是使用 uv,它会直接从 PyPI 运行服务,无需进行任何设置:
uvx vulnerability-exposure-mcp keys status
或者使用 pip 安装(pip install vulnerability-exposure-mcp),并以相同方式使用 vulnerability-exposure-mcp 命令。如需从源代码运行,请参阅下方的从源代码安装。
免费密钥:Shodan、VirusTotal、AbuseIPDB、NVD(可选,可提高速率限制)、GreyNoise(可选;GreyNoise 只向使用工作邮箱注册的账户提供密钥,不向 Gmail 等类似邮箱提供。没有密钥时,每天可查询 10 次,其余查询由 SANS ISC 处理)。CVE 和软件检查无需任何密钥即可运行。IP 和域名检查也可以在没有密钥的情况下运行,使用 Shodan 的免费 InternetDB、互联网注册管理机构、Spamhaus DROP 和 GreyNoise;此时报告会将 VirusTotal 和 AbuseIPDB 列为未检查。
安全存储密钥
密钥可以存放在操作系统的凭据存储区(Windows 凭据管理器、macOS 钥匙串或 Linux 上的 Secret Service),而不是配置文件中。请在你自己的终端中运行此命令;密钥将在隐藏提示中输入,并直接存入存储区:
uvx vulnerability-exposure-mcp keys set shodan
根据需要,对 virustotal、abuseipdb、nvd 和 greynoise 执行相同操作。keys status 会显示哪些密钥已存储(绝不会显示密钥值),keys delete NAME 会删除指定密钥。以这种方式存储密钥后,请将下方的 env 块留空。若设置了环境变量,其优先级高于已存储的密钥。
服务器、Docker 容器和其他无头 Linux 系统通常没有凭据存储区。在这些系统上,keys set 会提示这一点,此时应将密钥填入 env 块。
连接客户端
通过客户端的 env 块传递密钥,不要在命令行中传递。
Claude Desktop
从最新版本下载 vulnerability-exposure-mcp-<version>.mcpb 并打开:Claude Desktop 会安装它,并通过表单询问你是否提供密钥(可选)。也可以添加下面的 JSON 配置。
Claude Code
先存储密钥(见上文),确保不会在命令行中传递密钥,然后运行:
claude mcp add vulnerability-exposure -- uvx vulnerability-exposure-mcp
之后启动新的 Claude Code 会话:MCP 服务会在会话启动时加载。
也可以将其安装为插件,插件会通过遮蔽输入的提示词询问各个密钥(可选),并将密钥保存在凭据存储区中:
/plugin marketplace add MRFrazer25/Vulnerability-Exposure-MCP
/plugin install vulnerability-exposure@vulnerability-exposure
Cursor、Windsurf、VS Code、Claude Desktop 和其他使用 JSON 配置的客户端
将以下内容添加到客户端的 MCP 配置中(在 Claude Desktop 中:Settings → Developer → Edit Config),然后重启客户端。若密钥已存储在凭据存储区中,请将 env 值留空或删除该块。
{
"mcpServers": {
"vulnerability-exposure": {
"command": "uvx",
"args": ["vulnerability-exposure-mcp"],
"env": {
"SHODAN_API_KEY": "",
"VIRUSTOTAL_API_KEY": "",
"ABUSEIPDB_API_KEY": "",
"NVD_API_KEY": "",
"GREYNOISE_API_KEY": ""
}
}
}
}
(VS Code 在 .vscode/mcp.json 中使用 "servers",而不是 "mcpServers"。)
Docker
使用 docker build -t vulnerability-exposure-mcp . 构建一次镜像,然后让客户端连接到它。容器没有凭据存储区,因此密钥需要放在 env 中;将密钥列为不带值的 -e 名称,可传递其值而无需在命令行中写出:
{
"mcpServers": {
"vulnerability-exposure": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "SHODAN_API_KEY", "-e", "VIRUSTOTAL_API_KEY", "-e", "ABUSEIPDB_API_KEY",
"-e", "NVD_API_KEY", "-e", "GREYNOISE_API_KEY", "vulnerability-exposure-mcp"],
"env": {
"SHODAN_API_KEY": "",
"VIRUSTOTAL_API_KEY": "",
"ABUSEIPDB_API_KEY": "",
"NVD_API_KEY": "",
"GREYNOISE_API_KEY": ""
}
}
}
}
从源代码运行
git clone https://github.com/MRFrazer25/Vulnerability-Exposure-MCP.git
cd Vulnerability-Exposure-MCP
python -m venv .venv
.venv/Scripts/python -m pip install -e . # macOS/Linux: .venv/bin/python
之后,在上述步骤中提到 uvx vulnerability-exposure-mcp 的位置,改用 .venv/Scripts/python -m vulnerability_exposure_mcp(在 macOS 或 Linux 上使用 .venv/bin/python),并在客户端配置中填写该 Python 的完整路径,例如 "command": "C:/path/to/Vulnerability-Exposure-MCP/.venv/Scripts/python.exe", "args": ["-m", "vulnerability_exposure_mcp"]。
然后提问:“对 PHP 8.3.10 进行安全评估”,或使用 security_assessment 提示词。
设置
| 变量 | 默认值 | 含义 |
|---|---|---|
VULN_EXPOSURE_QUOTA_PER_HOUR | 20 | 对 Shodan、VirusTotal 和 AbuseIPDB 的每个服务,每小时最多调用次数;适用于所有调查,且不计入每个深度的上限 |
VULN_EXPOSURE_LOG_LEVEL | WARNING | 日志级别(日志输出到 stderr) |
在同一调查中重复完全相同的调用时,会返回先前的结果而不消耗配额。大型结果会被截断至约 15,000 个字符。
安全说明
- 工具结果包含第三方文本(横幅、主机名、CVE 描述)。这些内容会作为数据返回;服务会指示模型绝不要遵循其中的指令,并在模型看到之前,将横幅、主机名和注册表记录中类似指令的文本替换为
[instruction-like text removed]。不过,请使用会显示工具调用的客户端。 check_report会在代码中根据调查数据检查报告草稿,并列出没有查询依据的 ID、版本、EPSS 数值和声明。- 若要在你批准的 MCP 服务工具描述发生更改(工具投毒)时收到提醒,可以通过 Trail of Bits 的 mcp-context-protector 运行该服务。
- 每次调用时,密钥都会从环境或操作系统凭据存储中读取,绝不会记录到日志中,并且会从错误消息中移除。目标也不会记录到日志中;失败时只记录错误,不包含回溯信息。
- 查询失败会作为工具错误(
isError)返回,并且每个工具都标记为只读。 - 此服务仅使用 stdio 通信,因此会在你的计算机上运行,只有你的客户端能够访问它。
- 不会在磁盘上存储任何内容,也不会收集遥测数据。目标仅会发送给每次查询所使用的数据提供方;有关每家提供方会收到哪些信息,请参阅 PRIVACY.md。
- 每次推送和拉取请求都会运行测试,并使用 pip-audit 检查已知存在漏洞的依赖项。依赖项版本已固定,并由 Dependabot 更新。若要报告问题,请参阅 SECURITY.md。
负责任地使用
仅用于正当的安全研究、防御性安全工作和教育。仅调查你拥有或获准评估的系统,并遵守每家数据提供方的服务条款。自动化分析结果可能有误;采取行动前请先核实。
数据来源和条款
查询使用你自己的账户和密钥,因此各数据提供方的条款直接适用于你。
| 来源 | 用途 | 需知条款 |
|---|---|---|
| Shodan | 开放端口、服务、版本 | 使用你自己的 Shodan 账户和密钥。没有账户和密钥时,InternetDB 可免费用于非商业用途 |
| 区域互联网注册管理机构(RDAP) | 查询 IP 网络的注册对象 | 公共注册数据,可通过 IANA 的 RDAP 引导信息查找 |
| Spamhaus DROP | 被劫持或涉及犯罪的网络 | 免费;使用时请注明 Spamhaus。按照 Spamhaus 的要求,每天下载次数不超过一次 |
| GreyNoise | 互联网扫描器和已知商业服务 | 社区 API:无需密钥,每天可查询 10 次;申请密钥需要工作邮箱账户 |
| crt.sh、Cert Spotter | 从证书透明度日志中查找子域名 | 免费公开查询;Cert Spotter 允许个人用户每小时进行少量无需密钥的查询 |
| Shodan CVEDB | 无法访问 NVD 时查询 CVE 详情 | 免费用于非商业用途 |
| SANS ISC(DShield) | GreyNoise 无法答复时查询某个 IP 的攻击报告 | 免费且无需密钥;数据采用 CC BY-NC-SA 4.0 许可(限非商业用途),且 SANS 要求在用户代理中提供联系信息 |
| Exploit-DB | 查询是否已发布某个 CVE 的漏洞利用代码 | 索引每天下载次数不超过一次;GPL-2.0-or-later |
| 通过 OSV.dev 获取的 GitHub Advisory Database 和 PyPA Advisory Database | 在 NVD 收录之前查询 npm、PyPI、Maven 和 RubyGems 软件包的安全公告 | 免费且无需密钥;数据采用 CC BY 4.0 许可 |
| VirusTotal | 查询安全引擎的信誉评估 | 免费公共 API 每分钟允许查询 4 次、每天 500 次,且不得用于商业产品或服务 |
| AbuseIPDB | 查询 IP 的滥用报告 | 免费套餐仅限非商业个人项目;请勿重新发布其数据 |
| NVD(NIST) | CVE 详情和受影响版本 | 公共数据;可选用免费 API 密钥 |
| CISA KEV | 已知遭利用的漏洞 | 美国政府公共数据 |
| FIRST EPSS | 漏洞遭利用的概率 | FIRST 的 EPSS SIG 免费发布 |
| OSV.dev | 已安装软件包的 Ubuntu 和 Debian 修复信息 | 免费且无需密钥;数据来自各发行版的安全团队(Ubuntu 的数据采用 CC BY-SA 4.0 许可) |
多个免费套餐仅限非商业用途:VirusTotal、AbuseIPDB,以及 Shodan 的 InternetDB 和 CVEDB。如果在工作中使用,或将其用于付费产品,请选用允许商业用途的套餐。
本产品使用 NVD API 数据,但未经 NVD 认可或认证。
Spamhaus DROP 数据的版权归 The Spamhaus Project 所有。软件包安全公告来自 GitHub Advisory Database(CC BY 4.0)、PyPA Advisory Database(CC BY 4.0)和 Ubuntu 的安全通知(CC BY-SA 4.0,版权归 Canonical 所有),均通过 OSV.dev 获取;SANS ISC 数据采用 CC BY-NC-SA 4.0 许可。CVE® 是 The MITRE Corporation 的注册商标。
Vulnerability Exposure MCP 是一个独立项目,与 Shodan、VirusTotal(Google)、AbuseIPDB、NIST、CISA、FIRST、MITRE、Spamhaus、GreyNoise、SANS、OffSec(Exploit-DB)、GitHub、Google(OSV.dev)、Sectigo(crt.sh)、SSLMate(Cert Spotter)或互联网注册管理机构均无关联,未获其认可,也未受其赞助。此处仅使用这些名称说明本项目兼容的服务。
测试
.venv/Scripts/python -m pip install -e ".[dev]"
.venv/Scripts/python -m pytest -q
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。