Skip to main content
Glama

CVE MCP server

License: MIT Node MCP

An MCP server that finds known vulnerabilities in your dependencies and tells you which ones matter now.

The problem

npm audit, composer audit and similar tools list every known vulnerability in your dependencies, and on a real project that is often dozens or hundreds of entries, most marked "high". They don't tell you which ones attackers are using today, they only cover what is already installed, and turning the list into a decision (what to fix first, what to upgrade to, does it even apply to how we use the library) is left to you.

This server gives Claude (Claude Code, claude.ai, mobile) live access to the public vulnerability databases, so you can ask in plain language:

  • "Scan this project's lockfiles: what must I fix today?"

  • "Is laravel/framework 8.0.0 safe? What's the smallest upgrade that fixes the critical ones?"

  • "Any new Laravel or Vite CVEs in the last 30 days?"

  • "Does CVE-2025-30208 affect us, given we never expose the Vite dev server?"

It doesn't replace your audit in CI; it is what you use after it, to decide what to do.

Related MCP server: mcp-osv

How it works

  1. Lookup. Packages and versions are checked against OSV.dev (which merges GitHub advisories, npm, Packagist, PyPI and more, including reports of malicious packages). CVE records come from CVE.org and keyword searches from NVD.

  2. Risk. Every finding is enriched with two signals:

    • CISA KEV: is this vulnerability being exploited in the wild right now?

    • EPSS (FIRST.org): the probability it gets exploited in the next 30 days.

  3. Ranking. Results are sorted most urgent first: actively exploited, then by EPSS. On one real project, 144 findings came down to 1 that was actively exploited.

  4. Reasoning. Claude reads the advisories and your code to judge whether each one really applies and proposes the upgrade path.

Everything uses free public APIs; no account needed.

Tools

Tool

Source

What it does

get_cve

CVE.org

Official record of one CVE

search_cves

NVD

Recent CVEs by keyword (e.g. "laravel", last 30 days)

check_package

OSV.dev

Known vulnerabilities of one package version

scan_lockfile

OSV.dev

Every dependency in a composer.lock / package-lock.json at once

Every result carries exploited (listed in CISA KEV = attacked in the wild now) and epss (FIRST probability of exploitation in the next 30 days), and lists are sorted most urgent first. All sources are free and need no account. NVD_API_KEY (optional) raises NVD's rate limit.

Installation

Requirements

  • Node.js 20 or newer

  • An MCP client: Claude Code, Claude Desktop, claude.ai, or any other client that speaks MCP

No API keys are needed, and nothing to clone: npx downloads and runs the server from GitHub. Optionally get a free NVD API key to raise the NVD rate limit for search_cves, and pass it as the NVD_API_KEY environment variable.

Claude Code

claude mcp add cve --scope user -- npx -y github:AlessioMealli/mcp-cve-server

--scope user makes it available in every project. Check it with claude mcp list.

Claude Desktop

Open Settings → Developer → Edit Config (or edit the file directly: ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows) and add:

{
  "mcpServers": {
    "cve": {
      "command": "npx",
      "args": ["-y", "github:AlessioMealli/mcp-cve-server"]
    }
  }
}

Restart Claude Desktop.

Other MCP clients (Cursor, VS Code, Windsurf, ...)

Use the same stdio command in the client's MCP config: npx -y github:AlessioMealli/mcp-cve-server.

From source

git clone https://github.com/AlessioMealli/mcp-cve-server.git
cd mcp-cve-server
npm install --omit=dev

Then use node /absolute/path/to/mcp-cve-server/index.js as the command instead of npx.

Remote (claude.ai, Claude mobile, teams)

Run your own hosted instance (see Self-hosting), then:

  • claude.ai / Claude Desktop / mobile: Settings → Connectors → Add custom connector, URL https://your-domain/mcp. Claude opens a consent page; paste your access token once.

  • Claude Code: claude mcp add --transport http cve https://your-domain/mcp

Usage

Just ask Claude. Some prompts that work well:

Scan the lockfiles in this project and tell me what to fix first.
Check axios 0.21.0 on npm. Which version fixes everything?
Any CVEs about "wordpress" published in the last 7 days?
Explain CVE-2021-44228 and whether it is being exploited.

Locally, scan_lockfile reads a project folder by path (it finds composer.lock and package-lock.json). On a hosted server it takes the lockfile text in content + filename instead and never reads the server's disk.

Configuration

Variable

Mode

Required

Description

NVD_API_KEY

both

no

Raises the NVD rate limit for search_cves

PORT

hosted

no

HTTP port, default 3000. Setting it (or passing --http) starts the hosted mode instead of stdio

CVE_AUTH_TOKEN

hosted

yes

Owner token, at least 24 characters. Generate: node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"

PUBLIC_URL

hosted

yes

The public HTTPS address of the server, e.g. https://cve.example.com

TOKENS_FILE

hosted

no

People's tokens (default tokens.json next to the app)

OAUTH_CLIENTS_FILE

hosted

no

Registered OAuth clients (default oauth-clients.json next to the app)

Under Phusion Passenger (Plesk, cPanel) the hosted mode starts automatically and Passenger handles the port.

Self-hosting

The hosted mode serves /mcp (Streamable HTTP), the OAuth 2.1 endpoints Claude uses to log in, and /health.

PORT=3000 PUBLIC_URL=https://cve.example.com CVE_AUTH_TOKEN=... node index.js

Put it behind an HTTPS reverse proxy (nginx, Caddy, ...) that sets X-Real-IP or X-Forwarded-For, then check https://cve.example.com/health returns {"ok":true,...}. Keep the token in the environment, never in a file in the repo.

  1. DNS: an A record for the subdomain pointing to your server.

  2. Plesk: add the subdomain with Document Root <subdomain>/public (an empty folder, so the app's files are never served) and a Let's Encrypt certificate.

  3. Git: add this repository, deploy to the subdomain root, deployment action bash deploy.sh (installs dependencies and restarts the app). Add Plesk's webhook URL to the GitHub repo to deploy on every push.

  4. Node.js: Application Root = subdomain root, Startup File app.js, mode production, and set CVE_AUTH_TOKEN, PUBLIC_URL and optionally NVD_API_KEY. Then NPM install and Restart.

Giving access to other people

The owner token always works. Everyone else gets their own token, kept in tokens.json (mode 600, never committed). Run these in the app folder, as the user the app runs as:

node tokens.js add elena "Elena Rossi"   # prints her token once
node tokens.js list                      # who has access (never prints tokens)
node tokens.js remove elena              # revoke

Give the person the connector URL and their token. Removing someone cuts off their Claude connection on its next request, with no restart. Lost token: remove and add again.

Security

  • The hosted server refuses to start without a strong CVE_AUTH_TOKEN.

  • Access and refresh tokens are HMAC-signed and checked against the people list on every request, so revoking someone is immediate.

  • Wrong tokens on the consent page are limited to 10 per minute per IP, and the consent form only redirects to addresses the OAuth client registered.

  • Every login and tool call is logged as one JSON line with the person's id ("tenant":"elena"), never the token or lockfile contents.

  • The hosted scan_lockfile does not accept file paths.

Found a security issue in this server? Please open a private security advisory rather than a public issue.

Development

npm install
npm test

npm test runs two live tests against the real APIs: test.js (stdio: every tool, lockfile parsing and ranking) and test-http.js (hosted mode: full OAuth flow, throttle, redirect check, people add/login/remove, tampered token, 2 MB lockfile, no server paths).

Data sources

CVE.org, NVD, OSV.dev, CISA KEV and FIRST EPSS. This project is not affiliated with any of them.

License

MIT

Available Tools

4 tools
check_packageA

Check whether a specific package version has known vulnerabilities (CVE/GHSA, and malicious-package reports) via OSV.dev. Ecosystems: npm, Packagist, PyPI, Maven, Go, crates.io, NuGet, RubyGems, etc. Each result includes exploited (listed in CISA's Known Exploited Vulnerabilities = attacked in the wild now) and epss (FIRST probability of exploitation in the next 30 days, 0-1).

Inputs: name (required), version (required), ecosystem (required).

get_cveA

Fetch the official CVE record from CVE.org (CVE Services API) by ID, e.g. CVE-2021-44228. Each result includes exploited (listed in CISA's Known Exploited Vulnerabilities = attacked in the wild now) and epss (FIRST probability of exploitation in the next 30 days, 0-1).

Inputs: id (required), raw.

scan_lockfileA

Scan a project's dependencies for known vulnerabilities in one go: takes a composer.lock or package-lock.json, checks every installed package against OSV.dev (GitHub advisories, Packagist/npm advisories, malicious packages), and ranks findings most urgent first. Pass path (project folder or lockfile), or the lockfile text in content with filename. Each result includes exploited (listed in CISA's Known Exploited Vulnerabilities = attacked in the wild now) and epss (FIRST probability of exploitation in the next 30 days, 0-1).

Inputs: path, content, filename, includeDev.

search_cvesA

Search recent CVEs by keyword (product, library, vendor) via the NVD API. Use to find new vulnerabilities affecting a stack, e.g. keyword 'laravel', days 30. Sorted most urgent first. Each result includes exploited (listed in CISA's Known Exploited Vulnerabilities = attacked in the wild now) and epss (FIRST probability of exploitation in the next 30 days, 0-1).

Inputs: keyword (required), days, limit, minSeverity.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 4 tools

    Disambiguation5/5

    Each tool targets a distinct granularity and input: scan_lockfile handles whole lockfiles, check_package handles a single package/version, get_cve retrieves by CVE ID, and search_cves finds CVEs by keyword. The boundary between scan_lockfile and check_package is clearly explained by scope, preventing likely misselection.

    Naming Consistency5/5

    All names follow a consistent snake_case verb_noun pattern: scan_lockfile, get_cve, search_cves, check_package. The singular/plural variation between get_cve and search_cves reflects the object semantics rather than a naming inconsistency.

    Tool Count5/5

    Four tools are well-scoped for a focused CVE/vulnerability server, with each tool covering a distinct workflow: project scanning, individual package checking, CVE lookup, and keyword search. No tool feels redundant or trivial.

    Completeness4/5

    The surface covers the core lifecycle: scanning dependencies, checking a specific package, fetching a CVE, and searching recent CVEs. Minor gaps exist, such as no direct GHSA/advisory lookup by ID or bulk CVE listing, but agents can work around these using the provided tools.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to look up known open-source vulnerabilities in the OSV.dev database, covering individual packages and versions, specific git commits, single vulnerability IDs, and batch SBOM-style dependency scans. Queries are keyless and return compact summaries or full vulnerability details with affected ranges and references.
      341 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables Claude to query and correlate security intelligence from numerous vulnerability, network, and threat APIs for CVE triage, risk scoring, and exploit assessment. It fans out across sources to produce composite risk scores, patch recommendations, and prioritized remediation guidance through natural language.
      Apache 2.0
    • A
      license
      A
      quality
      B
      maintenance
      Enables any MCP client (Claude Code, Claude Desktop, Codex, or a custom agent) to fetch the latest CVEs at query time from live sources — NVD, CVE List V5, GitHub Advisory Database, CISA KEV and FIRST EPSS — without a separate API key. Exposes search, filtering (severity, RCE, PoC, KEV, keyword, CPE), per-CVE detail and risk-scored patch prioritization as JSON tools, so answers are grounded in live data rather than model memory.
      6
      1
      MIT