GraphQL
The GraphQL API is served at /gql and requires authentication: every
request must carry a bearer token. It exposes the published CVE data plus
the CVE lifecycle, case, and user-management operations your role allows. The
published data alone is also available without authentication as plain JSON
under /cves/index.json and
/osv/all.json.
curl -X POST https://cna.erlef.org/gql \
-H "content-type: application/json" \
-H "authorization: Bearer <token>" \
-d '{"query": "{ listPublishedCves { results { cveId title } } }"}'
MCP
The Model Context Protocol server at
/mcp exposes the same data and lifecycle operations as tools for AI agents
such as Claude Code. A typical client configuration:
{
"mcpServers": {
"eef-cna": {
"type": "http",
"url": "https://cna.erlef.org/mcp"
}
}
}
Authenticating with OAuth 2.1
Both surfaces accept OAuth 2.1 access tokens. Clients register themselves
(dynamic client registration) and discover the authorization server through
the standard metadata documents at /.well-known/oauth-authorization-server
and /.well-known/oauth-protected-resource. MCP clients do all of this
automatically starting from the discovery challenge of an unauthenticated
request — point them at the MCP URL, approve the consent screen in your
browser, and you are done.
Access tokens are scoped per surface: mcp grants the MCP endpoint, gql
grants GraphQL. A token used on a surface whose scope it does not carry is
rejected with 403 insufficient_scope.
Personal API Tokens
For clients without OAuth support, create a personal access token under
API Tokens (login required) and send it as an
Authorization: Bearer header. These tokens act as you on both surfaces
without scope restrictions, so prefer OAuth where possible and give manual
tokens an expiry.
Fair Use
Every registered user gets full API access. This is deliberately permissive: it lets you automate your interactions with the CNA with the tooling of your choice, including submitting vulnerability reports. Please behave yourself — should this openness be abused, we will restrict API access.