
NVD Database
STDIOMCP server for querying NIST National Vulnerability Database API
MCP server for querying NIST National Vulnerability Database API
A Model Context Protocol server implementation to query the NIST National Vulnerability Database (NVD) via its API. https://nvd.nist.gov/
As a prerequisite an NVD API key is required. (Request here).
Works with Claude Desktop app and other MCP compliant hosts and clients using both the stdio
and sse
transports.
The server implements the following tools to query the NVD Database:
get_cve
:
cve_id
(str): The CVE ID (e.g., CVE-2019-1010218
).concise
(bool, default False
): If True
, returns a shorter format.search_cve
:
keyword
(str): Search term (e.g., Red Hat
).exact_match
(bool, default False
): If True
, requires an exact phrase match.concise
(bool, default False
): If True
, returns shorter CVE records.results
(int, default 10
): Maximum number of CVE records (1-2000).Create or edit the Claude Desktop configuration file located at:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%/Claude/claude_desktop_config.json
Add the following:
{ "mcpServers": { "mcp-nvd": { "command": "/path/to/uvx", "args": ["mcp-nvd"], "env": { "NVD_API_KEY": "your-api-key" } } } }
Replace /path/to/uvx
with the absolute path to the uvx
executable. Find the path with which uvx
command in a terminal. This ensures that the correct version of uvx
is used when starting the server.
Restart Claude Desktop to apply the changes.
Prerequisites:
uv
package manager (installation).Clone the Repository:
git clone https://github.com/marcoeg/mcp-nvd cd mcp-nvd
Set Environment Variables:
.env
file in the project root:
NVD_API_KEY=your-api-key
your-api-key
with your NVD API key.Install Dependencies:
uv sync uv pip install -e .
cd /path/to/the/repo source .env npx @modelcontextprotocol/inspector uv \ --directory /path/to/repo/mcp-nvd run mcp-nvd
Then open the browser to the URL indicated by the MCP Inspector, typically http://localhost:8077?proxyPort=8078
Switch freely between
stdio
andsse
transport types in the inspector.
cd /path/to/the/repo source .env uv run mcp-nvd --transport sse --port 9090
9090
by default.Test get_cve
:
uv run client.py http://localhost:9090/sse CVE-2019-1010218
Test search_cve
(default 10 results):
uv run client.py http://localhost:9090/sse "search:Red Hat"
Test search_cve
(exact match, 5 results):
uv run client.py http://localhost:9090/sse "search:Microsoft Windows:exact:5"
docker build -t mcp-nvd:latest .
With .env
:
docker run -d -p 9090:9090 -v /path/to/.env:/app/.env mcp-nvd:latest
With env var:
docker run -d -p 9090:9090 -e NVD_API_KEY="your-key" mcp-nvd:latest
Custom port:
docker run -d -p 8080:8080 -v /path/to/.env:/app/.env mcp-nvd:latest uv run mcp-nvd --transport sse --port 8080 --host 0.0.0.0
docker logs <container_id> # Expect: INFO: Uvicorn running on http://0.0.0.0:9090
Test:
uv run client.py http://localhost:9090/sse CVE-2019-1010218
.env
has NVD_API_KEY=your-key
or use -e
.9090
.Here’s the summary formatted as Markdown comments within a code block, suitable for inclusion in a file like docker-compose.yaml
or README.md
:
This docker-compose.yaml
, located in the tests/
directory, defines a service for testing the MCP-NVD server using a pre-built Docker image. It’s designed for a testing use case, similar to a standalone service like clickhouse
, and assumes the image is built beforehand rather than rebuilt each time.
mcp-nvd:test
, available locally or in a registry. The image is based on the Dockerfile
in the parent directory, which sets up the MCP-NVD server with uv
and runs it in SSE mode on port 9090.To create the mcp-nvd:test
image:
cd ./mcp-nvd
docker build -t mcp-nvd:test .
pyproject.toml
and the mcp_nvd/
module, setting the default command to run the server.From the tests/
directory:
cd tests docker-compose up
http://localhost:9090
.docker-compose down
.NVD_API_KEY
is in ../.env
or use docker-compose --env-file ../.env up
.test_tools.py
in the Docker Compose ScenarioTo run the unit tests (test_tools.py
) within the Docker environment:
mcp-nvd
service is running via docker-compose up
.mcp-nvd-mcp-nvd-1
) with:
docker ps
docker exec -it mcp-nvd-mcp-nvd-1 python /app/tests/test_tools.py
test_tools.py
is copied into the image at /app/tests/
. If not, modify the Dockerfile to include:
Then rebuild the image withCOPY tests/ ./tests/
docker build -t mcp-nvd:test .
from the root.cd tests python test_tools.py
http://localhost:9090
while the service runs.log-data
volume (optional).mcp-nvd:test
before running docker-compose
.Credits to @sidharthrajaram for its working pattern for SSE-based MCP clients and servers: https://github.com/sidharthrajaram/mcp-sse