Skip to main content
Glama

CapMonster Cloud MCP Server (Model Context Protocol)

License: MIT MCP 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-mcp

Prefer 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.cloud only), with section-jump and pagination.

  • create_task(task): Submits a captcha task and returns a taskId.

  • 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

MIT

Available Tools

8 tools
create_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
task_fileNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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:

  1. set it as the patchright browser context's UA (browser-launch flag / device emulation), so the page is loaded with it;

  2. pass the SAME string as the userAgent field of any CapMonster task that accepts one (reCAPTCHA, Turnstile/Cloudflare, FunCaptcha, AWS WAF, DataDome, Imperva, Yidun, TenDI, …);

  3. when the solution comes back with its own userAgent (or headers["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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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, so section="Examples of solving" or even section="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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
limitNo
offsetNo
sectionNo

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 metadata are 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 flat required list 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_typeYes

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes
timeout_secondsNo
poll_interval_secondsNo

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 8 tool updatesv0.1.11
    • First observedcreate_task
    • First observedget_actual_user_agent
    • First observedget_balance
    • First observedget_docs
    • First observedget_supported_tasks
    • First observedget_task_parameters
    • First observedget_task_result
    • First observedget_task_result_wait

TDQS

A4.4/5.0

Scored across 8 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers