NEX CAPTCHA / MCP

Connect your AI assistant to CAPTCHA services

Connect your AI tools to hosted MCP with your existing API Key. Discover products, create CAPTCHA tasks and retrieve results without running a local server.

Choose an integration workflow

HTTP_SUBMIT

HTTP submission

The target operation and challenge submission can be completed over HTTP with the same required session context. A solver HTTP API alone does not establish this.

Obtain the target challenge and parameters; create and poll the matching solver task; submit the result with the target request; inspect target validation and business outcome.

BROWSER_RESULT

Apply a result in the browser

Your browser tool can read the required current integration parameters and apply this product result through the target integration. Browser capability is separate from solver capability.

Read current native product parameters; solve; fill the expected token field/callback, or apply matching challenge identifier and proof/answer fields together as required; submit normally; inspect target validation and business outcome. Replacing an image alone is not integration.

BROWSER_INTERACTION

Browser image interaction

The current challenge matches the selected image product. Your browser tool can capture the correct image and execute the required clicks, rotation or drag actions.

Capture the current challenge and original instructions; solve; map the answer to the current image; interact; inspect for replacement images or another round; verify the target outcome.

Solver success → target acceptance → business completion

Failure handling
Failure codeNext action
INVALID_INPUTREAD_PRODUCT_SCHEMA

Collect missing/correct inputs; do not retry unchanged invalid input or switch to GRID.

TRANSPORT_OR_WAFINSPECT_REQUEST_CHAIN

Inspect the HTTP/network/WAF response. A 403 is not a solver result; if delivery is uncertain, retry identical creation with the same requestId.

TASK_EXPIREDRECAPTURE_CHALLENGE

Check the current challenge and expiry. Only create a new paid task if still needed.

PROVIDER_INPUT_INVALIDREAD_PRODUCT_SCHEMA

The provider rejected input. Check the product, current parameters and instructions.

PROVIDER_UNSOLVABLEINSPECT_CHALLENGE

Inspect image quality/instructions and whether the challenge is current before deciding on another paid attempt.

PROVIDER_UNAVAILABLERETRY_LATER

Service availability issue; do not change the CAPTCHA product solely for this reason.

TASK_FAILEDINSPECT_CHALLENGE

No specific public cause is known. Report the task ID and inspect context; do not claim target rejection or infer an unsupported product.

TARGET_REJECTEDCHECK_BINDING_AND_EXPIRY

Observed by the caller, not inferred from solver state. Check target response, challenge binding and expiry.

BROWSER_APPLICATION_UNSUPPORTEDCHANGE_EXECUTION_ENVIRONMENT

The browser cannot apply the result. Report that capability limit instead of calling the solver product unavailable.

01 / CONNECT

Connect to MCP

Hosted service

Choose a client, copy its configuration and use your API Key. Keep your configuration private.

Server URLhttps://app.nexcaptcha.net/mcp

Find your API Key in account settings, or sign in to fill it automatically.

If configuration exists, merge the nex-captcha entry and preserve other servers and settings. ~ is your home directory; on Windows use %USERPROFILE%.

  1. Run this command in a terminal with Claude Code installed to add the server to your user configuration.

    claude mcp add --transport http --scope user nex-captcha 'https://app.nexcaptcha.net/mcp' --header 'Authorization: Bearer YOUR_API_KEY'
  2. Check the connection

    Run claude mcp list, then use /mcp inside Claude Code to check nex-captcha and its five tools.

    Show my Nex Captcha balance and supported products. Do not create a task.

Test your connection

Reads your balance only. No task is created and no charge applies.

02 / TOOLS

Available tools

5 TOOLS
list_productsFree

Lists all enabled products, USD prices per solve and timeouts in one response.

get_product_schemaFree

Pass productCode to retrieve its parameter schema and example before creating a task.

create_task

Creates a task using productCode, adapter and a unique requestId. Reuse the same requestId and parameters when retrying.

get_taskFree

Fallback result query by the platform id returned by create_task; prefer task.updated over polling when WebSocket is available.

get_balanceFree

Reads your current USD balance. 1 USD = 1 balance.

Only task creation charges the product price per solve. All other tools are free. Failed or expired tasks are refunded; billing and refunds appear in your asset records.

03 / REALTIME

WebSocket result delivery

Prefer WebSocket whenever your client or MCP host supports it: connect first, wait for socket.ready, then create tasks. Consume task.updated immediately; use REST query.cgi or MCP get_task only when WebSocket is unavailable, disconnected, or an update is missing.

The task WebSocket is independent of the MCP HTTP transport. A host or companion process that can set WebSocket handshake headers should connect with the same API key in the apiKey header. MCP support alone does not establish WebSocket capability: if your host cannot open a socket, use get_task with the returned id and follow nextPollAfterSeconds. Tool results expose resultDelivery with the recommended endpoint and heartbeat settings.

wss://app.nexcaptcha.net/socket/task.cgi
apiKey: YOUR_API_KEY
socket.ready → create_task → task.updated
task.taskId = create_task id
{"type":"heartbeat"} → {"type":"heartbeat.ack"}

WebSocket API keys belong in handshake HTTP headers, never URL parameters. Standalone clients use the apiKey header; browsers use the login cookie or REST queries with the apiKey header because native WebSocket cannot set custom headers. Updates belong to the authenticated user.

Use WSS on HTTPS. Reconnect with backoff after disconnect; the latest 20 terminal tasks are replayed, not a durable event history. Recover missing taskIds through query.cgi or get_task. Missing, invalid, revoked or expired credentials close with 4003; idle or unreliable connections close with 4500.

All committed state changes are pushed to this authenticated account, including tasks created through API and MCP. SUCCEEDED carries result; failures carry failure.code and nextAction. Send a heartbeat every 20 seconds and expect heartbeat.ack. After 35 seconds without heartbeat, a check running every 10 seconds closes the connection. Reconnect with backoff; never recreate a task merely because its socket disconnected. Process taskId idempotently and do not replace a terminal result with an older or replayed frame.

The container maps each user ID to one current connection per instance. A new connection replaces the previous one with close code 4009. Clients sharing an account should share one subscription through their host. A replaced client should stop reconnecting automatically. Instance capacity is at most 256 connections; 1013 means retry with backoff. Slow clients exceeding 64 queued messages or 256 KiB of queued UTF-8 data are disconnected with 4500 and should recover missing taskIds by query. A single frame is limited to 256 KiB.

API documentation · Python · Java 21

04 / WORKFLOW

From creation to result

  1. Choose a product and read its schemalist_products → get_product_schema
  2. Create your task oncesocket.ready → create_task(productCode, adapter, requestId)
  3. Prefer pushed results; query only as fallbacktask.updated → get_task({"id": "TASK_ID"})

Reuse the same requestId and identical arguments when retrying creation. Prefer WebSocket results; if unavailable or disconnected, recover with get_task using id without creating another paid task. Observe nextPollAfterSeconds when polling.

Supports Streamable HTTP with protocol versions 2025-03-26, 2025-06-18 and 2025-11-25. Authenticate using Authorization: Bearer API_KEY.