tenable-vpr-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tenable-vpr-mcpcompare VPR vs CVSS severity for our top findings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tenable VPR MCP
MCP server for Tenable.io / Tenable One (Vulnerability Management API), built for pentest and exposure-management reporting workflows.
Most Tenable MCP servers (including Tenable's own hosted Hexa AI MCP) expose the API 1:1 as tools. This one does that too, but adds three tools that aren't available anywhere else on the Exchange today:
Why this one exists: compare_vpr_reprioritization
Tenable reports two ratings for the same finding:
CVSS-based severity (
severity): the static, plugin-assigned bucketVPR (
vpr.score): threat-intel and exploitability-weighted score
When you re-scope a client's exposure using VPR instead of raw CVSS, some findings get escalated (low CVSS, actively exploited) and some get downgraded (high CVSS, no real-world exploitation activity). That before/after delta is exactly what you need to show in a CTEM / Tenable One POC deliverable, and building it by hand from raw exports is tedious.
compare_vpr_reprioritization pulls live findings from the vulnerability
workbench and returns a sorted table (escalations first) plus a summary
rollup, ready to drop into a report or slide.
{
"summary": {"escalated": 4, "downgraded": 11, "unchanged": 52, "unrated": 2, "total_findings": 69},
"findings": [
{
"plugin_id": 12345,
"plugin_name": "Example Actively-Exploited RCE",
"cvss_severity": "medium",
"vpr_score": 9.4,
"vpr_severity": "critical",
"rerating": "escalated",
"affected_assets": 5
}
]
}Related MCP server: cve-mcp
check_kev_epss_exposure
VPR is a Tenable proprietary score. This tool backs a re-prioritization
argument with two independent, public data sources instead: the CISA
KEV catalog (confirmed real-world exploitation) and FIRST.org EPSS
(30-day exploitation probability). Each finding gets a signal:
confirmed_exploited > high_probability > low_signal > no_cve_data,
sorted most urgent first, plus a ransomware-association flag from KEV.
Note: this does one extra Tenable API call per distinct plugin (to resolve
CVEs via workbenches.vuln_info), so keep limit modest for interactive
use.
scan_delta
Compares a baseline scan against a re-test scan by plugin ID and buckets
findings into fixed, still_open, and new_since_baseline, with a
remediation-rate percentage. Built for the re-test report every pentest
engagement ends with.
All tools
Tool | Description |
| List scans, optionally by folder |
| Latest results for one scan (hosts, findings, severity counts) |
| List known assets (capped) |
| Full detail for one asset by UUID |
| Workbench findings, filterable by severity / plugin family |
| Plugin description, solution, CVEs, VPR drivers |
| Asset tag categories and values |
| Nessus Agent inventory and status |
| CVSS vs. VPR before/after comparison table |
| CVSS/VPR findings cross-referenced against CISA KEV + EPSS |
| Baseline vs. re-test comparison for remediation validation |
This server is read-only by design: no scan launch, edit, or delete tools are exposed, so it's safe to point at a production tenant.
Filter arguments
search_vulnerabilities, compare_vpr_reprioritization, and
check_kev_epss_exposure share two optional filters:
severity— a list ofinfo/low/medium/high/critical. Case-insensitive; the server capitalizes them to the form the workbench API requires.plugin_family— a list of family names (["Windows", "Web Servers"]) or numeric family IDs. Names are resolved to IDs on first use, since the workbench only filters onplugin.family_id. An unknown name raises before any API call is made.
Output
Every tool returns the same envelope, so credential, authentication, and API errors reach the client as readable text instead of a crash:
{"ok": true, "data": ...}
{"ok": false, "error": "UnexpectedValueError: ..."}compare_vpr_reprioritization and check_kev_epss_exposure return a
summary rollup plus a findings list sorted most-urgent-first, in the
shape shown in the compare_vpr_reprioritization example above.
scan_delta returns fixed / still_open / new_since_baseline lists
plus a summary with counts and remediation_rate_pct. The remaining
tools return the Tenable API payload as-is under data.
Prerequisites
Python 3.10 or newer
A Tenable.io / Tenable One account that can generate API keys
Setup
See USAGE.md for full setup, client configuration, and example prompts. Quick version:
git clone https://github.com/Sabastiaz/tenable-vpr-mcp
cd tenable-vpr-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e .
export TIO_ACCESS_KEY=your_access_key
export TIO_SECRET_KEY=your_secret_key
# optional, defaults to https://cloud.tenable.com
export TIO_URL=https://cloud.tenable.com
tenable-vpr-mcpGenerate API keys in Tenable.io / Tenable One under Settings > My Account > API Keys. Never pass keys as CLI arguments; use environment variables only.
Claude Code
claude mcp add tenable-vpr -- tenable-vpr-mcp(with TIO_ACCESS_KEY / TIO_SECRET_KEY set in your shell environment
before running the command above).
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"tenable-vpr": {
"command": "tenable-vpr-mcp",
"env": {
"TIO_ACCESS_KEY": "your_access_key",
"TIO_SECRET_KEY": "your_secret_key"
}
}
}
}Limitations
The vulnerability workbench caps every query at 5,000 findings. This is a Tenable API limit, not a limit of this server — raising
limitpast 5,000 returns no more records. On a large tenant, filter byseverityorplugin_familyto keep each query under the cap, or the results are silently truncated. (pyTenable also marks the workbench module deprecated in favour of the exports API; moving to exports is the fix for full-tenant extraction and is not implemented yet.)check_kev_epss_exposureissues one extra Tenable API call per distinct plugin to resolve CVEs viaworkbenches.vuln_info. Keeplimitmodest (20–30) for interactive use. Plugin CVE lookups are not cached between calls; the CISA KEV catalog is cached in-process for six hours.Findings are aggregated per plugin, not per host.
affected_assetsis a host count; useget_scan_detailsorscan_deltawhen you need scan-scoped, per-host detail.search_vulnerabilitiesandcompare_vpr_reprioritizationread tenant-wide state, not the results of one scan.A VPR score of
Noneis reported asunrated, not as low risk. Tenable does not score every plugin — end-of-life and configuration findings frequently have no VPR at all, so they need to be reviewed separately rather than sorted to the bottom.No write operations (scan launch/configure, tag assignment, asset deletion) are implemented, by design.
Development
pip install -e ".[dev]"
pytest tests/ -v(Quote the extras — unquoted .[dev] is a glob pattern in zsh.)
The suite runs with no live Tenable / CISA / FIRST.org calls:
File | Covers |
| Normalizing the workbench's flat records and integer severities |
| CVSS vs. VPR comparison and bucket boundaries |
| KEV/EPSS signal classification and CVE extraction |
| Baseline vs. re-test bucketing |
| Severity capitalization and family-name resolution |
| Payloads captured verbatim from a live tenant |
Keep tests/fixtures.py faithful to what the API actually returns. The
workbench sends plugin_id / plugin_name / vpr_score at the top level
and severity as an integer 0–4, not the nested, label-severity shape
most Tenable API examples use — fixtures written in the nested shape pass
while every live call fails.
demo.py exercises all 11 tools through their real code path with the
Tenable client and KEV/EPSS lookups faked, so it needs no credentials:
python demo.pyLicense
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityBmaintenanceMCP server to query and manage CISA Known Exploited Vulnerabilities catalog with EPSS overlay, enabling vulnerability checks and remediation deadline tracking.Last updatedMIT
- AlicenseAqualityAmaintenanceUnifies NVD, EPSS, CISA KEV, GitHub Advisory, and OSV into a single MCP server, enabling AI agents to query vulnerability intelligence conversationally with 23 tools for incident response, prioritization, dependency audits, and threat monitoring.Last updated4132418MIT
- Alicense-qualityBmaintenanceA Model Context Protocol server for full Qualys portal management — expose VMDR, Policy Compliance, WAS, Cloud Agent, Container Security, TotalCloud, Patch Management, CSAM/GAV, EASM and administration to any MCP‑capable client.Last updatedMIT
- Flicense-qualityCmaintenanceMCP server for ConnectSecure vulnerability management, exposing 285 read-only tools to query assets, vulnerabilities, Active Directory, and more via natural language.Last updated
Related MCP Connectors
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Scan any public GitHub MCP-server repo for security issues. 37 MCP-specific L1 rules, 8 languages.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sabastiaz/tenable-vpr-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server