cyanheads/osv-advisory-mcp-server
osv-advisory-mcp-server is an MCP server that queries the OSV.dev vulnerability database, offering single-package version checks, batch audits of up to 1000 {name, ecosystem, version} tuples for SBOM/lockfile triage, and full advisory record fetch by OSV ID (GHSA/PYSEC/RUSTSEC/GO/DSA/DLA/CVE prefixes). It surfaces CVE aliases, CVSS vectors, derived severity labels, and CWE IDs, and is designed to chain into a companion nist-nvd-mcp-server for CVSS base scores, EPSS probability, and CISA KEV status. It ships as a keyless, no-API-key tool runnable via STDIO or Streamable HTTP, with a public hosted instance and Bun/npx/Docker install paths.
What it is
An MCP server wrapping the OSV.dev vulnerability database, distributed as an npm package (@cyanheads/osv-advisory-mcp-server) and also running as a public hosted instance at https://osv-advisory.caseyjhand.com/mcp — usable with no installation by pointing an MCP client at it over Streamable HTTP. It exposes four tools: osv_query_package, osv_query_batch, an advisory-fetch-by-ID tool, and osv_list_ecosystems. No API key is required; OSV.dev is keyless with no published rate limit.
How it works
The detail worth knowing: osv_query_batch does not use OSV.dev's native batch endpoint. It fans out parallel single-package queries because the upstream batch endpoint omits aliases (the CVE IDs) — and those CVE IDs are the whole point, since they're the join key for chaining to nist-nvd-mcp-server for CVSS base scores, EPSS, and CISA KEV. Per-package queries also isolate failures: one bad ecosystem string or upstream error surfaces as that row's error field rather than failing the whole batch. severityLabel is derived from GHSA database_specific.severity or the highest CVSS base score, and returns null rather than a fabricated value when neither exists.
Preconditions / Affected
- Batch calls accept 1–1000
{name, ecosystem, version}tuples per call. - Ecosystem strings are case-sensitive exact matches —
"pypi"is not"PyPI". Callosv_list_ecosystemsfirst to validate strings pulled from lockfiles or user input. - Self-hosting requires Bun v1.3.0+ or Node.js v24+.
What to do
Use the public instance with no install:
{
"mcpServers": {
"osv-advisory-mcp-server": {
"type": "streamable-http",
"url": "https://osv-advisory.caseyjhand.com/mcp"
}
}
}Or run locally via npx (no Bun required):
{
"mcpServers": {
"osv-advisory-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/osv-advisory-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" }
}
}
}Docker image is ghcr.io/cyanheads/osv-advisory-mcp-server:latest. For HTTP self-host: MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http (listens at /mcp).
Caveats
- The public hosted endpoint is a third-party domain — sending a batch means sending your dependency/version inventory off-host. Self-host (STDIO or your own HTTP) if that's a concern.
osv_list_ecosystemsis sourced statically from the OSV schema spec and "may occasionally lag newly added ecosystems," so a valid-but-new ecosystem can fail validation.- Underlying framework (
@cyanheads/mcp-ts-core) supportsjwt/oauthauth and Supabase/Cloudflare storage backends, but the page states no required env vars — the default deployment is unauthenticated.
Organisations named here
- EPSS
Technologies named here
- osv-advisory-mcp-server
- OSV.dev
- nist-nvd-mcp-server
- @cyanheads/mcp-ts-core
- Docker
- Vitest
- Model Context Protocol
- OSV
- Bun
- Node.js
- CVSS
- CISA KEV
Related in Supply Chain


