capmonster-mcp
OfficialAllows solving Binance anti-bot captchas by creating and polling CapMonster Cloud tasks.
Allows solving Cloudflare Turnstile and Cloudflare Challenge (managed challenge / cf_clearance) captchas by creating and polling CapMonster Cloud tasks.
CapMonster Cloud MCP Server (Model Context Protocol)
An Model Context Protocol (MCP) server for CapMonster Cloud, available as a Python package
and as a TypeScript port (ts/).
This server is the solve brain: it lists supported captcha types, serves CapMonster's live
docs, and creates/polls solve tasks against the CapMonster Cloud REST API. It has no browser of
its own ā pair it with a browser-driving MCP (e.g.
capmonster-mcp-patchright) that does
the page work (navigation, interaction, reading the live DOM/network, and injecting the solved
token back into the page). See capmonster_agent/SKILL.md for the
full step-by-step procedure for analyzing a captcha-protected page and solving it this way.
š Get your Free API Key and Start Bypassing CAPTCHAs
ā” Supported CAPTCHAs
Your AI Agent will be able to automatically bypass, among others:
reCAPTCHA (v2, v2 Enterprise, v3)
Cloudflare Turnstile and Cloudflare Challenge (managed challenge /
cf_clearance)FunCaptcha (Arkose)
GeeTest (v3 and v4)
Enterprise Anti-Bot Systems: AWS WAF, DataDome, Imperva, TSPD, Binance, Prosopo, Yidun, TenDI, Hunt, Altcha, Basilisk, and more
Image-to-Text & Complex Image Tasks
The authoritative, current list is served live from CapMonster's OpenAPI spec via the
get_supported_tasks tool ā hCaptcha is not currently supported, despite appearing in some
of CapMonster's own marketing copy.
Related MCP server: solvegate-mcp
š¦ Installation
Requires Python 3.11+ and a valid CapMonster API Key. Run it with uvx (no local clone needed):
uvx capmonster-mcpPrefer TypeScript/Node? See ts/README.md for the npm-published port ā same
tools, same behavior.
š Using with an MCP client (e.g. Claude Desktop)
Add the following to your MCP client's config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"capmonster": {
"command": "uvx",
"args": ["capmonster-mcp"],
"env": {
"CM_API_KEY": "your_api_key_here"
}
}
}
}The server only runs over stdio, so there are no HTTP headers to carry a per-request key ā
CM_API_KEY is read once from the environment and shared by every tool call in the session.
Pair it with a browser-automation MCP server (e.g.
capmonster-mcp-patchright) so your
agent can both see the page and solve what's on it ā see mcp.example.json
for a config with both servers wired up together.
š Available MCP Tools
Once connected, your LLM will have access to the following tools:
get_supported_tasks: Lists captcha task types CapMonster supports, from the live OpenAPI spec.get_task_parameters(task_type): Required/optional fields, variant notes, and the solution schema for a task type.get_docs(url, offset, limit, section): Fetches a CapMonster documentation page (docs.capmonster.cloud/api.capmonster.cloudonly), with section-jump and pagination.create_task(task): Submits a captcha task and returns ataskId.get_task_result(task_id): Polls a task once.get_task_result_wait(task_id, timeout_seconds, poll_interval_seconds): Polls a task to completion (preferred over driving the poll loop yourself).get_actual_user_agent(): Fetches a current Windows User-Agent to use as one consistent fingerprint across the browser and the solve task.get_balance(): Checks your current CapMonster Cloud API balance.
š Official Documentation
š License
Available Tools
8 toolscreate_taskCreate captcha taskA
Submit a captcha task; returns taskId. Poll with get_task_result.
task must include 'type' and all required fields. Always look up required params at https://docs.capmonster.cloud/docs/captchas/ ā do not rely on training data.
For a task holding one or more large base64 blobs (ComplexImageTask with
several images, htmlPageBase64 for Cloudflare cf_clearance/wait_room, or
any other opaque field/combined payload too big to type safely) pass
task_file instead of task: the path to a JSON file, on this machine's
filesystem, containing the exact task object. Write that file with a
script or a browser-side save (never by hand-typing a long base64 literal
into this tool call's own arguments ā a single dropped/unclosed quote in
a multi-KB string silently merges what should be separate array elements
into one, which is why this exists: a 9-image ComplexImageTask sent
inline this way became "Image count: 1, but the task supports: 9" even
though the array had 9 entries when written). Provide exactly one of
task or task_file.
| Name | Required | Description | Default |
|---|---|---|---|
| task | No | ||
| task_file | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on the full burden of behavioral disclosure. It explains the return value, the polling flow, and warns against a real failure mode with inline base64. It does not cover auth or rate limits, but the core behavioral traits are well transmitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the essential return/poll info is front-loaded, and the detailed example about the 9-image failure earns its place by preventing a subtle but costly mistake. It is verbose but structured and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters and no output schema, this description covers both input modes, points to external docs for required fields, and explains the follow-up polling. It does not document error cases, but an agent can invoke it correctly without missing critical context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description fully compensates: task must include type and required fields, task_file is a filesystem path to a JSON task object, and exactly one of the two must be provided. This transforms two opaque parameters into clear, usable instructions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Submit a captcha task; returns taskId. Poll with get_task_result.' This clearly states what the tool does and how it differs from the sibling result-polling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use task_file instead of task, mandates looking up required params in the docs, and requires exactly one of task or task_file. This is actionable when-to guidance, not just a vague hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_actual_user_agentGet actual User-AgentA
Fetch a current, real-world (Windows) User-Agent string from CapMonster's UA service.
Use ONE User-Agent as a single fingerprint thread across the whole solve ā they must all match or the solved token is likely to be rejected:
set it as the patchright browser context's UA (browser-launch flag / device emulation), so the page is loaded with it;
pass the SAME string as the
userAgentfield of any CapMonster task that accepts one (reCAPTCHA, Turnstile/Cloudflare, FunCaptcha, AWS WAF, DataDome, Imperva, Yidun, TenDI, ā¦);when the solution comes back with its own
userAgent(orheaders["User-Agent"]), the token is bound to THAT value ā reuse it for the injection and any follow-up requests instead of your original.
CapMonster requires a current Windows-OS UA; a stale/invalid one fails with ERROR_WRONG_USERAGENT, so re-fetch here rather than reusing an old one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses important behavioral traits: the UA must be current Windows-OS, stale values cause ERROR_WRONG_USERAGENT, and the solution may return its own UA that should be reused. This is substantial context beyond a simple getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then uses a numbered list to explain the fingerprint-consistency workflow. Every sentence adds useful guidance without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless utility, the description is complete: it covers what the tool returns, why freshness matters, how to apply the value, and how to handle the UA returned in the solution. No output schema exists, but the description sufficiently explains the expected value and usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds meaning by explaining how the returned value should be used, although parameter-level detail is irrelevant here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool fetches a current, real-world Windows User-Agent string from CapMonster's service. This is a specific verb+resource and is clearly distinct from the sibling tools like get_balance or create_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use the tool: before starting a solve, and to re-fetch rather than reuse stale UAs. It gives concrete context for using the value consistently across the solve, though it does not explicitly rule out alternative tools or mention cases where it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceGet CapMonster balanceA
Get CapMonster account balance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the purpose without mentioning authentication requirements, potential errors, or the return format. Since there is no output schema, the agent is left to infer what the balance response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundancy. It is appropriately front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters and no output schema. The description tells the agent what it does, which is largely sufficient for a trivial getter. However, it does not specify the return value format, which is a minor gap given the lack of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema description coverage is 100% (trivially empty). The description adds no parameter information, but none is needed. Per the rubric, a zero-parameter tool earns a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the specific resource ('CapMonster account balance'). It is distinct from sibling tools, which focus on tasks, user agent, or documentation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used to check the account balance, but it does not provide explicit guidance on when to use it versus alternatives or mention any prerequisites. For a simple getter with no parameters, this is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_docsFetch CapMonster documentationA
Fetch a CapMonster documentation page by its URL and return its text.
Use this to read a captcha type's docs (exact task parameters, how to extract them from a live page, and worked createTask/getTaskResult examples). Pick the URL from the llms.txt index (https://docs.capmonster.cloud/llms.txt) ā it lists every doc page. Also accepts llms-full.txt and the OpenAPI spec URL.
Only URLs on docs.capmonster.cloud or api.capmonster.cloud are allowed.
Jumping to a section (preferred on big pages ā avoids paging by hand):
Pass
section="<heading>"to return just that##/###section (from its heading down to the next same-or-higher-level heading). Matching is case-insensitive and substring-based, sosection="Examples of solving"or evensection="examples"works. Great for going straight to "Create task", "Get task result", or "Examples of solving ā¦".When a page is returned in chunks, the first chunk is prefixed with a section outline (each heading and the exact
section="ā¦"to jump to it), so you can pick the section you need in one follow-up call.
Paging (when you want the raw text, no section):
Pages that don't fit in limit characters are returned one chunk at a time,
starting at offset. The chunk is prefixed with a header showing the range,
the total length, and (if there's more) the offset to pass on the next
call ā keep calling with that offset until the header says end of document.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| limit | No | ||
| offset | No | ||
| section | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses key behavior: it returns text, restricts allowed URL domains, describes section matching semantics, and details chunked paging with headers and continuation offsets. This is particularly strong for a tool with zero annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section contributes distinct operational value: purpose, source selection, URL restriction, section jumping, and paging. Formatting with headers, bullets, and code literals makes it skimmable, and the most important advice is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema and no annotations, this description is complete. It covers how to find URLs, what input each parameter expects, how to navigate large pages, and how to handle pagination. An agent has everything needed to call it correctly and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility for parameter meaning. It thoroughly explains url (with domain restriction and source index), section (case-insensitive substring matching), and limit/offset (chunked paging behavior and continuation instructions). All four parameters are richly documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch a CapMonster documentation page by its URL and return its text.' This clearly distinguishes get_docs from sibling API tools like create_task or get_balance, as it is explicitly a documentation fetcher rather than a captcha operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use the tool: 'Use this to read a captcha type's docs' and directs the agent to pick the URL from the llms.txt index. It also provides concrete selection rules for section-based extraction versus paging, covering both common and edge-case usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supported_tasksList supported captcha task typesA
List captcha task types supported by CapMonster, sourced from the OpenAPI spec.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The verb 'list' implies a read-only operation with no side effects, but this is not explicitly stated. It also doesn't mention authentication, rate limits, or response format. For a trivial list tool, the gap is minor, but there is no proactive disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence, front-loaded with the action and resource. The phrase 'sourced from the OpenAPI spec' adds provenance but is not essential; it could be trimmed without loss, yet overall it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description adequately conveys that it returns a list of supported task types. It doesn't specify the exact format of the list, but the purpose is clear enough for an agent to understand what the tool provides. No critical information is missing for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so a baseline of 4 is appropriate. The description adds no parameter information, but none is needed. The schema already fully documents an empty object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List') and resource ('captcha task types supported by CapMonster'). It is easily distinguished from siblings like get_balance or create_task, so there is no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: an agent would call this to discover which task types are supported before creating tasks. However, it does not explicitly state when to use it or mention alternatives, nor does it give exclusions. It's implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_parametersGet task type parametersA
Return the parameters for a CapMonster task type, from the live OpenAPI spec.
Use after get_supported_tasks() to look up what fields a task needs. Pass either a top-level type name (e.g. 'RecaptchaV2Task', 'TurnstileTask') or a CustomTask class name (e.g. 'DataDome', 'altcha', 'HUNT').
Returns:
all_parameters: every field with its type/description (nested objects like
metadataare expanded).required: the fields the spec marks required.
description: the type's own spec note. READ IT ā for several types it is where the spec records that the type has mutually-exclusive VARIANTS and which fields each needs (e.g. Turnstile's
cloudflareTaskType, AWS WAF's challenge/captcha/cookie option-sets). The flatrequiredlist CANNOT express those variants, so it under-reports what a given variant needs.solution: the name of the solution schema this type returns.
ā ļø The flat field list is a starting point, not the whole contract. When
description mentions variants/options/modes ā or whenever you are unsure ā
confirm the exact per-variant field set and the solution shape against the
worked examples via get_docs before building the task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and meets it: it discloses the exact return keys (all_parameters, required, description, solution), that nested objects are expanded, and that the flat required list under-reports variant-specific requirements. It also warns that the flat list is a starting point, not the whole contract.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then uses a scannable bullet list for return values and a clearly marked warning about limitations. Every sentence adds needed operational context, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one undocumented parameter, no annotations, and no output schema, the description is complete: it explains what to pass, what will be returned, how to interpret the required list, and where to go for further confirmation. Nothing essential for calling this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines task_type as a string with no description, so schema coverage is 0%. The description compensates strongly by giving concrete examples of valid values ('RecaptchaV2Task', 'TurnstileTask', 'DataDome', 'altcha', 'HUNT') and by explaining that both top-level type names and CustomTask class names are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return the parameters for a CapMonster task type, from the live OpenAPI spec.' It also clarifies the input (top-level type name or CustomTask class name) and distinguishes itself from related tools like get_supported_tasks and get_docs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit sequencing: 'Use after get_supported_tasks() to look up what fields a task needs.' It also tells the agent when to switch to get_docs, i.e., when the description field mentions variants/options/modes or when the agent is unsure about per-variant fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_resultGet task result (single poll)A
Fetch a task result ONCE (a single poll).
Prefer get_task_result_wait, which polls for you. Use this only if you
want to drive the poll loop yourself.
Returns a dict:
while solving: {"status": "processing", ...} ā retry after 2-3 s. Poll no faster than once per 2 s (max 120 polls per task), and fetch the result promptly: the task is stored for only ~5 min before it expires with ERROR_NO_SUCH_CAPCHA_ID.
when ready: {"status": "ready", "solution": {...}, "cost": ..., ...}
The solution object is CapMonster's raw solution, returned verbatim ā its
shape differs per captcha type. Extract fields by the shape documented for
that type (get_docs), e.g. gRecaptchaResponse/token for
reCAPTCHA/Turnstile, nested domains[host].cookies.* for DataDome/Imperva,
data.randstr + data.ticket for TenDI, etc.
IMPORTANT: several types return a userAgent (or headers["User-Agent"])
inside the solution ā the solved token is bound to it, so reuse that exact
UA in the browser / subsequent requests when injecting (Cloudflare
Challenge, FunCaptcha, AWS WAF, Binance, TenDI, Basilisk).
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does so thoroughly: it explains the processing vs ready statuses, retry timing, rate limits, 5-minute expiry, ERROR_NO_SUCH_CAPCHA_ID, raw solution shape, and userAgent binding. This far exceeds what a typical description provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place: usage guidance, status returns, rate limits, expiry, solution shape, and UA binding are all relevant. It is front-loaded with the single-poll distinction and structured with bullets for easy scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and no annotations, the description gives a complete picture: return values, polling cadence, storage lifetime, error behavior, solution extraction pointers, and UA reuse instructions. An agent has enough context to call the tool correctly and interpret its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate for the task_id parameter, but it never mentions task_id, where it comes from, or its format. The parameter name is self-explanatory, but the description adds no semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch a task result ONCE (a single poll).' It clearly distinguishes itself from the sibling get_task_result_wait by emphasizing single-poll behavior, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to prefer get_task_result_wait and to use this tool only when driving the poll loop manually. This direct alternative guidance removes any guesswork about when to choose this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_result_waitGet task result (poll to completion)A
Poll a task to completion and return its solution (the usual way to collect a result after create_task).
Blocks, polling /getTaskResult every poll_interval_seconds until the task
is ready or timeout_seconds elapses. This respects CapMonster's limits for
you ā the interval is clamped to a minimum of 2 s (the API rejects faster
polling with ERROR_TOO_MUCH_REQUESTS) and the number of polls is capped at
120 per task.
Returns the same ready dict as get_task_result:
{"status": "ready", "solution": {...}, "cost": ..., ...}
The solution is CapMonster's raw solution, verbatim ā its shape differs
per captcha type (see get_task_result / get_docs).
IMPORTANT: several types return a userAgent (or headers["User-Agent"])
inside the solution ā the token is bound to it, so reuse that exact UA when
injecting (Cloudflare Challenge, FunCaptcha, AWS WAF, Binance, TenDI,
Basilisk).
Raises an error on solve error (e.g. ERROR_RECAPTCHA_TIMEOUT ā often a slow
proxy) or if the task is still processing when timeout_seconds is reached
(increase the timeout, or check the proxy/params and re-create the task).
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| timeout_seconds | No | ||
| poll_interval_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: blocking behavior, the 2s minimum interval clamp tied to the ERROR_TOO_MUCH_REQUESTS rejection, the 120-poll cap per task, timeout semantics, error raising on solve failures, and the critical UA-binding warning for token reuse. This exceeds what even typical annotations would supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place: purpose, behavior, return format, a critical operational warning, and error handling. The IMPORTANT callout is front-loaded appropriately after the core mechanics. Slightly verbose, but the density of useful information justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a polling tool with no output schema, 0% param coverage, and no annotations, the description covers return dict structure, per-captcha solution shape variance, error conditions, timeout recovery, and proxy troubleshooting. There is no meaningful gap that would prevent an agent from invoking this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: poll_interval_seconds is explained with its clamping rule, timeout_seconds is explained in both behavior and troubleshooting context, and task_id is implied through the create_task flow. It doesn't state explicit types or defaults for the numbers, but the behavioral context is meaningful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+goal: 'Poll a task to completion and return its solution', and immediately positions it as 'the usual way to collect a result after create_task'. It distinguishes itself from the sibling get_task_result by framing itself as the blocking/polling variant and explicitly noting it returns the same ready dict.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use it ('the usual way to collect a result after create_task') and gives actionable failure guidance (increase timeout, check proxy, re-create task). It references the sibling get_task_result as the source of the return-shape details, though it stops short of an explicit 'use get_task_result instead when you only want one poll' exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.11- First observed
create_task - First observed
get_actual_user_agent - First observed
get_balance - First observed
get_docs - First observed
get_supported_tasks - First observed
get_task_parameters - First observed
get_task_result - First observed
get_task_result_wait
TDQS
Scored across 8 tools
The three reference tools (get_supported_tasks, get_task_parameters, get_docs) have overlapping purposes but are clearly distinguished: one lists types, one returns structured parameters, and one fetches documentation pages. The polling pair get_task_result vs get_task_result_wait is well-differentiated, and no two tools actually do the same thing.
All tools follow a consistent verb_noun pattern: get_* for informational/account operations and create_task for the single mutation. Names are specific, predictable, and use the same style throughout.
Eight tools is well-scoped for a captcha-solving service. The set covers balance, user-agent, task creation, two result-polling variants, and three complementary reference tools, each earning its place without redundancy.
The core captcha-solving lifecycle is covered: discover supported tasks, look up parameters and docs, create the task, and poll for the result. Account balance and user-agent fetching address operational needs, leaving no dead ends in the primary workflow.
Maintenance
Related MCP Connectors
Solve reCAPTCHA v2/v3, hCaptcha, Cloudflare Turnstile and image captchas. Platform-hosted, no creden
Cloudflare Solver: Scraping API designed to bypass Cloudflare protection.
Universal captcha solving with the industry-standard createTask / getTaskResult protocol, 19 task
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceIntegrates with 2Captcha to solve various CAPTCHA types (image, reCAPTCHA, hCaptcha, etc.) for AI agents via MCP.121 npm-

solvegate-mcpofficial
AlicenseAqualityAmaintenanceEnables agents to inspect web pages for Cloudflare Turnstile challenges without an API key, and clear Turnstile or WAF challenges using a SolveGate API key.6337 npm1MIT- FlicenseNot gradedqualityCmaintenanceEnables solving CAPTCHAs in MCP workflows with authorization, bounded attempts, and structured result validation.-

CapSolver MCP Serverofficial
AlicenseAqualityBmaintenanceOfficial CapSolver MCP server that provides CAPTCHA detection and solving tools for authorized AI-agent, browser automation, testing, and data workflows.5157 PyPI1MIT