The endpoint
A remote MCP server over Streamable HTTP. It speaks JSON-RPC 2.0 and works with any MCP client that supports OAuth. The tools run in the Kaption extension or desktop app on the user's own computer, so the user must have Kaption open.
Kaption exposes WhatsApp to AI apps and agents through one MCP server. This page lists every endpoint, document and repository you need.
MCP server address
https://mcp.kaptionai.com/mcpA remote MCP server over Streamable HTTP. It speaks JSON-RPC 2.0 and works with any MCP client that supports OAuth. The tools run in the Kaption extension or desktop app on the user's own computer, so the user must have Kaption open.
OAuth 2.1 with PKCE (S256) and dynamic client registration. There is one scope, kaption:access. Users sign in with their phone number and a code sent to them on WhatsApp, then choose how long the connection lasts. Access tokens expire after one hour. Calls without a token get HTTP 401 with a WWW-Authenticate header that points to the protected resource metadata.
Streamable HTTP. An SSE endpoint is also available at /sse for older clients.
mcp.kaptionai.com/mcpProtected resource metadata (RFC 9728), which links to the authorization server.
mcp.kaptionai.com/.well-known/oauth-protected-resource/mcpOpenAPI 3.1 description of the HTTP endpoint, its OAuth scheme and error responses.
kaptionai.com/openapi.jsonName, remotes, package and auth details in the MCP Registry server.json format.
kaptionai.com/.well-known/mcp.jsonRFC 9727 linkset that lists the services on this domain.
kaptionai.com/.well-known/api-catalogA plain-text guide to the site for AI agents: what Kaption does and when to use it.
kaptionai.com/llms.txtThe npm package for clients that run local servers. Needs Node.js 18 or newer.
www.npmjs.com/package/@kaptionai/mcp-extensionThe cloud relay's source code is public. Every deploy is signed and recorded in a public log.
github.com/Kaption-AI/mcp-extension-remoteThe cloud server exposes these tools. From Kaption 0.94, send_message works unless the user has turned off “Let assistants send messages from this computer” in Kaption for that WhatsApp account; an assistant cannot change that setting, and it should still confirm the text and the recipient with the user. It queues a message, with at most one attachment of 8 MiB, to an existing person chat or eligible group for the earliest permitted delivery, and “queued” is not proof of delivery. With the setting off, the AI can leave a draft or schedule one message to one person. Chats the user locked in WhatsApp are never visible.
querylist_contactsget_contactget_contact_groupslist_groupsget_groupexport_contactsdownload_mediaget_analyticssummarize_conversationmanage_chatmanage_remindersmanage_listsmanage_labelsmanage_notesmanage_scheduled_messagessend_messagecall_recordingsReport vulnerabilities privately to security@kaptionai.com. Please do not open a public issue.
Every error the server shapes itself is an RFC 9457 problem document, served as application/problem+json, with type, title, status, detail and a machine-readable code. Branch on code; detail is for people. Errors are never HTML.
Inside the MCP transport (/mcp and /sse), protocol errors are JSON-RPC error objects, as the MCP specification requires, and a failed tool call is a result with isError: true.
| Status | Codes |
|---|---|
| 400 | bad_requestinvalid_jsoninvalid_inputinvalid_content_typeinvalid_phonemissing_credentialsmissing_parametersinvalid_account_idinvalid_connection_idinvalid_authorization_requestinvalid_oauth_stateinvalid_sessionotp_invalidotp_expiredotp_attempts_exceededverification_expiredconnect_code_malformedconnect_code_expired |
| 401 | unauthorizedauthentication_requiredinvalid_tokenmissing_bearer_tokeninvalid_credentials |
| 403 | forbidden |
| 404 | not_foundnot_configuredreviewer_not_configured |
| 405 | method_not_allowed |
| 406 | not_acceptable |
| 409 | conflict |
| 410 | gone |
| 413 | payload_too_large |
| 415 | unsupported_media_type |
| 422 | unprocessable_content |
| 426 | upgrade_required |
| 429 | rate_limited |
| 500 | internal_errorotp_send_failedauthorization_failed |
| 501 | not_implemented |
| 502 | bad_gatewayupstream_errorhandshake_unavailable |
| 503 | service_unavailable |
| 504 | gateway_timeout |
Throttled requests get 429 with a Retry-After header (seconds) and code rate_limited. Counted responses carry RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset (seconds) for the policy closest to running out, and RateLimit-Policy lists every policy that applies.
| Policy | Limit | Window | Counted on |
|---|---|---|---|
| otp-send-account | 50 | 60 min (fixed) | /authorize/send-otp, /ext-auth/send-otp |
| otp-send-ip | 100 | 60 min (fixed) | /authorize/send-otp, /ext-auth/send-otp, /authorize/resend-otp |
| otp-resend-account | 3 | 10 min (fixed) | /authorize/resend-otp |
| connect-code-redeem-ip | 20 | 10 min (restarts on each attempt) | /connect/remember, /authorize/connect-code |
| connect-code-start-account | 10 | 60 min (restarts on each attempt) | /ext/connect-code/start |
| reviewer-login-ip | 10 | 15 min (restarts on each attempt) | /authorize/reviewer-login |
Tool calls have an allowance set by the Kaption plan (https://kaptionai.com/pricing/). Over it, the call is answered with an MCP tool error that links to pricing; the connection stays open, and it is not an HTTP 429. Listing tools, connecting and failed calls do not count. Bulk or unsolicited messaging is still against the terms, and access can be suspended to protect the service.
Kaption's public interface is the MCP server. The OpenAPI file describes that HTTP endpoint so tools that read OpenAPI can find it; the operations themselves are MCP tools called over JSON-RPC.
No. Every call, including initialize and tools/list, needs a token. The tool names are listed on this page and in the server card.
Claude, ChatGPT, Cursor and other clients that support remote MCP servers with OAuth. Clients that run local servers can use the npm package instead.