Skip to main content
POST
Initialize an MCP client, discover permitted tools, or call VoiceCheap customer actions through MCP.

Authentication

A paid account’s OAuth access token in Authorization: Bearer mcpaccess…, or an API key in x-api-key or Authorization: Bearer vc_…. Credentials are headers, never URL query parameters.

Request body

Request examples

Follow the documented encoding and authentication for this route. The action API’s envelope and idempotency rules apply only to action invocations.

Response

Representative tools/list response excerpt. The actual result contains up to 50 permitted tools and nextCursor when more remain. Normal requests receive JSON-RPC JSON responses; accepted notifications receive HTTP 202 with an empty body.
HTTP 200

Response headers

Operation notes

  • POST is the only supported MCP HTTP method. Authenticated GET, DELETE, and other non-POST requests return METHOD_NOT_ALLOWED with HTTP 405 and Allow: POST after account rate and origin checks. Request parsing or CORS handling can respond earlier. There is no GET SSE channel or session-delete route.
  • Send Content-Type: application/json and Accept: application/json, text/event-stream. The installed MCP transport requires both Accept values even though this server enables JSON responses.
  • Use the normal MCP lifecycle: initialize, send notifications/initialized, then tools/list or tools/call. Include the negotiated MCP-Protocol-Version header on subsequent requests.
  • The server is stateless and returns no Mcp-Session-Id. Each HTTP request reauthenticates current permissions, user/team ownership, and paid account access.
  • tools/list uses an opaque string cursor from nextCursor and returns 50 tools per page. Continue until nextCursor is absent. Invalid cursors produce a JSON-RPC method error.
  • Each tool declares its required OAuth scopes in securitySchemes and _meta.securitySchemes. action_request_get additionally checks the original action’s permissions.
  • Tool annotations describe read-only and destructive behavior. openWorldHint indicates interaction with external services or media sources; it does not grant extra permissions.
  • webhooks_create_secret is REST-only. It is excluded from MCP discovery; calling it or polling it through MCP returns the tool error ACTION_NOT_AVAILABLE_IN_MCP. Signing secrets are not sent to assistants.
  • tools/call accepts {name, arguments}; tool names and argument schemas are shared with /v1/actions. Mutations use a UUID v4 requestId inside arguments and reuse identical arguments for retries.
  • Normal successful tool calls return content containing the serialized {data, requestId?} result plus the same structuredContent. Image download actions return native MCP image content and a text generationId instead.
  • Action failures are tool results with isError: true, text error details, and structuredContent.error; they are not necessarily HTTP failures. Inspect both transport and tool-level errors.
  • A long-running tool result includes its action request ID and pollAction: action_request_get. Poll with the original operation name; do not recreate a generation to check progress.
  • Initialization, notifications, discovery, and tool calls all count toward the shared account rate limit. Only successful data actions consume monthly integration calls, with documented status/control exceptions.
  • Send one JSON-RPC message per HTTP request. JSON bodies are limited to 1 MiB; media bytes use the upload actions.
  • The Host header must match the canonical MCP host. If an Origin header is present, it must be the MCP origin, application origin, https://chatgpt.com, https://chat.openai.com, or https://claude.ai. Native clients may omit Origin.
  • HTTP 401 errors include WWW-Authenticate: Bearer resource_metadata=“https://api.voicecheap.ai/.well-known/oauth-protected-resource/mcp” in production.
  • Authentication failures use the integration error object. MCP protocol checks can return {code, message}; other protocol failures use JSON-RPC error objects with numeric error codes. Do not assume one error envelope for every transport failure.
  • The route’s public HTTP guard permits 3000 requests per minute per client IP before account authentication. Each account retains its lower plan-specific shared API/MCP rate limit.
  • Authorization-related tool errors include a Bearer challenge under _meta with the mcp/www_authenticate key. Reconnect your account with the required permissions before retrying.

Errors