CVE MCP Server
The CVE MCP Server is an AI-powered security intelligence platform consolidating 27 tools across 21 data sources for vulnerability research, threat analysis, and risk prioritization.
CVE Lookup & Search
Fetch full CVE records from NVD including CVSS scores, descriptions, weaknesses, and affected products
Search CVEs by keyword, product, severity, or date range
Get one-page CVE summaries and full lifecycle timelines (publication, KEV addition, patch lag, exploit window)
Parse and explain CVSS v2, v3.x, and v4.0 vector strings
Fetch vendor advisories from Microsoft MSRC, Red Hat, and Ubuntu
Exploit & Attack Intelligence
Retrieve EPSS scores (exploitation probability) for one or more CVEs
Check CISA KEV catalog status for active exploitation
Find PoC exploits across GitHub, Exploit-DB, and Nuclei templates
Map CVEs to MITRE ATT&CK techniques, tactics, and associated threat groups
Risk Scoring & Reporting
Calculate composite risk scores (0β100) using CVSS, EPSS, KEV status, and PoC availability
Compare and prioritize multiple CVEs with ranked patch recommendations
Generate executive, technical, or full-format vulnerability reports with remediation guidance
Network Intelligence
Check IP reputation via AbuseIPDB and GreyNoise (abuse score, ISP, Tor status, noise classification)
Shodan host lookups for open ports, services, OS, and detected CVEs
Passive DNS lookups (CIRCL PDNS) and domain certificate transparency logs (crt.sh)
Threat Intelligence
Look up file hashes (MD5/SHA1/SHA256) against MalwareBazaar and VirusTotal
Check URL/domain safety via URLScan.io
Query ThreatFox for malware family attribution by IP, domain, URL, or hash
Look up Bitcoin addresses against Ransomwhere for ransomware association
DevSecOps & Dependency Scanning
Scan application dependencies (PyPI, npm, Maven, etc.) via OSV.dev for known CVEs
Scan Alpine, Debian, or Ubuntu container OS packages for vulnerabilities
Search GitHub repositories for exposed credentials or secrets
Server Health
Verify NVD connectivity, KEV catalog status, and cache statistics
Provides tools for retrieving EPSS (Exploit Prediction Scoring System) exploitation probability scores and percentiles for CVEs, which are maintained by the FIRST organization.
Provides tools for searching GitHub for public proof-of-concept exploits and exploit code repositories, and checking patch availability and security advisories through GitHub Security Advisories (GHSA).
Provides tools for scanning Python package names and versions against vulnerability databases to identify known security issues in dependencies through the PyPI ecosystem.
Provides tools for analyzing file hashes, URLs, domains, or IP addresses against 70+ antivirus engines and threat intelligence databases for malware detection and reputation checking.
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., "@CVE MCP ServerWhat's the risk score for CVE-2024-3400 and should we patch it immediately?"
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.
π‘οΈ CVE MCP Server

AI-powered security intelligence at your fingertips β 28 tools + a one-call triage_cve orchestrator, 24 data sources, one protocol.
A production-grade Model Context Protocol (MCP) server that turns Claude into a full-spectrum security analyst. Instead of juggling 15+ browser tabs across NVD, EPSS, CISA KEV, Shodan, VirusTotal, and GreyNoise, ask Claude one question and get correlated intelligence in seconds. Built with Python, FastMCP, httpx, aiosqlite, Pydantic v2, and defusedxml.
The problem: Triaging a single CVE means querying NVD for CVSS scores, EPSS for exploitation probability, CISA KEV for active exploitation status, GitHub for patches, and VirusTotal for malware associations β then mentally correlating everything. For 50 CVEs, that's an entire day lost.
The solution: CVE MCP Server gives Claude direct access to 28 security tools across 24 APIs β fronted by the triage_cve one-call orchestrator. Ask "Should we patch CVE-2024-3400?" and Claude fans out to every relevant source in parallel, calculates a composite risk score (with a CISA KEV hard override), and delivers a prioritized recommendation with evidence.
π GARS-2026 β Global Agentic AI Readiness Survey
I'm running a global academic study measuring how ready security professionals, developers, and enterprise teams actually are for agentic AI β MCP servers, tool calling, governance, and human-in-the-loop workflows.
If you use this repo, your response would be a genuinely valuable data point.
π Take the survey (10 min): Survey
60 questions Β· Anonymous Β· Supervised by SRH Berlin
You get 50 Casky Tokens for early access to casky.ai
Results published open access under CC-BY 4.0
Related MCP server: cve-mcp
π Table of contents
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββAll traffic is outbound HTTPS only β no inbound ports are opened. API keys are loaded from environment variables and never logged. Private/internal IP addresses are blocked from all lookup tools.
π Tool catalog (28 tools)
β Orchestration (v0.2.0) β start here
Tool | Description | API Key Required | Example Usage |
| One-call triage that fans out NVD + EPSS + CISA KEV (+ public PoC for | Free / No key (key recommended) |
|
Also exposed via MCP primitives β Resources:
kev://catalog,epss://scores/{cve_id},manifest://tool-hash(SHA-256 over the registered tool surface, for tamper detection). Prompts:patch_decision,compare_and_prioritize,dependency_triage.
Core Vulnerability Intelligence (8 tools)
Tool | Description | API Key Required | Example Usage |
| Fetch detailed CVE record from NVD including CVSS scores, CWEs, affected products, references, and timeline | Free / No key (key recommended) |
|
| Search NVD for CVEs by keyword, product name, severity, or date range | Free / No key (key recommended) |
|
| Get EPSS exploitation probability (0β1) and percentile for one or more CVEs | Free / No key |
|
| Check whether a CVE appears in CISA's Known Exploited Vulnerabilities catalog | Free / No key |
|
| Parse and explain a CVSS v3.1 vector string with per-metric breakdown | Free / No key |
|
| Look up Common Weakness Enumeration details by CWE ID from embedded database | Free / No key |
|
| Extract and categorize all reference links for a CVE (patches, advisories, exploits) | Free / No key (key recommended) |
|
| Batch-fetch details for up to 20 CVEs in a single call with parallel enrichment | Free / No key (key recommended) |
|
Exploit & Attack Intelligence (4 tools)
Tool | Description | API Key Required | Example Usage |
| Search GitHub for public proof-of-concept exploits and exploit code repositories |
|
|
| Map a CVE or CWE to relevant MITRE ATT&CK techniques, tactics, and mitigations | Free / No key |
|
| Determine if known proof-of-concept code exists for a CVE across multiple sources |
|
|
| Retrieve CAPEC attack pattern details associated with a CWE or CVE | Free / No key |
|
Phase 3: Advanced Risk & Reporting (4 tools)
Tool | Description | API Key Required | Example Usage |
| Compute composite 0β100 risk score using CVSS, EPSS, KEV status, and PoC availability | Free / No key (key recommended) |
|
| Generate a formatted executive security report for one or more CVEs with recommendations | Free / No key (key recommended) |
|
| Rank a list of CVEs by composite risk score for triage prioritization | Free / No key (key recommended) |
|
| Retrieve trending CVEs based on high EPSS scores and recent KEV additions | Free / No key |
|
Network Intelligence (4 tools)
Tool | Description | API Key Required | Example Usage |
| Check IP address abuse history and confidence score via AbuseIPDB |
|
|
| Query GreyNoise for IP scan/attack activity, classification, and associated CVEs |
|
|
| Get open ports, services, banners, and vulnerabilities for an IP via Shodan |
|
|
| Retrieve historical DNS resolution data for a domain from CIRCL Passive DNS |
|
|
Threat Intelligence (4 tools)
Tool | Description | API Key Required | Example Usage |
| Analyze file hashes, URLs, domains, or IPs against 70+ antivirus engines |
|
|
| Search MalwareBazaar for malware samples by hash, tag, or signature |
|
|
| Query ThreatFox for Indicators of Compromise linked to malware families |
|
|
| Look up ransomware payment addresses and transaction data from Ransomwhere | Free / No key |
|
DevSecOps (3 tools)
Tool | Description | API Key Required | Example Usage |
| Scan package names and versions against OSV.dev for known vulnerabilities | Free / No key |
|
| Search GitHub Security Advisories by ecosystem, package, or severity |
|
|
| Submit a URL for scanning or retrieve previous scan results from URLScan.io |
|
|
π¦ Installation
Prerequisites
Python 3.10+ (3.11 or 3.12 recommended)
pip or uv package manager
Git for cloning the repository
A terminal with access to environment variables
Step-by-step setup
# 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.serverUsing uv (faster alternative)
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 .envWith test dependencies
pip install -e ".[test]"π API keys setup
API keys are organized by priority β get the Tier 1 keys first for maximum coverage with free tools, then progressively add Tier 2 and Tier 3 as needed.
Tier 1: High priority (free, instant access, maximum coverage)
ENV Variable | Enables | How to Get | Free Tier Limits | Required? |
| 10Γ faster NVD lookups (50 req/30s vs 5) | 50 requests per 30 seconds | Optional but strongly recommended | |
| GitHub Advisory search + exploit PoC search | 5,000 requests/hour | Optional (60/hr without) |
Tier 2: Recommended (free accounts, significant value)
ENV Variable | Enables | How to Get | Free Tier Limits | Required? |
| IP reputation lookups | 1,000 checks/day | Required for IP tools | |
| File/URL/domain/IP malware scanning | 500 lookups/day, 4/min | Required for VT tools | |
| IP noise/scan activity intelligence | 50 queries/week (community) | Required for GreyNoise tools | |
| Host/port/service reconnaissance | Basic host lookups (free tier) | Required for Shodan tools |
Tier 3: Optional (extended intelligence)
ENV Variable | Enables | How to Get | Free Tier Limits | Required? |
| URL scanning and website analysis | 5,000 public scans/day | Optional | |
| CIRCL Passive DNS lookups | Partner access only | Optional | |
| CIRCL Passive DNS authentication | Provided with CIRCL registration | Partner access only | Optional |
β‘ Zero-key start: Eight tools work without any API key β EPSS, CISA KEV, OSV.dev, MITRE ATT&CK, CWE lookups, CVSS parsing, Ransomwhere, and NVD (at reduced rate). You can start using the server immediately and add keys progressively.
βοΈ Configuration
Environment variables (.env.example)
# NVD API key β free at https://nvd.nist.gov/developers/request-an-api-key
# Without key: 5 req/30s | With key: 50 req/30s
NVD_API_KEY=
# GitHub token β increases rate limit from 60/hr to 5000/hr (no scopes needed)
GITHUB_TOKEN=
# Threat intelligence keys (all optional β tools degrade gracefully without them)
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 β uses /v3/ip/{ip} endpoint (NOT the deprecated /v3/community)
GREYNOISE_API_KEY= # https://viz.greynoise.io/signup
# CIRCL Passive DNS β requires partner registration
CIRCL_PDNS_USER=
CIRCL_PDNS_PASS=
# Optional overrides
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 errorsClaude Desktop configuration
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"
}
}
}
}β οΈ Important: Always use absolute paths. Fully quit Claude Desktop (Cmd+Q / Alt+F4) after changing the config β reloading is not enough.
Claude Code configuration
# Basic setup
claude mcp add cve-mcp -- python -m cve_mcp.server
# With environment variables (repeat -e for each key)
claude mcp add cve-mcp -e NVD_API_KEY=your_key -e VULNCHECK_TOKEN=your_token -- python -m cve_mcp.server
# Or just run from the project directory β python-dotenv auto-loads .env on startup
# Verify it's connected
claude mcp listπ Quick start
Step 1: Install (2 minutes)
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 .Step 2: Test with free tools first
No .env file needed. Add the server to Claude Desktop or Claude Code and try:
"What is CVE-2021-44228? Is it actively exploited?"
Claude will use lookup_cve (NVD), get_epss_score (EPSS), and check_kev (CISA KEV) β all free, no keys required.
"Scan these Python packages for vulnerabilities: requests 2.28.0, flask 2.2.0, django 3.2.0"
Step 3: Add your first key for 10Γ performance
echo 'NVD_API_KEY=your-key-here' > .envRequest a free NVD key at nvd.nist.gov β instant via email, increases rate limit from 5 to 50 requests per 30 seconds.
Step 4: Full power mode
Once you've added Tier 1 and Tier 2 keys:
"Calculate the risk score for CVE-2024-3400 and tell me if we should patch immediately."
π¬ Usage examples
Scenario 1: "Should we patch Log4Shell immediately?"
You: Analyze if CVE-2021-44228 (Log4Shell) needs immediate patching. Give me the risk score and your recommendation.
Claude orchestrates multiple tools behind the scenes:
β 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 IMMEDIATELYClaude's response: "CVE-2021-44228 scores 97/100 (CRITICAL). Remote code execution in Apache Log4j, CVSS 10.0, 97.5% EPSS probability, confirmed active exploitation in CISA KEV including ransomware campaigns, 300+ public exploits. Patch immediately."
Scenario 2: "Scan my Python requirements.txt"
You: Scan these dependencies: 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 packagesClaude's response: "Found 12 vulnerabilities across your packages. Immediate action: Django 3.2.0 (3 critical CVEs including SQL injection), Pillow 9.0.0 (heap overflow), cryptography 37.0.0 (OpenSSL chain). Upgrade to: django>=4.2.16, pillow>=10.3.0, cryptography>=42.0.0."
Scenario 3: "Investigate a suspicious IP"
You: Investigate suspicious IP 185.220.101.34 β is it malicious?
β 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: LinuxClaude's response: "185.220.101.34 is a known Tor exit node rated 100% malicious by AbuseIPDB with 4,832 abuse reports. GreyNoise confirms active scanning for CVE-2024-3400 (Palo Alto) and CVE-2023-46805 (Ivanti). Recommendation: Block at firewall."
Scenario 4: "Generate an executive security report"
You: Generate an executive security report for: 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π Risk score explained
The calculate_risk_score tool produces a composite risk score from 0 to 100 by weighting four independent signals.
The formula
Risk Score = (CVSS Γ 0.20) + (EPSS Γ 0.35) + (KEV Γ 0.30) + (PoC Γ 0.15)Component | Weight | What It Captures |
CVSS v3.1 Base Score | 20% | Theoretical worst-case severity |
EPSS Probability | 35% | Statistical likelihood of exploitation in the next 30 days |
CISA KEV Status | 30% | Confirmed active exploitation in the wild |
PoC Availability | 15% | Public exploit code lowers the barrier for attackers |
Boost multipliers
KEV + active PoC β Γ1.15
CVSS β₯ 9.0 + EPSS > 0.7 β Γ1.10
Published < 7 days ago β Γ1.05
Score is capped at 100.
Risk Scoring β v1 (2026-06)
The numeric scorer is scoring_version 1.0 (surfaced in triage_cve, calculate_risk_score, and health_check). The linear weighted sum above is the v1 default for the numeric score, with one hard override:
CISA KEV hard override: a KEV-listed CVE is confirmed exploited in the wild, the single strongest exploitation signal. Its label can never be lower than CRITICAL and its score is clamped to β₯ 76, regardless of CVSS/EPSS. (A KEV CVE with a low CVSS and low EPSS still returns CRITICAL / 76.)
CVSS is treated as a severity signal, not an exploitation-likelihood signal (per Allodi & Massacci 2014); EPSS and KEV carry the exploitation signal.
An experimental SSVC v2 gated decision (CISA Deployer model β
Act/Attend/Track*/Track) is available viatriage_cve(depth="deep")as a qualitative, explainable alternative to the 0β100 number.
Score | Label | Recommended Action |
0 β 25 | LOW | Schedule for next maintenance window |
26 β 50 | MEDIUM | Patch within 30 days per SLA |
51 β 75 | HIGH | Patch within 7 days; escalate to team lead |
76 β 100 | CRITICAL | Patch within 24β48 hours. Emergency change window. |
Why these weights?
EPSS gets the highest weight (35%) because it's the single best predictor of actual exploitation β far better than CVSS alone. A CVSS 10.0 with EPSS 0.01 is theoretically dangerous but practically unlikely. KEV at 30% is ground truth: confirmed exploitation, not a prediction. CVSS at 20% captures severity context for new CVEs with insufficient EPSS data. PoC at 15% reflects that public exploits dramatically accelerate real-world attacks.
π What's new in v0.2.0
triage_cveorchestrator β one tool call that fans out NVD + EPSS + CISA KEV (+ public PoC discovery fordepth != "quick") concurrently, computes the composite risk score, and returns a clean report.depthisquick/standard(default) /deep;deepadditionally emits the SSVC v2 gated decision.New upstream sources β VulnCheck NVD++ (a transparent NVD fallback used automatically inside
triage_cvewhen NIST NVD is unreachable/throttled), CIRCL hashlookup, and the HIBP Pwned Passwords range API.KEV hard-override scoring +
scoring_versionβ KEV-listed CVEs are always CRITICAL (score β₯ 76); the scoring version is reported intriage_cveandhealth_check.HTTP transport β set
MCP_TRANSPORT=httpto serve streamable-HTTP onHOST:PORT(default0.0.0.0:8000, stateless) instead of stdio. Ships with aDockerfile.Resources & prompts β resources
kev://catalog,epss://scores/{cve_id}, andmanifest://tool-hash(SHA-256 over the registered tool surface); promptspatch_decision,compare_and_prioritize, anddependency_triage.Security posture β the server never registers a sampling handler / never issues
sampling/createMessage(Unit 42 MCP-sampling attack vector); new outbound paths are scheme/host-allowlisted.
π Data sources
# | Source | Data Provided | Auth | Rate Limit (Free) |
1 | NVD | CVE details, CVSS, CWEs, CPEs |
| 5 req/30s (50 with key) |
2 | EPSS | Exploitation probability and percentiles | None | 1,000 req/min |
3 | CISA KEV | Actively exploited CVE catalog | None | Static file |
4 | OSV.dev | Open-source package vulnerabilities | None | No published limit |
5 | GitHub Advisories | GHSA advisories, patches, affected versions |
| 60/hr (5,000 with PAT) |
6 | MITRE ATT&CK | TTPs, techniques, mitigations | None | No published limit |
7 | AbuseIPDB | IP abuse confidence, reports, ISP, geo |
| 1,000 checks/day |
8 | GreyNoise | IP noise/scan activity, classification |
| 50 queries/week |
9 | Shodan | Open ports, services, banners, CVEs |
| Basic lookups |
10 | VirusTotal | Multi-AV scan results, reputation |
| 500/day, 4/min |
11 | MalwareBazaar | Malware samples, hashes, signatures |
| Fair use |
12 | ThreatFox | IOCs linked to malware families |
| Fair use |
13 | Ransomwhere | Ransomware BTC addresses and transactions | None | No published limit |
14 | URLScan.io | URL scanning, screenshots, DOM |
| 5,000 public scans/day |
15 | CIRCL PDNS | Historical passive DNS records | HTTP Basic Auth | Partner access |
16 | GitHub Code Search | Exploit PoC repository search |
| Shared with GHSA limits |
17 | Exploit-DB | Public exploit database CSV | None | No published limit |
18 | Nuclei Templates | Community detection templates | None | No published limit |
19 | MSRC | Microsoft security advisories | None | No published limit |
20 | Red Hat Security | Red Hat CVE advisories | None | No published limit |
21 | Ubuntu Security | Ubuntu CVE tracker | None | No published limit |
22 | VulnCheck NVD++ | NVD-schema CVE records (transparent NVD fallback) |
| Per VulnCheck Community tier |
23 | CIRCL hashlookup | Known-good file metadata (NSRL + others), | None | Best-effort |
24 | HIBP Pwned Passwords | Breached-password counts via k-anonymity range API | None | No hard limit |
π§ͺ Running tests
# Run the full test suite
pytest tests/ -v
# Run specific test files
pytest tests/test_validators.py tests/test_risk_scorer.py -v
# Run with coverage
pytest tests/ -v --cov=src/cve_mcp --cov-report=term-missingTest with the MCP Inspector
npx @modelcontextprotocol/inspector python -m cve_mcp.serverOpens at http://localhost:6274 β interactively test each tool, view input schemas, and inspect response formats.
What tests cover
Unit tests: Risk score calculation, CVSS vector parsing, input validation
Integration tests: Tool registration, parameter validation, error handling for missing keys
Cache tests: SQLite cache writes, TTL expiration, cache hit/miss
Security tests: Private IP blocking, XML bomb protection (defusedxml), input sanitization
ποΈ Architecture deep dive
File structure
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 computationCaching strategy
Resource | TTL |
CVE records (NVD) | 1 hour |
EPSS scores | 6 hours |
KEV catalog | 1 hour |
IP / domain intel | 1 hour |
Exploit-DB CSV | 24 hours |
ATT&CK STIX data | 24 hours |
Ransomware intel | 24 hours |
Audit log
Every tool invocation is logged to ~/.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 keys and response payloads are never written to audit logs.
π Security and privacy
What data leaves your machine
Outbound HTTPS only β no inbound ports opened, no telemetry
CVE IDs, IPs, hashes, domains, and package names are sent to respective APIs for lookup
API responses are cached locally in SQLite β cached data stays on your machine
Private IP blocking
All network intelligence tools block private and reserved IP ranges before any external API call:
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 private)
API key protection
Keys loaded from environment variables only β never hardcoded
.envis gitignoredKeys never logged, cached, or included in audit entries
XML safety
defusedxml is used for all XML parsing to prevent XML bomb attacks (billion laughs, XXE injection).
π§ Troubleshooting
Server won't start
# Ensure virtual environment is activated and package is installed
pip install -e .
python --version # must be 3.10+Claude Desktop doesn't show the hammer icon (π¨)
Check for JSON syntax errors (no trailing commas) in your config
Use absolute paths β relative paths silently fail
Fully quit Claude Desktop (Cmd+Q / Alt+F4) and restart
NVD rate limited
# Add your free NVD API key to .env
NVD_API_KEY=your-key-here
# https://nvd.nist.gov/developers/request-an-api-keyThe server queues excess requests automatically, but with a key you get 10Γ throughput.
GreyNoise 401 Unauthorized
# Verify your key works:
curl -H "key: YOUR_KEY" https://api.greynoise.io/v3/ip/8.8.8.8
# The server uses /v3/ip/{ip} β NOT the deprecated /v3/community endpointWindows encoding issues
$env:PYTHONUTF8 = "1"
$env:PYTHONIOENCODING = "utf-8"πΊοΈ Roadmap and known limitations
What the server does NOT do
No active scanning β intelligence/lookup only, does not probe your infrastructure
No write operations β reads from external APIs only (except URLScan submissions)
No CVSS v4.0 scoring β built-in calculator handles v3.1 only; NVD-provided v4.0 scores are displayed but not recalculated
Known API limitations
NVD returns max 2,000 results per query
EPSS scores for brand-new CVEs (< 24 hours old) may not exist yet
CISA KEV updates on US business days only
GreyNoise community tier: 50 queries/week
VirusTotal free tier: 4 requests/minute
CIRCL PDNS requires manual registration and approval
Ransomwhere has a 90-day embargo on new addresses
Planned improvements
CVSS v4.0 local calculator
Webhook/alerting for KEV additions and EPSS score changes on a CVE watchlist
STIX 2.1 export for SIEM integration
Docker container with zero-install deployment
Streamable HTTP transport (MCP SSE)
Additional sources: Censys, SecurityTrails, VulnCheck
π€ Contributing
Contributions are welcome.
Adding a new tool
Add the tool function in
server.pywith the@mcp.tool()decoratorAdd input validation in
utils/validators.pyImplement the API client in
api/Add tests in
tests/Update this README
@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 β returnTesting requirements
All new tools must have at least one offline test with mocked responses
Risk score changes must include formula verification test cases
Network tools must include a test verifying private IP blocking
All tests must pass:
pytest tests/ -v
π License
MIT License β see LICENSE for details.
Copyright (c) 2025-2026 Mahipal Jangra (mukul975)Available Tools
28 toolscalculate_risk_scoreB
Calculate a composite 0-100 risk score using CVSS, EPSS, KEV, and PoC data.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the data sources but does not disclose how the composite score is computed, whether it is read-only, or any side effects. For a calculation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that conveys the core purpose without any extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not detail return values, but it still lacks information on prerequisites, error conditions, or the calculation methodology, which is crucial for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only implies the cve_id parameter by referencing CVE-specific data sources, but does not specify the expected format or additional constraints, leaving ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calculates a composite 0-100 risk score using specific data sources (CVSS, EPSS, KEV, PoC). It distinguishes from sibling tools like 'get_epss_score' or 'check_kev' which provide individual scores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for combining multiple risk metrics into a single score, but does not explicitly state when to use this over individual metric tools or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_exploit_availabilityA
Search GitHub for public proof-of-concept (PoC) exploit repositories for a CVE. Results are sorted by star count to surface the most credible exploits first.
Args: cve_id: CVE identifier (e.g. CVE-2021-44228)
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description only mentions search and sorting by star count. Lacks details on rate limits, authentication, or what 'public' means. Insufficient for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three succinct sentences plus Args section. No redundancy, clear and front-loaded purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with output schema, description is adequate but omits sorting details or limitations. Could be more complete given sibling density.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter cve_id has zero schema description coverage. Description adds format example 'CVE-2021-44228', providing clarity beyond the schema's type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Search GitHub' and resource 'public proof-of-concept exploit repositories for a CVE'. This differentiates it from sibling tools like check_poc_exists or lookup_cve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as check_poc_exists. With many similar sibling tools, explicit when/when-not is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ip_reputationA
Check an IP address reputation via AbuseIPDB and GreyNoise Community. Returns abuse confidence score, country, ISP, Tor status, and noise classification.
Args: ip: IPv4 or IPv6 address to check (e.g. 1.2.3.4 or 2001:db8::1)
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It lists returned fields but does not disclose potential rate limits, authentication needs, or side effects. For a read-only check, it is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two paragraphs, front-loaded with purpose and return values, followed by a focused Args section. No redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (handling return details), the description provides adequate context: purpose, sources, parameter format, and return fields. Lacks mention of read-only nature but is still complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining the 'ip' parameter format (IPv4/IPv6) and providing examples, adding value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'check' and the resource 'IP address reputation', and specifies the data sources (AbuseIPDB, GreyNoise Community), distinguishing it from sibling tools like shodan_host_lookup or check_url_safety.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit when-to-use or when-not-to-use guidance relative to siblings. It implies general IP reputation checking but lacks boundaries or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_kevB
Check if a CVE is in the CISA Known Exploited Vulnerabilities (KEV) catalog.
Args: cve_id: CVE identifier (e.g. CVE-2021-44228)
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It only states the action without disclosing side effects, data freshness, API limits, or result format. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence states purpose, second describes the parameter. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered, but the description doesn't explain typical behavior (e.g., boolean result). For a simple lookup, it's adequate but leaves uncertainty about what 'check' means (boolean vs details).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage. The description adds a format example ('CVE-2021-44228'), which adds some meaning beyond the schema. However, it's minimal and doesn't fully compensate for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks if a CVE is in the CISA Known Exploited Vulnerabilities catalog. The verb 'Check' and resource 'KEV catalog' are specific, distinguishing it from siblings like lookup_cve or check_exploit_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. It doesn't mention prerequisites, when to prefer this over lookup_cve or check_exploit_availability, or any context for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_package_vulnsB
Check a package for known vulnerabilities via OSV.dev.
Args: package: Package name (e.g. log4j-core, requests, lodash) ecosystem: Package ecosystem β PyPI, npm, Go, Maven, NuGet, crates.io, Packagist, Hex, RubyGems, Android, CocoaPods, GitHub Actions version: Optional specific version to check (e.g. 2.14.1)
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | ||
| ecosystem | Yes | ||
| version | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It mentions using OSV.dev but does not disclose behavior beyond the basic check (e.g., rate limits, response format, or any side effects). The lack of details on what constitutes a 'vulnerability' or how results are returned limits transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and structured with a one-line summary followed by parameter documentation. It avoids fluff but could be slightly more concise by omitting the 'Args:' prefix since the schema already defines parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists but is not referenced in the description. The description lacks any hint about the output (e.g., list of CVEs, severity scores), which would help the agent understand what to expect. It is minimally adequate but not complete for a tool that returns structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates well by listing parameters with examples (e.g., package: 'log4j-core', ecosystem: 'PyPI', version: '2.14.1'). It adds enumerations for ecosystem and clarifies optionality, though it could further explain version format or response linkage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks a package for known vulnerabilities via OSV.dev. It specifies the action ('check') and resource ('package for vulnerabilities'), and the tool name and examples distinguish it from sibling tools like 'lookup_cve' or 'scan_dependencies'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of use cases, prerequisites, or when not to use it, leaving the agent without decision-making context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_poc_existsB
Search for proof-of-concept exploits across GitHub, Exploit-DB, and Nuclei templates.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | ||
| include_github | No | ||
| include_exploitdb | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions the sources searched (GitHub, Exploit-DB, Nuclei) but does not discuss whether the tool is read-only, potential rate limits, or the nature of results (existence vs. details). Basic transparency is provided, but more detail would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. However, given the parameter count and need for semantics, it is slightly under-specified. Remains efficient but could be expanded without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists (reducing the need to explain returns), the description lacks parameter explanations and usage context. With 3 parameters and 0% schema coverage, the description is incomplete for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. However, it does not explain any of the three parameters (cve_id, include_github, include_exploitdb). It fails to add meaning beyond the schema, leaving the agent without guidance on how to use the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for proof-of-concept exploits across GitHub, Exploit-DB, and Nuclei templates.' It specifically identifies the action (search), the resource (PoC exploits), and the scope (multiple sources), distinguishing it from siblings like check_exploit_availability and check_kev.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for finding PoCs but offers no explicit guidance on when to use this tool versus alternatives (e.g., check_exploit_availability, check_kev), nor does it mention when not to use it. Usage context is implied but not clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ransomware_intelA
Check if a Bitcoin address is associated with a known ransomware family using the Ransomwhere database.
Args: bitcoin_address: Bitcoin wallet address to look up (P2PKH, P2SH, or bech32)
| Name | Required | Description | Default |
|---|---|---|---|
| bitcoin_address | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the database (Ransomwhere) and accepted address formats, but does not disclose behavioral traits like read-only nature, error handling, or response format. The output schema exists but is not referenced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences and a bullet point. Every sentence adds meaning with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no enums) and the presence of an output schema, the description adequately covers the tool's purpose and input format. It could optionally mention the output, but it's not necessary per the rubric.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds value by specifying the parameter as a Bitcoin wallet address and listing valid types (P2PKH, P2SH, bech32), which goes beyond the schema's plain type string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'check' and the resource 'Bitcoin address' against 'ransomware family' using a specific database. It distinguishes itself from siblings like check_ip_reputation and check_url_safety by focusing on Bitcoin addresses and ransomware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking ransomware associations of Bitcoin addresses but lacks explicit guidance on when to use vs alternatives, such as other threat intelligence tools. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_url_safetyA
Check a URL or domain for malicious activity via URLScan.io. Returns scan verdicts, malicious flag, score, and categories.
Args: url_or_domain: URL (https://example.com/path) or bare domain (example.com)
| Name | Required | Description | Default |
|---|---|---|---|
| url_or_domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions using URLScan.io and returns scan verdicts, malicious flag, score, and categories. However, it does not disclose if it is read-only, rate limits, or authentication needs. The information is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with one short paragraph and a single-line parameter explanation. Every sentence adds value, no redundancy, and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description's mention of return values (verdicts, malicious flag, score, categories) is sufficient. It lacks error handling or timeout info but covers the core functionality well for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining the single parameter: 'URL (https://example.com/path) or bare domain (example.com)'. This adds meaningful format guidance beyond the schema's type-only definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Check a URL or domain for malicious activity via URLScan.io', specifying the verb (Check), resource (URL or domain), and purpose (malicious activity). This distinguishes it from sibling tools like check_ip_reputation or check_exploit_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for URL/domain safety checks. While not explicitly stating when not to use or naming alternatives, the tool's purpose is clear enough given the sibling list covers different security checks. A score of 4 reflects implied but clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_cvesB
Compare multiple CVEs by risk score and generate a patch priority ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states what the tool does but does not disclose behavioral traits like read-only nature, required permissions, or side effects. This leaves agents uncertain about risks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 10 words, front-loaded with action and resource. No wasted words. Ideal conciseness for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has one parameter and an output schema (presumably explains return format), so description need not cover returns. However, missing behavioral context (e.g., whether it's a read operation) and usage guidance reduces completeness. Adequate for a simple tool but with gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, and the description only mentions 'multiple CVEs' without specifying format, constraints, or required count. The agent must infer the parameter semantics from the name alone, which is insufficient compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'compare' and resource 'CVEs' with a clear outcome 'generate a patch priority ranking', distinguishing it from siblings like lookup_cve (individual lookup) or search_cves (search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when multiple CVEs need prioritization but provides no explicit guidance on when to use vs alternatives or exclusions. With many sibling tools, lacking differentiation is a missed opportunity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_vuln_reportC
Generate a vulnerability report in executive, technical, or full format.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | ||
| format | No | technical | |
| include_remediation | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only states the output format. It does not mention what happens if the CVE ID is invalid, the effect of the include_remediation flag, or any side effects like generating a file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, making it concise but lacking structure. It front-loads the key action and formats, but every sentence should add value; here it omits necessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to explain return values. However, with 3 parameters and no parameter descriptions, and multiple similar sibling tools, the description is insufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 3 parameters with 0% description coverage. The description only hints at the 'format' parameter by listing possible values but does not explain the 'cve_id' or 'include_remediation' parameters, or the meaning of the format values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'generate', the resource 'vulnerability report', and the available formats ('executive, technical, or full format'). This distinguishes it from sibling tools that focus on checking or analyzing specific aspects rather than producing a report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool instead of alternatives like get_cve_summary or compare_cves. There are no usage contexts, prerequisites, or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attack_mappingA
Map a CVE to MITRE ATT&CK techniques and associated threat groups. Downloads the ATT&CK dataset lazily (cached 24h). Searches technique descriptions and references for the CVE ID.
Args: cve_id: CVE identifier (e.g. CVE-2021-44228)
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses lazy download and 24h caching, and that it searches descriptions and references. With no annotations, description carries full burden but is adequate. Lacks info on behavior when CVE not found or if it's read-only (inferred).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences plus Args block; purpose is front-loaded. Clear and efficient, though Args could be integrated into prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: purpose, caching, search mechanism. Output schema exists, so return values need not be detailed. Missing info on error handling or empty results, but overall sufficient for a focused mapping tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description compensates with an Args section that explains cve_id and provides an example CVE format. This adds meaningful context beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the specific action: mapping a CVE to MITRE ATT&CK techniques and threat groups. It distinguishes from sibling tools like get_cve_summary or check_exploit_availability by focusing on attack mapping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage: use when needing ATT&CK mapping for a CVE. No explicit when-not-to-use or alternatives mentioned. Caching detail is provided but not decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cve_summaryA
Get a comprehensive one-page summary of a CVE: severity, EPSS, KEV status, description, weaknesses, and timeline. Fetches NVD + EPSS concurrently.
Args: cve_id: CVE identifier (e.g. CVE-2021-44228)
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides moderate behavioral detail: it fetches NVD and EPSS concurrently and returns a summary including severity, EPSS, KEV status, etc. However, it does not disclose potential errors, rate limits, or whether it is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus a parameter listing. The main purpose is stated first, and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description does not need to detail return values. It covers the essential input, the sources fetched, and the summary items. Some behavioral context (e.g., caching, error handling) is missing, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a title and type for cve_id, but the description adds a clear explanation and a concrete example (CVE-2021-44228). This significantly aids understanding and correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a comprehensive summary of a CVE, listing specific fields included. It distinguishes from some siblings by emphasizing concurrency and breadth, but doesn't explicitly differentiate from closely related tools like lookup_cve or get_cve_timeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the many sibling tools. The description does not mention prerequisites, context, or alternatives, leaving the agent to infer usage without direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cve_timelineA
Build a complete CVE lifecycle timeline: NVD publication date, EPSS score history, CISA KEV addition date, patch lag, and exploit window estimation.
Args: cve_id: CVE identifier (e.g. CVE-2021-44228)
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether the operation is read-only, authentication requirements, error handling, or what happens if the CVE does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus an arguments list, front-loaded with the purpose, and contains no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one parameter and an output schema (as per context), and the description lists the key data points returned, which is sufficient for an agent to understand what it will receive. However, it does not describe the output structure or error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter with no description (0% coverage), and the description adds an example format (CVE-2021-44228) but does not explain accepted formats, case sensitivity, or validation rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool builds a 'complete CVE lifecycle timeline' and lists specific data points (NVD publication date, EPSS score history, etc.), which distinguishes it from sibling tools like get_cve_summary or get_epss_score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says when to use it (to get a lifecycle timeline for a specific CVE) but does not explicitly state when NOT to use it or provide alternatives like get_cve_summary for a simple summary, despite many overlapping siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_intelC
Get domain intelligence: certificate transparency logs (crt.sh) and passive DNS records (CIRCL PDNS). Returns subdomains and certificate history.
Args: domain: Domain name to investigate (e.g. example.com)
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It mentions the data sources (crt.sh, CIRCL PDNS) but does not explain rate limits, authentication needs, or whether the data is historical/current. The behavior beyond 'returns subdomains and certificate history' is not transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short with two distinct sections: purpose and arguments. It is front-loaded with the key action and uses no fluff. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter and an output schema, the description covers the essential function. However, it lacks behavioral transparency and usage guidance, leaving gaps for an agent to fully understand implications. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one parameter 'domain' with a title. The description adds an example (example.com) but no additional constraints or format details. Since schema coverage is 0%, the description adds minimal value beyond the schema's title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: get domain intelligence from crt.sh and CIRCL PDNS, returning subdomains and certificate history. The verb 'get' and resource 'domain intelligence' are specific. However, it does not explicitly distinguish from sibling tools like 'passive_dns_lookup'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, limitations, or when to avoid using it. The context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_epss_scoreB
Get EPSS (Exploit Prediction Scoring System) scores for one or more CVEs.
Args: cve_ids: Comma-separated CVE IDs (e.g. CVE-2021-44228,CVE-2022-22965)
| Name | Required | Description | Default |
|---|---|---|---|
| cve_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description lacks details on limitations, error handling, rate limits, or output format. Only notes comma-separated format for input, insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two lines with docstring format, no unnecessary words. Front-loaded with purpose. Efficient but could be more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with output schema, description is adequate but lacks error behavior, limit details, or typical use cases. Gaps for a tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage; description adds that cve_ids is comma-separated, which adds beyond the schema (just string). But no further syntax or constraints given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves EPSS scores for CVEs, with specific action and resource. Distinguishes from sibling tools like lookup_cve or check_exploit_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like lookup_cve or check_exploit_availability. Description only states what it does, not context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vendor_advisoryA
Fetch vendor security advisories for a CVE from Microsoft (MSRC), Red Hat, and Ubuntu. Shows patch availability and affected products.
Args: cve_id: CVE identifier (e.g. CVE-2021-44228)
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states what it fetches and shows, but fails to disclose behavioral traits like rate limits, authentication needs, or error handling (e.g., if CVE is not found).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the purpose, and each sentence adds value without wasted words. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (so return values don't need explanation) and one parameter, the description is fairly complete. However, it lacks differentiation from similar sibling 'lookup_cve' and doesn't mention any edge cases or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% parameter description coverage, but the description adds value by specifying the parameter 'cve_id' with a format example (CVE-2021-44228). This compensates for the schema lack and helps the agent understand the required input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches vendor security advisories for a CVE from three specific vendors (Microsoft, Red Hat, Ubuntu) and shows patch availability and affected products. This is a specific verb+resource and distinguishes it from siblings like check_exploit_availability or check_poc_exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need official vendor advisories/patch info for a CVE. It doesn't explicitly state when not to use or provide alternatives, but the context is clear among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Check the health of the CVE MCP server: NVD connectivity, KEV catalog status, cache, risk scoring version, tool manifest hash, and which optional API keys are configured (names only β never the key values).
Note: This tool pings NVD without rate limiting β do not call it in a loop.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it pings NVD without rate limiting and returns only API key names (not values). With no annotations, the description covers safety and privacy behavioral traits adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then critical usage note. Every word earns its place, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers what the tool checks and a key constraint (rate limiting). Given no parameters and existence of an output schema, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline 4 applies. Description does not need to add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool checks server health including NVD connectivity, KEV status, cache, risk scoring version, manifest hash, and configured API keys. Distinct from siblings which all deal with CVEs or security data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns not to call in a loop due to no rate limiting. Provides clear context on what it checks, though could mention it's a read-only health check for initial diagnostic use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_cveA
Look up a CVE by ID from NVD. Returns full details including CVSS scores, description, weaknesses, and CISA KEV status.
Args: cve_id: CVE identifier (e.g. CVE-2021-44228)
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the return content (CVSS scores, description, weaknesses, CISA KEV status). It does not cover potential rate limits or authorization, but the read-only nature is inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no wasted words, front-loading the purpose and return details, followed by a clear args section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple single-parameter tool with an output schema, the description fully covers what the tool does, what it returns, and how to provide input, leaving no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description adds meaning via an example format ('e.g. CVE-2021-44228') and explains it is a CVE identifier, which is sufficient for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up a specific CVE by ID from NVD, distinguishing it from sibling tools like search_cves (search) and get_cve_summary (summary).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when one has a specific CVE ID (e.g., CVE-2021-44228), but does not explicitly mention when to avoid this tool or suggest alternatives like search_cves for broader queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_file_hashB
Look up a file hash (MD5/SHA1/SHA256) against MalwareBazaar and VirusTotal. Returns malware family, detection stats, and file metadata.
Args: hash_str: MD5 (32 hex), SHA1 (40 hex), or SHA256 (64 hex) hash
| Name | Required | Description | Default |
|---|---|---|---|
| hash_str | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral transparency. It only states the action and return type but does not disclose whether the operation is read-only, destructive, or has any side effects, rate limits, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three distinct sentences: purpose, output summary, and parameter details. It is well-structured and front-loaded, efficiently conveying essential information without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to detail return values. However, the tool's complexity (multiple data sources, multiple return fields) could benefit from more context on specific outputs or limitations. The description is minimally adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that explains the format of the hash_str parameter (MD5, SHA1, SHA256 with hex length requirements), adding significant meaning beyond the schema's minimal string type definition. This compensates for the low schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Look up a file hash'), specifies the data sources (MalwareBazaar and VirusTotal), and outlines the return information (malware family, detection stats, file metadata). It effectively communicates the tool's purpose, though it does not explicitly differentiate from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. It simply describes what the tool does without contextualizing its use among many similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_malware_familyA
Look up an IOC (IP, domain, URL, or hash) against ThreatFox for malware family attribution. Returns confidence level, IOC type, and threat classification.
Args: ioc: Indicator of Compromise β IP address, domain, URL, MD5/SHA256 hash
| Name | Required | Description | Default |
|---|---|---|---|
| ioc | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It indicates that the tool queries an external source (ThreatFox) and returns certain fields, but it does not disclose whether it is read-only, any authentication needs, rate limits, or error behavior. The description is adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short paragraphs: a one-sentence overview followed by a clear Args section. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, straightforward purpose) and the presence of an output schema, the description covers the essential aspects. However, it could mention the output schema existence or error handling to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'ioc' is thoroughly explained in the description: 'Indicator of Compromise β IP address, domain, URL, MD5/SHA256 hash'. This adds significant meaning beyond the input schema, which only specifies a string type with no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'look up' and the resource 'IOC against ThreatFox for malware family attribution'. It specifies the types of IOCs (IP, domain, URL, or hash) and mentions the output fields, making it distinct from sibling tools like check_ip_reputation or lookup_file_hash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. It implicitly suggests use for malware family attribution but lacks comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_cvssA
Parse and explain a CVSS vector string (v2, v3.x, or v4.0).
Args: vector: CVSS vector string (e.g. CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
| Name | Required | Description | Default |
|---|---|---|---|
| vector | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description carries full burden. It clearly states a read-only parse action with no side effects. While it doesn't detail error handling or validation, the tool's simplicity and the existence of an output schema mitigate the need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three lines, with the purpose front-loaded. Every word is informative, including the inline parameter explanation and example, with no extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required parameter, no nested objects) and has an output schema. The description fully covers the input semantics and purpose, making it complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema by specifying the parameter 'vector' as a CVSS vector string and providing an example. Since schema description coverage is 0%, this compensation is excellent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Parse and explain a CVSS vector string' with versions v2, v3.x, or v4.0. This specific verb+resource combination distinguishes it from sibling tools like calculate_risk_score or check_exploit_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. However, the specific purpose of parsing CVSS vectors implies its usage context, but lacks exclusions or references to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
passive_dns_lookupA
Query CIRCL Passive DNS for historical DNS resolutions of an IP or domain. Shows what hostnames have resolved to this IP, or what IPs a domain has pointed to.
Args: ip_or_domain: IPv4/IPv6 address or domain name to query
| Name | Required | Description | Default |
|---|---|---|---|
| ip_or_domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only describes the query action and output, but does not mention authentication requirements, rate limits, data freshness, or whether the operation is read-only. This is insufficient for a tool making external API calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus a one-line argument description. Every sentence adds value. No redundant information. Front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a simple single parameter and an output schema exists (as indicated by context signals), the description provides sufficient context about input and output (historical resolutions). It does not mention pagination or limits, but for a lookup tool this is acceptable. The sibling context is not necessary for completeness here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantic details to the sole parameter, clarifying that it accepts IPv4, IPv6, or domain names. Schema description coverage is 0%, so this justification is crucial. It could be enhanced by specifying expected format (e.g., no protocol prefixes) but is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it queries CIRCL Passive DNS for historical DNS resolutions, and specifies the two possible directions (hostnames to IP or IP to hostnames). This distinguishes it from sibling tools like check_ip_reputation or shodan_host_lookup which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when historical DNS resolution data is needed, but does not explicitly state when to use this tool over alternatives like 'check_ip_reputation' or 'get_domain_intel'. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_container_packagesA
Scan container image packages (Alpine, Debian, Ubuntu OS packages) for known CVEs via OSV.dev. Input should be 'name:ecosystem:version' lines, one package per line, e.g. from 'apk info -v' or 'dpkg -l' output.
Supported ecosystems: Alpine, Debian, Ubuntu, and any OSV-supported ecosystem.
Args: packages: Newline-separated 'name:ecosystem:version' entries. Example: openssl:Alpine:3.0.7-r0 musl:Alpine:1.2.4_r2 libssl3:Debian:3.0.7-1
| Name | Required | Description | Default |
|---|---|---|---|
| packages | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains that the tool uses OSV.dev and specifies input format, but with no annotations provided, it lacks details on rate limits, error handling, or behavior under failure conditions. It provides moderate transparency but not full behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides structured details in an 'Args' section. It is clear but slightly verbose; could be more concise while retaining all necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (so return values are documented elsewhere), the description adequately covers input specification and purpose. It lacks explanation of potential error conditions or performance characteristics, but overall is sufficiently complete for a single-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by detailing the single required parameter 'packages': format ('name:ecosystem:version' lines), examples, and supported ecosystems. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans container image packages for known CVEs via OSV.dev, with specific input format and examples. It distinguishes itself from sibling tools by focusing on container images and using OSV.dev, which is unique among the listed tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit input format and examples, along with supported ecosystems, guiding the agent on proper usage. However, it does not explicitly state when not to use this tool or mention alternative tools for similar tasks, though the context of sibling tools implies this is the dedicated container scanning tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_dependenciesA
Bulk scan application dependencies for known CVEs via OSV.dev. Supports requirements.txt (PyPI), package.json (npm), pom.xml (Maven), or generic 'name:ecosystem:version' lines. Returns only vulnerable packages.
Args: dependency_list: Raw contents of requirements.txt, package.json, pom.xml, or newline-separated 'name:ecosystem:version' entries. Max 1000 packages per call.
| Name | Required | Description | Default |
|---|---|---|---|
| dependency_list | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses supported input formats, the max package limit (behavioral constraint), and that only vulnerable packages are returned. It does not explicitly state read-only behavior or auth needs, but the scanning action inherently implies safety, and the max limit adds transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient: one sentence for purpose, a line for format support, and a brief args section. It is well front-loaded. Minor improvement could be separating the argument description more clearly, but it remains concise without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (implied by context), missing return structure details are acceptable. The description covers input, supported formats, and key behavioral limits. It lacks explanation of error handling or malformed input, but overall provides sufficient context for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 0% parameter description coverage, so the description must compensate. It fully explains the dependency_list parameter: what formats it accepts (file contents or formatted lines) and the max 1000 packages. This adds significant meaning beyond the schema's bare type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool bulk scans dependencies for CVEs via OSV.dev, specifies supported formats (requirements.txt, package.json, pom.xml, or generic lines), and notes it returns only vulnerable packages. This is a specific verb-resource combination that distinguishes it from siblings like check_package_vulns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for bulk scanning with max 1000 packages, but does not explicitly state when to use this tool versus alternatives like check_package_vulns. It lacks directives on prerequisites or exclusions, leaving usage context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_repo_secretsA
Search GitHub public repositories for potential exposed credentials or secrets related to a search term (CVE ID, tool name, or keyword). Requires GITHUB_TOKEN for best results. For security research only.
Args: search_term: CVE ID, tool name, or keyword to search for in public repo files (e.g. CVE-2024-1234, AWS_SECRET_ACCESS_KEY, log4j)
| Name | Required | Description | Default |
|---|---|---|---|
| search_term | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It discloses the need for a GITHUB_TOKEN for best results and the security research scope. However, it does not explain behavior without the token (e.g., rate limits, reduced results) or any other traits like idempotency or side effects. This is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences) and front-loaded with the main purpose. It includes necessary details like token requirement and use case. Minor improvement could be separating use case or adding a note about output, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter and an output schema (not described), the description is reasonably complete. It explains what the search term should be, the purpose, and prerequisites. The existence of an output schema means return values don't need elaboration. However, it could mention the response type (e.g., list of matches) for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero description coverage (0%), so the description must compensate. It provides detailed guidance: 'CVE ID, tool name, or keyword to search for in public repo files (e.g. CVE-2024-1234, AWS_SECRET_ACCESS_KEY, log4j).' This adds significant meaning beyond the schema's type and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches GitHub public repositories for exposed credentials/secrets related to a search term. It specifies the search term can be a CVE ID, tool name, or keyword, providing examples (e.g., CVE-2024-1234, AWS_SECRET_ACCESS_KEY, log4j). This distinguishes it from sibling tools like lookup_cve or check_exploit_availability, which focus on CVE details and exploit availability, respectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Requires GITHUB_TOKEN for best results. For security research only.' This provides context on prerequisites and intended use. While it doesn't explicitly state when not to use it or compare with alternatives, the specificity of the tool (searching for secrets in repos) makes it clear when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cvesA
Search NVD for CVEs by keyword and optional severity filter.
Args: query: Keyword to search (letters, numbers, spaces, hyphens, dots β max 200 chars) severity: Optional CVSS v3 severity filter: NONE, LOW, MEDIUM, HIGH, CRITICAL limit: Max results (1β50, default 10)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| severity | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It implies a read-only search operation but does not explicitly state non-destructive nature, rate limits, or other behaviors. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: three lines for purpose plus three bullet-like argument descriptions. Front-loaded with purpose, no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, return values need not be explained. Parameter documentation is thorough, but minor missing context like pagination or data freshness does not detract significantly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds rich semantics beyond the schema: allowed characters for query, exact severity options, numeric range for limit. With 0% schema description coverage, this fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search'), resource ('NVD'), and object ('CVEs'), and distinguishes it from sibling tools like 'lookup_cve' by specifying keyword and optional severity filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'lookup_cve' or 'get_cve_summary'. While parameter constraints are provided, the description lacks explicit context for tool selection among many CV-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shodan_host_lookupA
Look up a host on Shodan: open ports, running services, OS, CVEs on the host. Requires SHODAN_KEY environment variable.
Args: ip: IPv4 address to look up (e.g. 8.8.8.8)
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the operation is a lookup (read-only) and requires an environment variable, but does not mention any side effects, rate limits, or safety assurances. While likely safe, the description could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences covering purpose, and a clear argument specification. It is front-loaded with the key functionality and has no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has a single parameter and an existing output schema, the description adequately covers what the tool does and its prerequisite. It does not need to explain return values because an output schema exists. Slight improvement could include mention of JSON output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds valuable context: 'ip: IPv4 address to look up (e.g. 8.8.8.8)'. This clarifies the expected format and provides an example, going beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up a host on Shodan, listing open ports, services, OS, and CVEs. This is specific and distinguishes it from sibling tools like get_domain_intel or lookup_cve, which focus on different entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions the required SHODAN_KEY environment variable, which is essential context. However, it does not explicitly state when to use this tool versus alternatives like passive_dns_lookup or search_cves, leaving the decision to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
triage_cveA
One-call CVE triage orchestrator (v0.2.0).
Fans out the relevant upstream sources concurrently β NVD (with a transparent VulnCheck NVD++ fallback when NVD fails), EPSS, the CISA KEV catalog, and (for depth != "quick") public PoC/exploit discovery β then computes the composite risk score (KEV hard-override applies: a KEV-listed CVE is always CRITICAL with score >= 76). For depth == "deep" it additionally emits an SSVC v2 gated decision (Act / Attend / Track* / Track).
Args: cve_id: CVE identifier (e.g. CVE-2021-44228). depth: "quick" β NVD + EPSS + KEV (no PoC search; fastest), "standard" β adds PoC/exploit discovery (default), "deep" β adds an SSVC v2 qualitative decision.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | ||
| depth | No | standard |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains concurrent fan-out, NVD fallback, and depth-specific behavior (SSVC for deep). It does not mention rate limits or auth, but the core behavioral traits are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary line, then detailed explanation, then Args. It is concise for the complexity but could be slightly tighter. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description covers inputs, behavior, and depth variations adequately. It does not detail output fields, but that is likely in the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description provides a detailed Args block explaining cve_id and depth, including explicit values for depth. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a one-call CVE triage orchestrator that fans out multiple upstream sources and computes a composite risk score. It distinguishes itself from sibling tools like lookup_cve or get_epss_score by offering a comprehensive assessment in a single call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a holistic risk assessment is needed, but it does not explicitly state when to avoid this tool in favor of siblings. However, the context of fanning out multiple sources and depth options gives clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Several tools have overlapping purposes, such as check_exploit_availability and check_poc_exists both searching for exploits, and multiple package scanning tools (check_package_vulns, scan_dependencies, scan_container_packages) that differ only in input format. Additionally, passive_dns_lookup and get_domain_intel both query passive DNS, while get_cve_summary and lookup_cve share CVE details. These overlaps could cause an agent to select the wrong tool.
Most tools follow a verb_noun pattern (e.g., check_ip_reputation, lookup_cve, scan_dependencies), but there are minor deviations like 'health_check' (noun_noun) and 'shodan_host_lookup' (noun_noun_verb). The use of multiple verbs (check, get, lookup, scan) is consistent in style, but the structure isn't perfectly uniform.
With 27 tools, the server covers a wide range of vulnerability intelligence and threat hunting tasks. This is slightly on the high side but still reasonable given the breadth of functionality. Each tool has a distinct role, though some consolidation could reduce the count without loss of capability.
The tool surface is remarkably comprehensive for CVE and threat intelligence, covering CVE details, risk scoring, exploit checks, IOC lookups (IP, domain, URL, hash, Bitcoin address), package scanning, container scanning, secrets scanning, DNS, Shodan, and more. There are no obvious gaps for typical vulnerability assessment workflows.
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 Connectors
ZEN SecDB MCP server for CVE intelligence, CVSS/EPSS scoring, advisories, SSVC, and package audits.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Security-first WordPress MCP server. 129 tools for Claude, ChatGPT, Gemini. Free on wp.org.
Related MCP Servers
- AlicenseAqualityBmaintenanceAn MCP server for vulnerability management that provides tools for automated severity and CWE classification using NLP models. It enables AI agents to query the Vulnerability Lookup API for detailed CVE information and search for security vulnerabilities across various sources.1634AGPL 3.0
- 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.4158220MIT
- FlicenseAqualityBmaintenanceAn MCP server that brings NIST National Vulnerability Database (NVD) intelligence directly into Claude, enabling CVE lookup, product search, and prioritized risk assessment via natural language.3
- AlicenseNot gradedqualityBmaintenanceAI-driven penetration testing MCP server that equips Claude with 13 tools for automated reconnaissance, analysis, vulnerability validation, and exploitation.3GPL 3.0
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/mukul975/cve-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server