OAuth
Sign an MCP client into one workspace with OAuth, understand the four scopes it can ask for, and know how long each token lives.
OAuth signs an agent into one workspace as you: no key to paste, no credential on disk, and never more access than you already have. The client needs nothing but the server URL. Standards fetches the client's public metadata document, opens login and workspace consent, and hands the client an access token bound to https://api.standards.new/v1/mcp.
This page covers the inbound direction only: a client signing in to Standards. Standards signing in to a third-party server is on Outbound servers.
Scopes
| Scope | Unlocks, subject to your workspace permissions |
|---|---|
mcp:read | The read tools: schema, records, search, drives, documents. |
mcp:write | The write tools: create, update, bulk create and update, folders and files. |
mcp:delete | The delete tools: delete_record, archive_document. |
mcp:people:read | list_workspace_users, the workspace directory. |
No scope implies another. mcp:write without mcp:read gets the write tools and nothing to search with. A scope you hold but your workspace roles do not back yields nothing: the tool list is the intersection of both, see Tools.
What the authorization server supports
| Capability | Value |
|---|---|
| Grant types | authorization_code, refresh_token, device authorization (urn:ietf:params:oauth:grant-type:device_code). |
response_types | code only. |
PKCE | Required on every authorization request. |
| Resource indicators | Mandatory. Every request names resource; the access token is issued with that audience and is refused anywhere else. |
| Refresh tokens | Rotated on every use. The refresh must name the same resource as the grant. |
| Revocation | Supported. A revoked grant denies the next refresh and the next request. |
| Userinfo | Not served. |
| Dynamic client registration | disabled. Clients identify themselves with a Client ID Metadata Document instead. |
Access tokens are opaque. Decoding one tells you nothing; only the server can validate it.
Token lifetimes
| Token | Lifetime |
|---|---|
| Access token | 300 seconds. |
| Refresh token | 30 days, rotating: each refresh issues a new one. |
| Grant | 90 days from consent, then the client signs in again. |
| Authorization code | 60 seconds. |
| Device code | 600 seconds. |
A client stays connected for 30 days of inactivity or 90 days in total, whichever comes first.
Client admission rules
Dynamic client registration is disabled: a client identifies itself with a Client ID Metadata Document served at an https:// URL, and that URL is its client_id. The document is a public client of at most 5120 bytes, token_endpoint_auth_method "none", no secret, response_types ["code"], grant_types within authorization_code and refresh_token, and https:// redirects (loopback http:// for a native app); a document that breaks a rule is refused before login starts.
Device authorization
A client with no browser of its own can use the device flow. It displays a code, you open the page Standards serves, enter the code, confirm the client, then sign in and review access as usual. The device code lives 600 seconds and the client polls for the result; a client that polls too fast is told to slow down by five seconds.
What you see at consent
The consent screen shows the client's name and the workspace you are signing into. The name comes from the client's metadata, cleaned before display: control characters removed, whitespace collapsed, at most 80 characters. A client with no usable name is shown by its hostname.
You can decline any of the requested scopes. You cannot add one the client did not ask for, and at least one mcp:* scope must remain or the request fails. The grant records exactly what you approved; a later token carrying a scope outside the grant is refused as invalid_token.
Errors
Every 5xx from the authorization server is rewritten to 503. A request that omits resource fails with invalid_target. A resource the server does not know fails the same way. Once you hold a token, the MCP endpoint's own answers are listed on the MCP page: 401 invalid_token, 403 insufficient_scope, 403 on a workspace mismatch.
Next steps
- MCP — connect Claude Code or Codex and read the endpoint's error table.
- Tools — what each scope unlocks, tool by tool.
- Workspaces and API keys — the key path, for clients without OAuth.
- Agent workflow — an OAuth sign-in followed by a full session.