Skip to main content
Glama

πŸ›‘οΈ CVE MCP Server

CVE MCP Server

AI-powered security intelligence at your fingertips β€” 28 tools + a one-call triage_cve orchestrator, 24 data sources, one protocol. GARS-2026 Survey Python 3.10+ License: MIT MCP Compatible Security Tool FastMCP

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

triage_cve

One-call triage that fans out NVD + EPSS + CISA KEV (+ public PoC for depth != "quick") concurrently, computes the composite risk score with a KEV hard override, falls back to VulnCheck NVD++ when NIST NVD is throttled, and on depth="deep" emits the SSVC v2 gated decision

Free / No key (key recommended)

triage_cve("CVE-2021-44228", depth="deep")

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

lookup_cve

Fetch detailed CVE record from NVD including CVSS scores, CWEs, affected products, references, and timeline

Free / No key (key recommended)

lookup_cve("CVE-2024-3400")

search_cves

Search NVD for CVEs by keyword, product name, severity, or date range

Free / No key (key recommended)

search_cves(keyword="Apache Log4j", severity="CRITICAL")

get_epss_score

Get EPSS exploitation probability (0–1) and percentile for one or more CVEs

Free / No key

get_epss_score("CVE-2024-3400")

check_kev_status

Check whether a CVE appears in CISA's Known Exploited Vulnerabilities catalog

Free / No key

check_kev_status("CVE-2021-44228")

get_cvss_details

Parse and explain a CVSS v3.1 vector string with per-metric breakdown

Free / No key

get_cvss_details("CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H")

get_cwe_info

Look up Common Weakness Enumeration details by CWE ID from embedded database

Free / No key

get_cwe_info("CWE-79")

get_cve_references

Extract and categorize all reference links for a CVE (patches, advisories, exploits)

Free / No key (key recommended)

get_cve_references("CVE-2023-44487")

bulk_cve_lookup

Batch-fetch details for up to 20 CVEs in a single call with parallel enrichment

Free / No key (key recommended)

bulk_cve_lookup(["CVE-2024-3400", "CVE-2023-44487"])

Exploit & Attack Intelligence (4 tools)

Tool

Description

API Key Required

Example Usage

search_exploits

Search GitHub for public proof-of-concept exploits and exploit code repositories

GITHUB_TOKEN (optional)

search_exploits("CVE-2024-3400")

get_mitre_techniques

Map a CVE or CWE to relevant MITRE ATT&CK techniques, tactics, and mitigations

Free / No key

get_mitre_techniques("CVE-2021-44228")

check_poc_availability

Determine if known proof-of-concept code exists for a CVE across multiple sources

GITHUB_TOKEN (optional)

check_poc_availability("CVE-2024-3400")

get_attack_patterns

Retrieve CAPEC attack pattern details associated with a CWE or CVE

Free / No key

get_attack_patterns("CWE-89")

Phase 3: Advanced Risk & Reporting (4 tools)

Tool

Description

API Key Required

Example Usage

calculate_risk_score

Compute composite 0–100 risk score using CVSS, EPSS, KEV status, and PoC availability

Free / No key (key recommended)

calculate_risk_score("CVE-2024-3400")

generate_risk_report

Generate a formatted executive security report for one or more CVEs with recommendations

Free / No key (key recommended)

generate_risk_report(["CVE-2024-3400", "CVE-2023-44487"])

prioritize_cves

Rank a list of CVEs by composite risk score for triage prioritization

Free / No key (key recommended)

prioritize_cves(["CVE-2024-3400", "CVE-2023-4966", "CVE-2023-44487"])

get_trending_cves

Retrieve trending CVEs based on high EPSS scores and recent KEV additions

Free / No key

get_trending_cves(days=7, min_epss=0.5)

Network Intelligence (4 tools)

Tool

Description

API Key Required

Example Usage

lookup_ip_reputation

Check IP address abuse history and confidence score via AbuseIPDB

ABUSEIPDB_API_KEY

lookup_ip_reputation("185.220.101.34")

check_ip_noise

Query GreyNoise for IP scan/attack activity, classification, and associated CVEs

GREYNOISE_API_KEY

check_ip_noise("185.220.101.34")

shodan_host_lookup

Get open ports, services, banners, and vulnerabilities for an IP via Shodan

SHODAN_API_KEY

shodan_host_lookup("8.8.8.8")

passive_dns_lookup

Retrieve historical DNS resolution data for a domain from CIRCL Passive DNS

CIRCL_PDNS_USER + CIRCL_PDNS_PASSWORD

passive_dns_lookup("example.com")

Threat Intelligence (4 tools)

Tool

Description

API Key Required

Example Usage

virustotal_lookup

Analyze file hashes, URLs, domains, or IPs against 70+ antivirus engines

VIRUSTOTAL_API_KEY

virustotal_lookup(hash="44d88612fea8a8f36de82e1278abb02f")

search_malware

Search MalwareBazaar for malware samples by hash, tag, or signature

ABUSECH_AUTH_KEY (optional)

search_malware(tag="Emotet")

search_iocs

Query ThreatFox for Indicators of Compromise linked to malware families

ABUSECH_AUTH_KEY (optional)

search_iocs(malware="CobaltStrike")

check_ransomware

Look up ransomware payment addresses and transaction data from Ransomwhere

Free / No key

check_ransomware(address="bc1q...")

DevSecOps (3 tools)

Tool

Description

API Key Required

Example Usage

scan_dependencies

Scan package names and versions against OSV.dev for known vulnerabilities

Free / No key

scan_dependencies(ecosystem="PyPI", packages={"requests": "2.28.0"})

scan_github_advisories

Search GitHub Security Advisories by ecosystem, package, or severity

GITHUB_TOKEN (optional)

scan_github_advisories(ecosystem="pip", package="django")

urlscan_check

Submit a URL for scanning or retrieve previous scan results from URLScan.io

URLSCAN_API_KEY

urlscan_check("https://suspicious-site.com")


πŸ“¦ 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.server

Using 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 .env

With 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?

NVD_API_KEY

10Γ— faster NVD lookups (50 req/30s vs 5)

Request at nvd.nist.gov

50 requests per 30 seconds

Optional but strongly recommended

GITHUB_TOKEN

GitHub Advisory search + exploit PoC search

Create PAT at github.com/settings/tokens

5,000 requests/hour

Optional (60/hr without)

ENV Variable

Enables

How to Get

Free Tier Limits

Required?

ABUSEIPDB_KEY

IP reputation lookups

Register at abuseipdb.com

1,000 checks/day

Required for IP tools

VIRUSTOTAL_KEY

File/URL/domain/IP malware scanning

Sign up at virustotal.com

500 lookups/day, 4/min

Required for VT tools

GREYNOISE_API_KEY

IP noise/scan activity intelligence

Sign up at viz.greynoise.io

50 queries/week (community)

Required for GreyNoise tools

SHODAN_KEY

Host/port/service reconnaissance

Register at account.shodan.io

Basic host lookups (free tier)

Required for Shodan tools

Tier 3: Optional (extended intelligence)

ENV Variable

Enables

How to Get

Free Tier Limits

Required?

URLSCAN_KEY

URL scanning and website analysis

Sign up at urlscan.io

5,000 public scans/day

Optional

CIRCL_PDNS_USER

CIRCL Passive DNS lookups

Request access at circl.lu

Partner access only

Optional

CIRCL_PDNS_PASS

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 errors

Claude 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' > .env

Request 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 IMMEDIATELY

Claude'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 packages

Claude'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: Linux

Claude'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 via triage_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_cve orchestrator β€” one tool call that fans out NVD + EPSS + CISA KEV (+ public PoC discovery for depth != "quick") concurrently, computes the composite risk score, and returns a clean report. depth is quick / standard (default) / deep; deep additionally emits the SSVC v2 gated decision.

  • New upstream sources β€” VulnCheck NVD++ (a transparent NVD fallback used automatically inside triage_cve when 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 in triage_cve and health_check.

  • HTTP transport β€” set MCP_TRANSPORT=http to serve streamable-HTTP on HOST:PORT (default 0.0.0.0:8000, stateless) instead of stdio. Ships with a Dockerfile.

  • Resources & prompts β€” resources kev://catalog, epss://scores/{cve_id}, and manifest://tool-hash (SHA-256 over the registered tool surface); prompts patch_decision, compare_and_prioritize, and dependency_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

apiKey header (optional)

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

Bearer token

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

Key header

1,000 checks/day

8

GreyNoise

IP noise/scan activity, classification

key header

50 queries/week

9

Shodan

Open ports, services, banners, CVEs

key query param

Basic lookups

10

VirusTotal

Multi-AV scan results, reputation

x-apikey header

500/day, 4/min

11

MalwareBazaar

Malware samples, hashes, signatures

Auth-Key header

Fair use

12

ThreatFox

IOCs linked to malware families

Auth-Key header

Fair use

13

Ransomwhere

Ransomware BTC addresses and transactions

None

No published limit

14

URLScan.io

URL scanning, screenshots, DOM

API-Key header

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

Bearer token

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)

Bearer token (free Community)

Per VulnCheck Community tier

23

CIRCL hashlookup

Known-good file metadata (NSRL + others), hashlookup:trust

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-missing

Test with the MCP Inspector

npx @modelcontextprotocol/inspector python -m cve_mcp.server

Opens 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 computation

Caching 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

  • .env is gitignored

  • Keys 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-key

The 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 endpoint

Windows 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

  1. Add the tool function in server.py with the @mcp.tool() decorator

  2. Add input validation in utils/validators.py

  3. Implement the API client in api/

  4. Add tests in tests/

  5. 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 β†’ return

Testing 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 tools
calculate_risk_scoreB

Calculate a composite 0-100 risk score using CVSS, EPSS, KEV, and PoC data.

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
packageYes
ecosystemYes
versionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes
include_githubNo
include_exploitdbNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
bitcoin_addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
url_or_domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes
formatNotechnical
include_remediationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
hash_strYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
iocYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
vectorYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
ip_or_domainYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
packagesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dependency_listYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
search_termYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
severityNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYes
depthNostandard

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A3.5/5.0
Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityStale
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    An 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.
    16
    34
    AGPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Unifies 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.
    41
    582
    20
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    An 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

Latest Blog Posts

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