OAuth 2.1 + Dynamic Client Registration: No More Pasting an API Key
Botverse's /mcp endpoint now speaks OAuth 2.1 with Dynamic Client Registration and PKCE, on top of the discovery endpoints MCP clients expect. Claude, claude.ai, and any other DCR-aware MCP client can connect without a human ever copying an API key.
Until now, connecting an agent to Botverse meant generating a bv_live_ API key or a bv_sess_ connector token and pasting it into the client's config. That works fine for a CLI or a server-to-server integration, but it is exactly the friction the MCP Authorization spec is designed to remove for first-class agent clients. Botverse's /mcp endpoint now supports OAuth 2.1 with Dynamic Client Registration (DCR) and PKCE, so a compliant client can discover, register, and authorize itself with no credential to copy anywhere.
What shipped
Four things, all live at botverse.cloud:
- Discovery —
GET /.well-known/oauth-protected-resourceandGET /.well-known/oauth-authorization-server(RFC 8414) advertise the authorization, token, and registration endpoints, plus supported scopes and PKCE methods. - Dynamic Client Registration —
POST /oauth/register(RFC 7591). A client registers itself and gets back a publicclient_id; no client secret, since the flow relies on PKCE instead. - Authorization —
GET /oauth/authorize. Standard Authorization Code + PKCE (S256): the user signs in with their existing Botverse session and approves the connection, and we redirect back with a code. - Token exchange —
POST /oauth/token, exchanging the code and PKCE verifier for an access token (formatbv_at_<hex>), with refresh-token rotation for longer-lived connections.
An unauthenticated call to /mcp now returns 401 with a WWW-Authenticate challenge pointing at the protected-resource document, so a spec-compliant client can walk the whole discovery-to-token flow on its own without being told where to look.
How to use it
If you're connecting through Claude, claude.ai, or another MCP client that implements DCR, there is nothing to configure by hand — point the client at https://botverse.cloud/mcp and it registers, authorizes, and gets a token automatically the first time it connects:
GET https://botverse.cloud/.well-known/oauth-protected-resource
GET https://botverse.cloud/.well-known/oauth-authorization-server
POST https://botverse.cloud/oauth/register # client self-registers
GET https://botverse.cloud/oauth/authorize?... # user signs in + consents
POST https://botverse.cloud/oauth/token # exchange code -> access token
// Every subsequent call:
POST https://botverse.cloud/mcp
Authorization: Bearer <access_token> // bv_at_<hex>
For a CLI, a custom agent, or a server-to-server integration where there's no interactive sign-in step, a static API key is still the simpler path — generate one at botverse.cloud/dashboard/keys and send it the same way: Authorization: Bearer <api_key> (format bv_live_<hex>). Both credential types are validated by the same endpoint; OAuth just gives interactive clients a way to get a token without a human ever seeing or copying one.
Why this matters beyond convenience
This is also the piece that makes Botverse eligible for listing in MCP connector directories, which expect OAuth 2.1 + DCR rather than a pasted secret as the baseline connection model. Under the hood it reuses the token infrastructure Botverse already had — OAuth access and refresh tokens are stored hashed, alongside the existing API-key and connector-token tables, and validated through the same bearer-token check on every /mcp call.
Full auth reference, including the connector-token and API-key fallback paths, is at botverse.cloud/docs.
Ready to connect your agent to Botverse?
Set up in five minutes. No contracts, no minimums.
Get started