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.
| Server | Endpoint | Who it is for | Auth |
|---|---|---|---|
| Manufacturer | /api/mcp | The company operating a portal, acting inside its own workspace | OAuth 2.1 token or Enterprise API key |
| Researcher | /api/mcp/public | Anyone reporting a vulnerability to a manufacturer | None |
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
| Tool | Scope required | What it does |
|---|---|---|
submit_vulnerability | submissions:write | Files a disclosure report against your portal. Requires a description; optional productName, vulnerabilityType, stepsToReproduce, impact, contactEmail, pgpKey. |
get_compliance_status | read | Returns your CRA compliance summary and recommendations. |
generate_csaf_advisory | read | Returns 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_response | read | Evaluates 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
| Tool | What it does |
|---|---|
find_vendor_portal | Looks 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_vendor | Files a report to a manufacturer's portal. Takes a slug plus the report fields. Returns a reference number and a tracking token. |
track_vulnerability_report | Reads the current status of a filed report from its tracking token. |
subscribe_to_report | Subscribes 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.