MCP OAuth and protocol reference for client developers
For developers building an MCP client or agent: how SignWith authorizes connections, and how the server behaves at the protocol level.
SignWith follows the MCP authorization specification. Clients that support it can connect with just the server URL, https://app.signwith.co/mcp.
Discovery
An unauthenticated request returns 401 with a WWW-Authenticate header that points to the protected resource metadata:
WWW-Authenticate: Bearer resource_metadata="https://app.signwith.co/.well-known/oauth-protected-resource/mcp", scope="read write"
The authorization server metadata is at https://app.signwith.co/.well-known/oauth-authorization-server.
Authorization
| Flow | Authorization code with PKCE (S256 only) |
| Client registration | Dynamic Client Registration at /oauth/register, or Client ID Metadata Documents |
| Resource indicators | Tokens are bound to https://app.signwith.co/mcp |
| Scopes | read and write |
| Access tokens | 1 hour |
| Refresh tokens | 60 days, rotated on use |
| Revocation | /oauth/revoke |
| Responses | Include the iss parameter |
On the consent screen, people choose Full access (read and write) or View only (read). They can see and disconnect connected apps in Settings → Connected apps.
OAuth tokens only work on /mcp. To call the REST API, use an API key.
Errors and limits
- If an authorization request from a client that registered itself (Dynamic Client Registration or a Client ID Metadata Document) is invalid, SignWith usually shows the error on its own page instead of redirecting back to the client. Claude and ChatGPT still get the standard OAuth error redirect. Check the request against the authorization server metadata.
- The unauthenticated OAuth endpoints are rate limited per IP address:
/oauth/authorizeand/oauth/tokenat 60 requests a minute each, and/oauth/registerat 30 an hour. Over the limit,/oauth/tokenreturns429with the errorslow_down.
API keys instead of OAuth
A client can skip OAuth and send an API key in the Authorization header:
Authorization: Bearer sw_live_...
A read-only key behaves like a View only connection.
Protocol behaviour
- Transport is Streamable HTTP, and the server is stateless. It only answers POST requests; GET and DELETE return
405. - Supported protocol versions:
2025-06-18,2025-03-26and2024-11-05. - Methods:
initialize,ping,tools/listandtools/call. - JSON-RPC messages without an
idare notifications: they aren't executed and get no response. A request made only of notifications returns HTTP202. An empty batch returns error-32600. - A failed tool call returns a normal result with
isError: true, and the API's errorcodeandmessagein the content. - Each tool call runs the matching REST API request, so rate limits (300 requests a minute per connection), credits and validation are the same.
The tools and their arguments are on the MCP tools page.
Start building
The API and MCP server come with every account. 3 free documents a month, then pay per document.