MCP server for SolveGate — let an agent clear Cloudflare Turnstile and WAF challenges, and inspect a page for Turnstile without an API key.
solvegate-mcp demonstrates strong tool design with clear, purposeful naming (inspect_page, solve_turnstile, get_solve), comprehensive descriptions (200-400 chars each), and complete input/output schemas using Zod validation. All three tools have proper verb-noun naming reflecting their actions. Descriptions are thorough and include context about when to use each tool, prerequisites, and limitations. Output schemas are declared with structured fields. Error handling returns actionable SolveGateError codes. Security is well-designed with API key injection via environment variables (never as parameters). Tool composition is clean: each tool has a single responsibility, and the inspect_page tool is deliberately first to guide agent decision-making. The main gaps are: (1) some parameter descriptions could be more explicit about formats/constraints; (2) output schema documentation in code is partially cut off but appears complete based on the visible Zod schema usage; (3) no explicit per-request error recovery guidance in descriptions.
Fetch a solve created earlier. Free — reading never re-bills. Use this when solve_turnstile timed out while still pending: the solve may have finished after the tool gave up, and the id is in that error message. A 404 means no such solve for this API key's workspace.
Fetch a URL and report what its HTML says about Cloudflare Turnstile: whether a widget is present, its sitekey, whether it renders implicitly or via turnstile.render(), the widget's data-* configuration, whether the sitekey is one of Cloudflare's documented test keys, and whether the page is a full-page WAF challenge rather than a widget. Free, no API key required. Use this before solving when the sitekey is unknown. It CANNOT determine the widget's mode (managed / non-interactive / invisible) — that is stored in the Cloudflare account that owns the sitekey and is not in the page at all.
Clear a Cloudflare challenge and return a token. `gate` is "turnstile" for an embedded widget (there is a data-sitekey in the page) or "waf" for a full-page Cloudflare interstitial. `sitekey` and `url` are both required; the url must be the page the challenge actually renders on, because a sitekey is bound to its configured hostnames. Tokens are single-use and expire in minutes — request one at the moment you submit. Failed solves are never billed. Requires SOLVEGATE_API_KEY.
Parameter 'action' in solve_turnstile lacks format guidance. Description says 'Optional Turnstile action label, if the widget sets one' but does not explain what constitutes a valid action label, expected format, or examples. LLMs may pass arbitrary strings.
Parameter 'proxy' in solve_turnstile has minimal description ('Optional egress proxy URL to solve through') with no validation guidance on URL format, protocol requirements, or when to use it. LLMs cannot infer correct values.
Output schema for inspect_page is partially cut off in source code (ends at 'otherCaptcha: z.arr'), making full validation impossible. If this is truncation artifact, confirm complete schema definition exists in src/index.ts.
Error recovery guidance is minimal. When solve_turnstile fails with 'balance_empty', the description suggests 'act on balance_empty', but does not provide explicit next steps (e.g., 'contact support' or 'check account status'). LLMs benefit from recovery action hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2025-06-18+ | v2 |