MCP — Authentication
The MCP server accepts two kinds of credentials:
- OAuth 2.0 with Pathbound’s native login — for interactive clients (Claude.ai) where a human can complete a browser flow. The MCP server delegates the actual login to Pathbound’s web app and brokers the resulting JWT into MCP-shaped OAuth tokens.
- REST API keys — for headless clients (hosted MCP tool runners, server-side agents, pipelines) that can only send a static
Authorizationheader.
OAuth flow
Section titled “OAuth flow”┌──────────────┐ ┌──────────────────┐ ┌────────────────┐│ MCP client │ │ mcp.pathbound │ │ api.pathbound ││ (Claude.ai) │ │ .ai │ │ .ai │└──────┬───────┘ └────────┬─────────┘ └────────┬───────┘ │ │ │ │ 1. GET /authorize │ │ │ ────────────────────────────────▶ │ │ │ │ 2. 302 to │ │ │ /mcp/authorize │ │ │ ────────────────────────────────▶ │ │ │ │ │ │ User logs in (or already │ │ │ has a Pathbound session) │ │ │ │ │ │ 3. 302 back with one-time code │ │ ◀──────────────────────────────── │ ◀──────────────────────────────── │ │ │ │ │ 4. POST /token { code } │ │ │ ────────────────────────────────▶ │ 5. POST /mcp/token { code } │ │ │ ────────────────────────────────▶ │ │ │ 6. JWT (90d default) │ │ │ ◀──────────────────────────────── │ │ 7. MCP access_token + refresh │ │ │ ◀──────────────────────────────── │ │ │ │ │ │ 8. tool calls (Bearer) │ │ │ ────────────────────────────────▶ │ 9. Backend V1 calls (JWT) │ │ │ ────────────────────────────────▶ │ │ │ ◀──────────────────────────────── │ │ ◀──────────────────────────────── │ │- The MCP client (Claude.ai) hits the MCP server’s
/authorizeendpoint. - The MCP server has no local login form — it 302s to
https://api.pathbound.ai/mcp/authorize. - If the user has an active Pathbound session, the backend issues a one-time code immediately and redirects back to the MCP server. If not, the user is sent through the normal Pathbound login (with 2FA if configured), then redirected. 4–7. The MCP server exchanges the code for a JWT via
POST /mcp/tokenon the backend, then maps that JWT onto its own MCP-shaped OAuth access and refresh tokens which it returns to the client. 8–9. Subsequent MCP tool calls use the MCP access token; the MCP server forwards them to the backend as the underlying JWT.
Consent screen
Section titled “Consent screen”Before the backend issues the one-time code in step 3, the user sees a consent screen showing:
- The address access is sent to: the origin of the redirect URI this request will deliver the code to. This is the line to check.
- The name the application registered (for example, “Claude”), shown as a claim. Pathbound doesn’t verify application names.
- What the connection will hold, one row per permission. “Always included” rows are the read and CRM-edit access every connection gets. “Also requested” rows are the opt-in writes the application asked for: sending email and acting in connected tools (
actions:write), spending enrichment credits (enrichment:write), and creating streaming automations (streams:write). - Which tools are on now. Rows whose tools a workspace admin toggles say which are on in your workspace. An opt-in that is off is still granted: if an admin turns the tool on later, the connection can use it without asking again. Stream changes are marked admins only for members, because the API refuses them whatever the token holds.
- Which account and workspace. The connection reaches the workspace of the account you are signed in with, shown at the bottom of the screen. Use another account signs you out and brings you back to the same request once you sign in with another one. The request is valid for five minutes; after that, start the connection again from the application.
The list is built by the Pathbound API from the same definition that issues and enforces the token, so it shows exactly what the connection will hold. Only authorize applications you trust: the JWT issued at the end of this flow grants those permissions against your tenant for the full token lifetime below.
If you see a “could not be verified” error on the consent screen, the application’s authorization request failed integrity validation between the MCP server and the backend — close the tab and reconnect from inside the application rather than retrying the same link.
Token lifetime
Section titled “Token lifetime”| Token | Default lifetime |
|---|---|
| Backend JWT | 90 days (MCP_TOKEN_EXPIRY_DAYS) |
| MCP access token | 30 days (MCP_ACCESS_TOKEN_TTL_DAYS) |
| MCP refresh token | 180 days (MCP_REFRESH_TOKEN_TTL_DAYS) |
These are the operator defaults; your Pathbound deployment may set different values. When an access token expires, the client uses its refresh token to get a new one without going through the full browser flow again.
Scopes
Section titled “Scopes”Every connection made through the MCP flow can read and write the workspace’s own records:
contacts:read, contacts:writecompanies:read, companies:writedeals:read, deals:writeevents:readstreams:readknowledge:read, knowledge:writeThree more scopes are granted only when the client asks for them and you approve them on the consent screen, which lists exactly what the connection will hold:
actions:write sending email and acting in connected toolsenrichment:write enrichment and prospecting, which spend provider creditsstreams:write creating and changing automations (workspace admins only)A scope does not switch a tool on by itself. The knowledge, streaming and action tools also need their switch turned on under MCP Tools in the dashboard, and an agent can never delete a contact or a company whatever it was granted.
If you need a tighter scope set — for example, a read-only integration — connect with a scoped API key instead.
API keys for headless clients
Section titled “API keys for headless clients”Server-side MCP clients — OpenAI and Anthropic hosted tool runners, schedulers, CI jobs — can’t open a browser or refresh OAuth tokens. They authenticate by sending a tenant REST API key as a static bearer token on every request:
Authorization: Bearer sk_your_api_keyNo OAuth handshake, no token expiry to manage — the key works until you revoke it.
- Create a key at app.pathbound.ai/settings/api-keys (tenant admins only), selecting only the scopes the agent needs —
contacts:readandevents:readmake a good read-only analyst. - Configure your MCP client with the server URL
https://mcp.pathbound.ai/mcpand the key as its authorization/bearer token.
Example with the Anthropic API’s MCP connector:
{ "mcp_servers": [ { "type": "url", "url": "https://mcp.pathbound.ai/mcp", "name": "pathbound", "authorization_token": "sk_your_api_key" } ]}Scopes and key behavior
Section titled “Scopes and key behavior”- The key’s scopes are enforced on every tool call, exactly as on the REST API. A
contacts:readkey can calllist_contactsbut gets a descriptive permission error fromupdate_contactnaming the missing scope. - Write-action tools (Gmail/Resend sends and Apollo sequence drafting, enrollment, and single-email actions) additionally require the opt-in
actions:writescope and the corresponding tool toggle in your integration settings. Keys withoutactions:writenever see those tools listed. - A key without
actions:writealso sees none of the other optional tool groups (enrichment, streaming, knowledge), even with their own scopes, because the MCP server reads the workspace’s tool switches through an endpoint that needs that scope. Give a headless MCP clientactions:writeif it should use any of them. - Actions performed with a key are attributed as
api_key:<key_id>in the action log. - If your tenant has MCP PII redaction enabled, it applies to API-key MCP sessions the same as OAuth ones. Direct REST API calls with the same key remain unredacted.
Revoking a key
Section titled “Revoking a key”Deactivate or delete the key at app.pathbound.ai/settings/api-keys. Tool calls fail immediately; the MCP transport stops accepting the key within a minute.
Revoking OAuth access
Section titled “Revoking OAuth access”Users can revoke MCP access from MCP Tools → Disconnect all in the Pathbound dashboard. It takes effect at once: every MCP token issued to that user stops working, and each AI client asks them to sign in again. API keys are not affected; revoke a key under Settings → API keys.