Skip to main content

2Captcha MCP

PyPI version Python 3.11+ CI codecov mypy: strict License: MIT

MCP server exposing the full 2Captcha API surface — 31 captcha types, 5 management tools, 3 pingback CRUD tools, 3 webhook event-store tools, and 1 composite solve-and-wait tool (43 tools total) — to Claude Code via stdio.

Built on the official 2captcha-python SDK (AsyncTwoCaptcha), so retry/polling/parsing are handled upstream and every captcha type the SDK supports is available the moment the SDK adds it.

Quick start

pip install twocaptcha-mcp
# or for development:
pip install -e ".[dev]"

Create a .env next to the project root:

2Captcha_API_KEY=your_2captcha_key_here

Verify it works:

python -m twocaptcha_mcp           # starts the stdio server (Ctrl+C to stop)

Register the server with Claude Code:

claude mcp add 2captcha -e 2Captcha_API_KEY=your_2captcha_key_here -- python -m twocaptcha_mcp

After a claude restart, prompt the model with:

"Use twocaptcha_balance to check my account."

Configuration

All settings are environment-driven. Aliases in priority order:

Setting Aliases Default Range
API key (required) 2Captcha_API_KEY, TWOCAPTCHA_API_KEY, 2CAPTCHA_API_KEY, API_KEY_2CAPTCHA — —
Server TWOCAPTCHA_SERVER 2captcha.com 2captcha.com, rucaptcha.com
Default timeout TWOCAPTCHA_DEFAULT_TIMEOUT 120 s 1..600
reCAPTCHA timeout TWOCAPTCHA_RECAPTCHA_TIMEOUT 600 s 1..1200
Polling interval TWOCAPTCHA_POLLING_INTERVAL 10 s 1..120
Soft id TWOCAPTCHA_SOFT_ID 4580 —
Log level TWOCAPTCHA_LOG_LEVEL INFO DEBUG/INFO/WARNING/ERROR/CRITICAL
Default pingback URL TWOCAPTCHA_DEFAULT_CALLBACK unset https URL

Tools

Captcha solvers (31)

Tool SDK method Required arguments
twocaptcha_solve_normal normal file_path xor file_base64
twocaptcha_solve_text text text
twocaptcha_solve_audio audio file (xor), audio_lang
twocaptcha_solve_grid grid file (xor)
twocaptcha_solve_canvas canvas file (xor)
twocaptcha_solve_coordinates coordinates file (xor)
twocaptcha_solve_rotate rotate files: list
twocaptcha_solve_vkimage vkimage files, steps
twocaptcha_solve_recaptcha recaptcha sitekey, url, version, enterprise
twocaptcha_solve_hcaptcha hcaptcha sitekey, url
twocaptcha_solve_turnstile turnstile sitekey, url (+ data/pagedata for CF Challenge)
twocaptcha_solve_funcaptcha funcaptcha sitekey, url
twocaptcha_solve_geetest geetest gt, challenge, url
twocaptcha_solve_geetest_v4 geetest_v4 captcha_id, url
twocaptcha_solve_capy capy sitekey, url
twocaptcha_solve_keycaptcha keycaptcha s_s_c_user_id, s_s_c_session_id, two signs, url
twocaptcha_solve_lemin lemin captcha_id, div_id, url
twocaptcha_solve_mtcaptcha mtcaptcha sitekey, url
twocaptcha_solve_friendly_captcha friendly_captcha sitekey, url
twocaptcha_solve_cutcaptcha cutcaptcha misery_key, apikey, url
twocaptcha_solve_amazon_waf amazon_waf sitekey, iv, context, url
twocaptcha_solve_tencent tencent app_id, url
twocaptcha_solve_atb_captcha atb_captcha app_id, api_server, url
twocaptcha_solve_datadome ⚑ datadome proxy, user_agent, captcha_url, pageurl
twocaptcha_solve_captchafox ⚑ captchafox proxy, user_agent, sitekey, pageurl
twocaptcha_solve_vkcaptcha ⚑ vkcaptcha proxy, user_agent, redirect_uri
twocaptcha_solve_prosopo prosopo sitekey, pageurl
twocaptcha_solve_temu temu body, part1..3
twocaptcha_solve_altcha altcha pageurl
twocaptcha_solve_cybersiara cybersiara master_url_id, pageurl, cyber_user_agent
twocaptcha_solve_yandex_smart yandex_smart sitekey, url

⚑ — proxy and user_agent are required by the SDK signature.

All solver tools accept the same set of optional kwargs (mixin SolverKwargs):

  • proxy: {type, uri} (HTTP/HTTPS/SOCKS4/SOCKS5)
  • pingback: HttpUrl — per-call pingback URL (must be pre-registered)
  • soft_id: int
  • cookies: str
  • user_agent: str
  • lang: str
  • header_acao: 0|1

Management (5)

  • twocaptcha_balance — current balance in USD
  • twocaptcha_report_good / twocaptcha_report_bad — report a captcha id within 15 minutes
  • twocaptcha_get_result — poll a captcha id manually (paired with send_raw)
  • twocaptcha_send_raw — escape hatch for SDK methods this server does not yet expose

Pingback CRUD (3)

  • twocaptcha_register_pingback — whitelist a callback URL
  • twocaptcha_list_pingbacks — list whitelisted addresses
  • twocaptcha_delete_pingback — delete one or addr="all"

Development

pytest --cov=twocaptcha_mcp --cov-branch --cov-fail-under=92 -v
ruff check . && ruff format --check .
mypy --strict twocaptcha_mcp

Run live tests against the real 2Captcha API (consumes credits):

pytest -m live --run-live          # balance + solve_normal + concurrent_balance
pytest -m e2e --run-e2e             # full MCP protocol roundtrip via mcp.client.session

Architecture

twocaptcha_mcp/
├── __main__.py            # stdio entrypoint
├── server.py              # build_server + dispatch_tool_call
├── config.py              # pydantic-settings (.env)
├── logger.py              # stderr-only logger (stdout is reserved for stdio MCP)
├── client/
│   ├── solver.py          # SolverClient — async wrapper over AsyncTwoCaptcha
│   ├── pingback.py        # httpx wrapper for legacy res.php
│   ├── rate_limiter.py    # async sliding-window per-method rate limiter
│   └── errors.py          # internal CaptchaError hierarchy
├── schemas/               # Pydantic request/response models per captcha family
├── tools/                 # @captcha_tool handlers per captcha family + composite
└── webhook_receiver/      # Starlette app + SQLite store (twocaptcha-mcp-webhook)

Tool handlers depend only on the SolverClient / PingbackClient abstractions — the SDK is never imported from a handler. Adding a new captcha type is a 3-step process: schema → tool handler → snapshot test count bump.

Webhook receiver (optional, since 0.3.0)

For long-running solves (recaptcha v3 up to 600 s), the polling-mode SDK call holds the MCP request slot for the entire duration. Run the optional twocaptcha-mcp-webhook server to flip into pingback mode — 2Captcha POSTs the result to your URL, the receiver writes it to SQLite, and the MCP tools read asynchronously without blocking.

Contributing

See CONTRIBUTING.md for the dev loop, code conventions, and the SemVer policy for the MCP tool surface.

Security

See SECURITY.md. Vulnerabilities are reported privately via GitHub Security Advisory.

License

MIT — see LICENSE.


Registry verification — mcp-name: io.github.aruxojuyu665/twocaptcha-mcp

Metadata

Release files for twocaptcha-mcp 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for twocaptcha-mcp 0.6.1
File Size Uploaded Provenance Actions
twocaptcha_mcp-0.6.1.tar.gz 78.0 kB With provenance Details for twocaptcha_mcp-0.6.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for twocaptcha-mcp 0.6.1
File Interpreter ABI Platform Actions
twocaptcha_mcp-0.6.1-py3-none-any.whl Python 3 none any Details for twocaptcha_mcp-0.6.1-py3-none-any.whl

Total release size: 125.9 kB

Release files / twocaptcha_mcp-0.6.1.tar.gz

Download URL twocaptcha_mcp-0.6.1.tar.gz
Size 78.0 kB
Tags Source
SHA-256 checksum
How to use checksums
56f8474cf8dcced58eb0b5ba38d31f807618873039d1ab4b7aa328d37cc38a89
BLAKE2b-256 checksum
How to use checksums
7812e7ac66b4b4a14ab6a49e19d865ce9e42b3e02176c3fc83ee891807ada325
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2026.

Transparency log

Release files / twocaptcha_mcp-0.6.1-py3-none-any.whl

Download URL twocaptcha_mcp-0.6.1-py3-none-any.whl
Size 47.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
24d4aa4bbe41dc12ad32670ec72864f82dd8fa50139c52d544790633c60aad75
BLAKE2b-256 checksum
How to use checksums
2917cd95875cca527ce7de31d0f7b7d5984a7cb8d49331bc14d0a651d59643d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2026.

Transparency log

Security for twocaptcha-mcp 0.6.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for twocaptcha_mcp-0.6.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.6.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page