mcpField
V
Vulnerability Exposure

Vulnerability Exposure

本地服务
github.com/MRFrazer25安全1今天更新

关于 Vulnerability Exposure

Vulnerability Exposure 是本地 MCP 服务,可用公开漏洞与信誉数据评估公网 IP、域名、CVE 和软件版本。它适合需要精确版本判定、报告核查及未检查来源说明的安全审查;不会扫描目标。

主要功能

  1. 01精确版本漏洞确认
  2. 02Ubuntu 和 Debian 回移补丁检查
  3. 03KEV、EPSS、补丁与利用信息
  4. 04公网 IP 和域名暴露查询
  5. 05基于证据的报告核查
  6. 06按调查隔离结果

适用场景

  1. 01升级前审查软件版本
  2. 02评估公网 IP 或域名信誉
  3. 03区分已确认与相关 CVE
  4. 04核验漏洞报告草稿

MCP 相关

通过本地 stdio 向 MCP 客户端提供只读调查与查询工具,以及 security_assessment 提示词。MCP 客户端中的模型解读工具结果并撰写报告。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mrfrazer25-vulnerability-exposure": {
"command": "uvx",
"args": [
"vulnerability-exposure-mcp"
],
"env": {
"SHODAN_API_KEY": "<SHODAN_API_KEY>",
"VIRUSTOTAL_API_KEY": "<VIRUSTOTAL_API_KEY>",
"ABUSEIPDB_API_KEY": "<ABUSEIPDB_API_KEY>",
"NVD_API_KEY": "<NVD_API_KEY>",
"GREYNOISE_API_KEY": "<GREYNOISE_API_KEY>"
}
}
}
}
启动命令uvx vulnerability-exposure-mcp
需要配置的环境变量
SHODAN_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypivulnerability-exposure-mcp1.0.1

工具

16

收录的工具列表 · 更新于 今天

参数类型必填说明
depthenum否Quick Scan | Standard Analysis | Comprehensive Investigation | Expert Deep Dive
targetstring是

详细介绍

漏洞暴露 MCP

Tests License: MIT vulnerability-exposure-mcp MCP server – quality and maintenance score on Glama Add to Cursor

一个 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、互联网注册机构和证书透明度日志中获取证据。

Claude 使用此服务运行“对 PHP 8.3.10 执行安全评估”:调用了 7 个工具,生成的报告通过了 check_report 检查,并包含执行摘要和关键发现表

同一报告中 PHP 8.3.10 已确认的 CVE,按 EPSS 从高到低排列,并显示严重程度、CISA KEV 状态和修复版本

它保留了原应用报告中所有确保可靠性的特性:

  • 与应用系统提示词相同的分析规则。由于客户端会截断较长的指令,服务的指令是简短摘要;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_checkNVD 确认影响此确切版本的 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_domainDNS A/AAAA 查询无
shodan_search开放端口、服务、版本和托管信息。没有密钥时使用 Shodan 免费 InternetDB(端口、软件和 CVE,不含横幅)完整结果需要 SHODAN_API_KEY
ip_owner通过区域互联网注册管理机构(RDAP)查询 IP 网络的注册对象无
threat_lists_checkSpamhaus DROP(被劫持或用于犯罪的网络)和 GreyNoise(互联网扫描器);GreyNoise 无法应答时使用 SANS ISC 作为备用无(GREYNOISE_API_KEY 可选)
subdomains从证书透明度日志获取域名下的主机名(使用 crt.sh,或在无法使用时改用 Cert Spotter)无
virustotal_checkVirusTotal 引擎的信誉信息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 调用次数
快速扫描81
标准分析(默认)152
全面调查254
专家深度分析406

所有工具均为只读。私有、保留和云元数据 IP 均会被拒绝。

每个工具会发送什么,以及发送到哪里

没有任何工具会联系目标。 每次查询都会向公开数据源查询目标,因此目标自身的服务器永远不会收到来自你的请求。这些服务会看到你查询的内容和你的 IP 地址(如果你使用密钥,也会看到你的密钥)。

工具发送内容发送至
resolve_domain域名你常用的 DNS 解析器
shodan_searchIP使用密钥时发送至 Shodan,不使用密钥时发送至 Shodan InternetDB
virustotal_checkIP 或域名VirusTotal
abuseipdb_checkIPAbuseIPDB
ip_ownerIPIANA,然后是区域互联网注册管理机构(RDAP)
threat_lists_checkIPGreyNoise;如果 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_searchCVE ID 或搜索词NVD(如果 NVD 不可用,则查询 Shodan CVEDB)
上述工具中的 CVE 补充信息仅 CVE IDFIRST(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_HOUR20对 Shodan、VirusTotal 和 AbuseIPDB 的每个服务,每小时最多调用次数;适用于所有调查,且不计入每个深度的上限
VULN_EXPOSURE_LOG_LEVELWARNING日志级别(日志输出到 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。