Before you connect
Puffle MCP is a separate, least-privilege integration from the REST API. It uses a named key beginning withpmcp_live_; do not use a legacy pk_live_ API key at this endpoint.
- In Puffle, open Settings → API → MCP integrations.
- Create a named key and select only the permissions the client needs.
- Copy the key immediately. Puffle shows it once and never stores the raw value.
ChatGPT OAuth linking
ChatGPT can link without a copied key through OAuth 2.1 authorization-code flow with S256 PKCE. Configure the same MCP endpoint,https://app.puffle.ai/mcp; ChatGPT discovers the protected-resource and authorization-server metadata automatically, registers only its documented callback URL, and opens Puffle’s human consent screen.
Puffle binds every OAuth token to that exact MCP resource and checks its expiry and scopes on every request. The authorization page must be completed by the signed-in Puffle user; it cannot launch Outbound or send messages.
Configure an MCP client
Use this endpoint and bearer token in a supported remote-MCP configuration:Use environment variables
Keep the endpoint and key out of the config file by reading them from the environment. Puffle does not require specific variable names—use whatever your client interpolates. Only the URL and theAuthorization: Bearer header are required.
First export the values. Set them in the environment your client inherits (for example your shell profile), then start—or fully restart—the client so it picks them up; a client that was already running will not see newly exported values.
${env:VARIABLE}):
${VARIABLE}:
pmcp_live_... key directly instead.
How the agent should work
The gateway exposes three generic tools:search_operations, describe_operation, and execute_operation.
- Search the current allowed catalog.
- Describe the selected operation.
- Execute with the exact
policyRevisionandoperationRevisionthat description returned.
Troubleshooting
401: the key is invalid, expired, revoked, or not an MCP key.401withWWW-Authenticate: complete or renew the host’s OAuth link; do not substitute a legacy API key.429: respectRetry-Afterbefore retrying.feed_codex_subscription_required: the Puffle account needs its tenant-linked Codex connection configured; do not provide the host model’s credentials.scope_denied: add the smallest required permission in Puffle Settings, then retry with the same named key.
id when retrying the same tool call. Puffle stores a durable delegation claim keyed to that id and principal, returns a completed result for an identical replay, and rejects a conflicting request rather than running a second mutation.