Skip to main content
POST
Register a public client with exact callback URLs and a bounded set of product permissions.

Authentication

None. Registration does not sign in a user or authorize an account connection.

Request body

array
required
Between 1 and 10 callbacks before duplicates are removed.Minimum items: 1. Maximum items: 10.
string
Optional client label; trimmed before saving and must remain nonempty.Minimum length: 1. Maximum length: 120. Pattern: ^(?=.*\S)[^\u0000-\u001F\u007F]+$. Default: “MCP client”.
field
Public clients only.Required value: “none”. Default: “none”.
union
Must include authorization_code; refresh_token is optional. Omitted or null selects both. Duplicate values are removed.Default: [“authorization_code”,“refresh_token”].
array
List of values. See the complete input schema for its item structure.Minimum items: 1. Maximum items: 1. Default: [“code”].
string
Space-delimited permissions from scopes_supported, optionally including offline_access. Unsupported names and whitespace-only values are rejected; duplicates are removed. Omitting scope or supplying no product scopes, such as openid alone or offline_access alone, registers all supported product scopes. email requires openid; email alone is rejected. When OpenID Connect is available, registration includes openid and email as client capabilities even when scope is omitted. Registration grants no access; identity permissions require an explicit authorization request and user consent.Minimum length: 1. Maximum length: 2048. Pattern: ^ *(?:account:read|usage:read|settings:read|settings:write|team:read|team:write|projects:read|projects:write|projects:delete|translations:write|transcription:read|transcription:write|subtitles:read|subtitles:write|tts:read|tts:write|voices:read|voices:write|images:read|images:write|thumbnails:read|thumbnails:write|folders:read|folders:write|glossary:read|glossary:write|webhooks:read|webhooks:write|publishing:read|publishing:write|offline_access|openid|email)(?: +(?:account:read|usage:read|settings:read|settings:write|team:read|team:write|projects:read|projects:write|projects:delete|translations:write|transcription:read|transcription:write|subtitles:read|subtitles:write|tts:read|tts:write|voices:read|voices:write|images:read|images:write|thumbnails:read|thumbnails:write|folders:read|folders:write|glossary:read|glossary:write|webhooks:read|webhooks:write|publishing:read|publishing:write|offline_access|openid|email))* *$.

Request examples

Follow the documented encoding and authentication for this route. The action API’s envelope and idempotency rules apply only to action invocations.

Response

Registered public-client metadata. Save client_id and use it with the exact registered redirect_uri. No client_secret is issued.
HTTP 201

Response headers

Operation notes

  • Recognized scalar parameters must be supplied once as nonempty strings without ASCII control characters or DEL. Repeated query/form fields decode to arrays and are rejected when read as scalars.
  • Use Content-Type application/json. A URL-encoded registration body is rejected with the OAuth invalid_request response; unsupported media types may be rejected earlier by the integration parser.
  • Redirect URIs are retained and compared exactly. Changes to case, port spelling, path, query, or trailing slash require registering that exact URI.
  • HTTP callbacks accept only the raw loopback names localhost, 127.0.0.1, and [::1]. Private-network hosts, alternate IP spellings, *.localhost, and uppercase LOCALHOST do not qualify.
  • The only accepted custom URI scheme callback is exactly cursor://anysphere.cursor-mcp/oauth/callback.
  • Every callback must pass validation; one invalid callback rejects the entire registration. URL credentials, whitespace, controls, fragments, and backslashes are rejected.
  • The client may register any supported product scopes, but the user must separately approve the requested subset during authorization. Registration alone grants no access.
  • Only authorization_code and optional refresh_token grants are supported. A client registered without refresh_token receives no refresh token.
  • Unknown top-level metadata fields are ignored by the current implementation. Known fields keep the constraints shown in the schema.
  • The public registration limit is 10 requests per 10 minutes per client IP, shared across workers. JSON bodies are limited to 1 MiB.
  • Successful registration returns HTTP 201.
  • openid and email are identity permissions, separate from product permissions, and are accepted only when advertised. email requires openid. During initial authorization, a request containing only identity scopes uses the default product permissions shown on the consent screen.

Errors