Skip to main content
Glama
CVE Search MCP Server

CVE Search MCP Server

by Arnabdaz

CVE Search MCP Server

A Model Context Protocol (MCP) server for CVE and vulnerability searching, optimized for PR review scenarios. Helps developers and security teams identify the latest CVEs and vulnerabilities — including those that postdate an LLM's training data.

Features

  • 8 tools covering CVE lookup, bulk scanning, keyword search, product search, recent CVEs, high-severity alerts, database stats, and detailed CVSS breakdowns

  • Multi-source: NVD, GitHub Advisory, OSV, CIRCL — searched concurrently and deduplicated

  • Smart normalization: "Node.js", "Spring Boot", "log4j2" all resolve correctly

  • Optional auth: GITHUB_TOKEN and NVD_API_KEY for higher rate limits

  • 3 transports: stdio (default), SSE, Streamable HTTP

Related MCP server: Git-Fabric CVE

Installation

Prerequisites

  • Python 3.10+

  • uv package manager

Install

cd cve-search
uv sync

Development Setup

uv sync --extra dev
uv run --extra dev pytest
uv run black src/
uv run ruff check src/

Configuration

Env Var

Default

Description

GITHUB_TOKEN

none

GitHub personal access token. Raises GitHub Advisory API rate limit from 60 to 5000 req/hr.

NVD_API_KEY

none

NVD API key. Raises rate limit from 5 to 50 req/30s. Get one at nvd.nist.gov.

CVE_SEARCH_TIMEOUT

20

HTTP request timeout in seconds.

CVE_SEARCH_MAX_RESULTS

100

Maximum results returned per tool call.

Running

# stdio (default — for Claude Desktop/IDE)
uv run python main.py

# SSE
uv run python main.py --transport sse --host 127.0.0.1 --port 8000

# Streamable HTTP (MCP spec 2025-06-18+)
uv run python main.py --transport streamable-http --host 127.0.0.1 --port 8000

Claude Desktop Config

{
  "mcpServers": {
    "cve-search": {
      "command": "uv",
      "args": ["--directory", "/path/to/cve-search", "run", "python", "main.py"],
      "env": {
        "GITHUB_TOKEN": "your-token-here",
        "NVD_API_KEY": "your-key-here"
      }
    }
  }
}

Tools

Tool

Description

Speed

search_cve_by_id

Look up a specific CVE by ID (e.g. CVE-2021-44228)

Fast

bulk_cve_lookup

Look up up to 20 CVE IDs in one call — ideal for scanning PR dependency lists

Fast

search_vulnerabilities_by_product

Search by vendor/product name (e.g. vendor="apache", product="struts")

Slow (10-15s)

get_recent_cves

Get CVEs from the last N days

Fast

check_high_severity_cves

Get CVSS ≥ 7.0 CVEs from the last N days

Fast

search_by_keyword

Smart multi-source keyword search (NVD + GitHub Advisory + OSV)

Fast

get_vulnerability_stats

Database stats: total CVE count, last updated timestamp

Fast

cvss_score_lookup

Detailed CVSS v3/v4 breakdown for a CVE (base score, vector string, per-metric)

Fast

PR Review Workflow

Scan a list of CVE IDs from a dependency audit

bulk_cve_lookup(["CVE-2021-44228", "CVE-2023-44487", "CVE-2024-12345"])

Search for vulnerabilities in a technology being introduced

search_by_keyword("spring boot")

Check high-severity CVEs published this week

check_high_severity_cves(7)

Get detailed CVSS breakdown for a flagged CVE

cvss_score_lookup("CVE-2021-44228")

Project Structure

cve-search/
├── src/mcp_server_cve_search/
│   ├── config.py            # Config from env vars
│   ├── server.py            # FastMCP app + transport dispatch
│   ├── tools/               # One module per tool group
│   │   ├── cve_lookup.py    # search_cve_by_id, bulk_cve_lookup
│   │   ├── product_search.py
│   │   ├── recent_cves.py   # get_recent_cves, check_high_severity_cves
│   │   ├── keyword_search.py
│   │   ├── stats.py         # get_vulnerability_stats
│   │   └── cvss.py          # cvss_score_lookup
│   ├── sources/             # One client per API
│   │   ├── circl.py         # CIRCL CVE Search
│   │   ├── nvd.py           # NVD/NIST (optional API key)
│   │   ├── github.py        # GitHub Advisory (optional token)
│   │   └── osv.py           # OSV (Google)
│   └── utils/
│       ├── severity.py      # CVSS score helpers
│       ├── normalization.py # Keyword normalization + tech mappings
│       └── formatting.py    # Summary/alert formatting
├── tests/
├── examples/
├── main.py
├── test_server.py           # Manual live-API integration test
└── pyproject.toml

Data Sources

Source

URL

Notes

CIRCL CVE Search

cve.circl.lu

Primary source; no auth required

NVD (NIST)

nvd.nist.gov

Richest CVSS data; optional API key

GitHub Advisory

github.com/advisories

Optional token for higher rate limits

OSV (Google)

osv.dev

Open source vulnerability database

License

MIT License

Available Tools

8 tools
bulk_cve_lookupA

Look up multiple CVEs by ID concurrently (max 20 IDs). Useful for scanning dependency lists extracted from pull requests. Returns a dict of {cve_id: result} with severity info for each entry.

Inputs: cve_ids (required). Returns: object

check_high_severity_cvesA

Get high-severity CVEs (CVSS >= 7.0) from the last N days (1-365). Fast. Covers Critical (9.0-10.0) and High (7.0-8.9) severity. Example: check_high_severity_cves(7) — this week's critical threats.

Inputs: days. Returns: object

cvss_score_lookupA

Get a detailed CVSS v3/v4 breakdown for a CVE: base score, vector string, and individual metrics (Attack Vector, Complexity, Privileges Required, User Interaction, Scope, Confidentiality/Integrity/Availability Impact). Uses NVD which carries the richest CVSS data.

Inputs: cve_id (required). Returns: object

get_recent_cvesA

Get CVEs published in the last N days (1-365). Fast. Returns a list with severity analysis and alert level. Example: get_recent_cves(7, 30) — last week's top 30 CVEs.

Inputs: days, limit. Returns: object

get_vulnerability_statsA

Get CVE database statistics: total count, last updated timestamp, and source info. Fast. Useful for health checks and confirming database freshness before analysis.

Inputs: no named parameters. Returns: object

search_by_keywordA

Smart CVE search by technology/library keyword. Fast. Normalizes common variations ("Node.js", "Spring Boot", "log4j2"). Searches NVD, GitHub Advisory, and OSV concurrently and deduplicates results. Example: search_by_keyword("nodejs"), search_by_keyword("spring boot").

Inputs: keyword (required), limit. Returns: object

search_cve_by_idA

Search for a specific CVE by exact ID (e.g., CVE-2021-44228). Use when you have a CVE ID from code, docs, or security reports. Returns complete CVE details with CVSS score and severity analysis.

Inputs: cve_id (required). Returns: object

search_vulnerabilities_by_productA

Search vulnerabilities by vendor and product name (e.g., vendor="apache", product="struts"). WARNING: This can be slow (10-15 seconds). Use search_by_keyword for faster results. Returns matched vulnerabilities with severity summary.

Inputs: vendor (required), product (required), limit. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 8 tools

    Disambiguation4/5

    Tools have mostly distinct purposes, but get_recent_cves and check_high_severity_cves both retrieve recent CVEs, differing only by severity filter. Bulk vs single CVE lookup also overlap slightly. Descriptions help disambiguate.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern with underscores and are descriptive, e.g., search_by_keyword, get_recent_cves. No mixing of conventions.

    Tool Count5/5

    8 tools is well-scoped for a CVE search server, covering various lookup methods and utility functions without being excessive.

    Completeness4/5

    Covers key CVE lookup methods (by ID, keyword, product, date range, severity) and stats. Missing advanced features like subscription or CVE creation, but core search is complete.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Provides tools for autonomous CVE detection, enrichment, and remediation across managed repositories using GHSA and NVD data. It enables automated triage and pull request creation for dependency fixes based on configurable severity policies.
      1
      MIT