OAuth Setup
PageWeave acts as an OAuth 2.1 Authorization Server for MCP clients.
Discovery Endpoints
| Endpoint | RFC | Purpose |
|---|---|---|
GET /.well-known/oauth-authorization-server |
RFC 8414 | Authorization server metadata |
GET /.well-known/oauth-protected-resource |
RFC 9728 | Protected resource metadata |
GET /.well-known/openid-configuration |
OIDC Discovery | OIDC-compatible discovery |
POST /oauth/register |
RFC 7591 | Dynamic client registration |
OAuth Flow
- Client fetches
/.well-known/oauth-protected-resource - Client fetches
/.well-known/oauth-authorization-server - Client registers via
POST /oauth/register - Client redirects user to
/oauth/authorizewith PKCEcode_challenge - User signs in and grants access
- Client exchanges code for token at
POST /oauth/token - Client calls
POST /mcpwithAuthorization: Bearer <token>
Scopes
34 resource-based scopes control MCP tool access:
| Resource | Scopes |
|---|---|
website |
:read, :create, :edit, :delete |
page |
:read, :create, :edit, :delete |
header |
:read, :edit |
footer |
:read, :edit |
html_head |
:read, :edit |
theme |
:read, :edit |
asset |
:read, :create, :delete |
form |
:read, :create, :edit, :delete |
table |
:read, :create, :edit, :delete |
row |
:read, :create, :edit, :delete |
submission |
:read, :delete |
webhook |
:read, :create, :edit, :delete |
domain |
:read, :create, :delete |
dns |
:read, :write |
access |
:read, :delete |
invitation |
:read, :create, :delete |
analytics |
:read |
version |
:read, :pin, :unpin, :revert |
preview |
:read, :start, :stop |
Default scopes for new clients: all *:read scopes. Write scopes must be explicitly requested.
Token Lifetime
OAuth tokens expire after 1 hour. Clients should refresh tokens before expiration.
Client Setup
All modern MCP clients support automatic OAuth 2.1 discovery and authentication. Add the MCP endpoint URL and the client handles the rest.
Minimal Configs
| Client | Config File | Minimal Config | Docs |
|---|---|---|---|
| OpenCode | opencode.json |
{"type": "remote", "url": "https://pageweave.dev/mcp", "enabled": true, "oauth": {}} |
OpenCode MCP Docs ↗ |
| Claude Code | .mcp.json |
{"type": "http", "url": "https://pageweave.dev/mcp"} |
Claude Code MCP Docs ↗ |
| Claude Desktop | claude_desktop_config.json |
{"command": "npx", "args": ["-y", "mcp-remote", "https://pageweave.dev/mcp"]} |
Claude Desktop Auth Docs ↗ |
| Cursor | .cursor/mcp.json |
{"url": "https://pageweave.dev/mcp"} |
Cursor MCP Docs ↗ |
| Windsurf | mcp_config.json |
{"serverUrl": "https://pageweave.dev/mcp"} |
Windsurf MCP Docs ↗ |
| Continue | config.yaml |
type: streamable-httpurl: https://pageweave.dev/mcp |
Continue MCP Docs ↗ |
What Happens Automatically
- Discovery — Client detects the
401challenge and fetches/.well-known/oauth-protected-resource - Registration — Client registers dynamically via
POST /oauth/register(RFC 7591) - Authorization — Client opens your browser to
/oauth/authorizewith PKCE - Token exchange — Client exchanges the authorization code for tokens
- Storage & refresh — Tokens are stored securely and refreshed automatically
No manual token management required.
API Key Fallback
For programmatic access or legacy clients, authenticate with API keys (pagew_...) via Authorization: Bearer <key>. API keys bypass all scope checks and provide full access. Best for CI/CD and server-to-server use.