Skip to main content

MCP Server

CVD Portal exposes a Model Context Protocol (MCP) server so AI agents can act on the platform directly, the same way a script would use the REST API. An agent connected to it can submit a vulnerability report, read a company's CRA compliance status, and generate a CSAF advisory, without any custom integration code.

There are two servers, one for each side of a disclosure.

ServerEndpointWho it is forAuth
Manufacturer/api/mcpThe company operating a portal, acting inside its own workspaceOAuth 2.1 token or Enterprise API key
Researcher/api/mcp/publicAnyone reporting a vulnerability to a manufacturerNone

The rest of this page covers the manufacturer server. The researcher server is documented under Public MCP server below.

The manufacturer server is an Enterprise feature. It accepts either an OAuth 2.1 access token obtained via authorization code grant with PKCE, or a legacy Bearer API key. When accessed without credentials, it returns an HTTP 401 status with an RFC 9728 WWW-Authenticate header pointing to /.well-known/oauth-protected-resource so compatible agents can discover the authorization server and register automatically.

Endpoint

https://cvdportal.com/api/mcp

The transport is streamable HTTP. Authenticate with an API key as a Bearer token:

Authorization: Bearer <your-api-key>

Create and scope keys under Settings → API Keys in the dashboard. A key with no scopes has full access; a scoped key can only call tools whose scope it carries.

Connecting

Claude Code

claude mcp add --transport http cvd-portal https://cvdportal.com/api/mcp \
--header "Authorization: Bearer <your-api-key>"

Any MCP client

Point the client at https://cvdportal.com/api/mcp with the Authorization: Bearer <your-api-key> header. Clients that support the Model Context Protocol streamable HTTP transport will discover the tools automatically.

Tools

ToolScope requiredWhat it does
submit_vulnerabilitysubmissions:writeFiles a disclosure report against your portal. Requires a description; optional productName, vulnerabilityType, stepsToReproduce, impact, contactEmail, pgpKey.
get_compliance_statusreadReturns your CRA compliance summary and recommendations.
generate_csaf_advisoryreadReturns the machine-readable exploitability document for the advisory linked to a submission you own. Takes a submissionId, and an optional format of csaf (CSAF 2.0 VEX profile, the default) or openvex (OpenVEX v0.2.0). The advisory must already exist for that submission. Machine-readable export requires the Pro plan.
assess_responsereadEvaluates an incident or vulnerability response plan for a submission you own. Returns the CRA Article 14 reporting verdict, live per-stage deadlines, missing SRP fields, placeholder Article 64 liability exposure, and an ordered next-action list. Does not transmit reports to authorities; transmission is human-gated.

Every tool operates only within the company that owns the API key. A tool call can never reach another tenant's data, and the company is always taken from the verified key, never from the tool's arguments.

Public MCP server

The researcher side needs no account and no API key. It exposes the same actions a researcher already performs in a browser, so an agent can find a vendor's portal, file a report, and follow it afterwards.

https://cvdportal.com/api/mcp/public

Claude Code

claude mcp add --transport http cvd-portal-public https://cvdportal.com/api/mcp/public
ToolWhat it does
find_vendor_portalLooks up a manufacturer's portal by slug or custom domain. Returns the portal URL, the security.txt URL, the policy URL, and the disclosure contact.
submit_vulnerability_to_vendorFiles a report to a manufacturer's portal. Takes a slug plus the report fields. Returns a reference number and a tracking token.
track_vulnerability_reportReads the current status of a filed report from its tracking token.
subscribe_to_reportSubscribes a public HTTPS callback URL to real-time status push notifications using the tracking token. Callbacks receive signed HTTP POST webhooks with status-only payloads.

Three things are worth knowing before an agent uses this.

Record the tracking token. It is the only route back to an anonymous report and it cannot be recovered.

Filing is limited to 5 reports per minute, per portal, per IP, the same ceiling as the web form. The limit is shared, so switching between the form and MCP does not raise it.

track_vulnerability_report returns status, vendor, product, and dates. It never returns the report body, the reproduction steps, the impact, or the contact details. A tracking token proves possession, not authorship.

A disclosure is a permanent record on the vendor's side and cannot be retracted through the API. Confirm the vendor and the finding with the person you are acting for before filing.

Privacy

Tool-call analytics record which tool ran, its outcome, and timing. Argument and result content, which can include vulnerability details, is not recorded by default. This applies to both servers.

See also