solvegate-mcp
OfficialThis server lets an agent detect and clear Cloudflare Turnstile challenges, with one free inspection tool and two API-key-based solving/retrieval tools.
Inspect any URL for Turnstile for free —
inspect_pagefetches a page and reports whether Turnstile is present, the sitekey(s), rendering style (implicit/explicit), data-* config,cf-turnstile-responsefield presence, Cloudflare dummy/test sitekeys, and whether it's a full-page WAF challenge instead of a widget.Detect other CAPTCHAs by name — it tells you if the page uses reCAPTCHA or hCaptcha rather than Turnstile, so you don't waste a solving attempt.
Solve an embedded Turnstile widget or a full-page WAF challenge —
solve_turnstiletakes the gate type, sitekey, and page URL, then returns a single-use, short-lived token to submit ascf-turnstile-response.Solve through an optional proxy —
solve_turnstileaccepts an egress proxy URL.Pass an optional Turnstile action label — if the widget sets one,
solve_turnstilecan include it.Retrieve a previously created solve by id —
get_solveis free, never re-bills, and lets you recover a solve that finished aftersolve_turnstiletimed out.Work without an API key for inspection —
inspect_pageneeds no key; only solving does.Use sandbox or live mode — an
sk_test_key returnsmode: "sandbox"and deterministic tokens;sk_live_clears real gates.Act on structured errors instead of exceptions — failures return
errorCodevalues likebalance_empty,unknown_sitekey,rate_limited, andforbidden_target, so an agent can respond intelligently.
Provides tools for detecting Cloudflare Turnstile widgets and WAF challenges on web pages, inspecting their configuration, and solving Turnstile challenges to obtain single-use tokens for authorized testing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@solvegate-mcp Check https://example.com for a Cloudflare Turnstile challenge"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
solvegate-mcp
An MCP server that lets an agent deal with Cloudflare Turnstile: check whether a page has one, and clear it when it does.
Three tools. One of them needs no account.
Tool | What it does | Needs a key |
| Fetch a URL and report whether Cloudflare Turnstile is on it, its sitekey, how it renders, its | No |
| Clear a Turnstile or Turnstile WAF challenge and return a token | Yes |
| Fetch a solve by id — free, never re-bills | Yes |
Install
npx solvegate-mcpClaude Desktop / any MCP client, in your config:
{
"mcpServers": {
"solvegate": {
"command": "npx",
"args": ["-y", "solvegate-mcp"],
"env": { "SOLVEGATE_API_KEY": "sk_test_…" }
}
}
}Leave SOLVEGATE_API_KEY out and inspect_page still works. That is deliberate:
you should be able to see what the server does before deciding whether to sign
up for anything.
Get a key at solvegate.io. A free sk_test_ sandbox key
needs no card and returns a deterministic token instantly — right for wiring this
up, and it never clears a real gate.
Related MCP server: cloudscraper-mcp
Why inspect_page exists
The commonest wrong turn with a solver is calling it when you should have looked first. Three cases account for most of it:
The page carries reCAPTCHA or hCaptcha, not Turnstile. Those are different products from different vendors. This server does not solve them, and neither does SolveGate —
inspect_pagesays so by name instead of letting you find out from a422.It is a WAF challenge, not a widget. A full-page Cloudflare interstitial has no
data-sitekey, because the challenge belongs to a zone rule rather than to a widget you embed. There is nothing to read off the page, and the gate iswafrather thanturnstile.The sitekey is rendered from script after load. Then it is not in the served HTML at all, and the tool says that rather than guessing.
Inspecting is free, takes about a second, and is quite often the whole answer.
What it will not tell you
The widget mode. Managed, non-interactive and invisible are stored on the widget inside the Cloudflare account that owns the sitekey. The page carries only the key, so no tool can read the mode off the source — including this one, and including anything that claims otherwise.
It does not matter for solving: all three modes resolve to the same request. A sitekey, a page URL, and a token back.
The one exception is Cloudflare's five documented dummy sitekeys, whose widget
type Cloudflare publishes itself. inspect_page reports those, and finding one
on a page tells you something useful — you are looking at a staging build rather
than production.
Configuration
Variable | Default | What it does |
| — | Your key. |
|
| API base. |
|
| Where |
|
| Per-request timeout. |
|
| How long |
The key is read from the environment and is never a tool argument — a tool argument is model-visible and ends up in transcripts.
Notes on behaviour
Solving is async underneath. solve_turnstile creates the solve with
async: true and polls it, rather than holding a connection open for the whole
attempt. An agent's tool call has a timeout it does not control, and a
synchronous solve makes a slow gate look like a dead tool. It also means a
timeout here leaves you a solve id: the error names it, and get_solve will pick
it up rather than losing a solve that was already billed.
Errors are results, not exceptions. Every failure comes back as an isError
result carrying SolveGate's own error.code — balance_empty, unknown_sitekey,
rate_limited, forbidden_target. A model can act on those. It can do nothing
useful with a stack trace.
Tokens are single-use and short-lived. expiresAt is Unix seconds; past it,
Cloudflare stops accepting the token and the solve record is just a record.
Request a token at the moment you submit it.
Check mode before trusting a token. An sk_test_ key returns
mode: "sandbox", and a sandbox token will not clear a real gate. The field
exists so a test key in a production config fails loudly rather than quietly.
Acceptable use
Solve only against properties you own or are authorised to test. This exists for
end-to-end tests that keep failing on a challenge, CI against your own staging,
and synthetic monitoring of your own production. The
acceptable use policy is the binding version, and
targets on the denylist return 403 forbidden_target regardless of what any
agent asks for.
Development
npm install
npm run build
npm test # spawns the built server and speaks MCP to it
OFFLINE=1 npm test # skips the two tests that reach the networkThe tests drive a real stdio transport rather than calling the tool callbacks directly. That is on purpose: a schema the SDK rejects at registration, or a stray write to stdout — which corrupts the transport, since stdout is the transport — only shows up when something actually speaks the protocol to it.
Links
Turnstile checker — the same inspection this server exposes, in a browser
MIT.
Available Tools
3 toolsget_solveRetrieve a solve by idARead-only
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.
Inputs: id (required). Returns: id, mode, token, billed, +4 more
inspect_pageInspect a page for Cloudflare TurnstileARead-only
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.
Inputs: url (required). Returns: present, summary, finalUrl, sitekeys, +5 more
solve_turnstileSolve a Cloudflare Turnstile or WAF challengeA
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.
Inputs: url (required), gate (required), sitekey (required), proxy, +1 more. Returns: id, mode, token, billed, +5 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
Each tool serves a distinct purpose: inspect_page reads page HTML, solve_turnstile solves the challenge, and get_solve retrieves a previous result. There is no functional overlap between them, and their descriptions clearly differentiate when to use each.
All tool names follow the verb_noun pattern in snake_case: inspect_page, solve_turnstile, get_solve. The pattern is consistent and predictable, making it easy to infer tool behavior from the name.
With only 3 tools, the server remains tightly focused on the Turnstile solving workflow. Each tool is essential and there is no bloat or redundancy, so the count is perfectly matched to the scope.
The tool surface covers the full lifecycle: pre-flight inspection (inspect_page), actual solving (solve_turnstile), and post-hoc retrieval (get_solve). This is a complete workflow with no obvious dead ends or missing operations for the stated purpose.
Maintenance
Related MCP Connectors
Zendesk MCP server for ChatGPT, Claude and any AI agent: list tickets, reply to ticket, update ticket, apply macro, add internal note and search tickets in your own Zendesk account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Zendesk yourself; Cotlet does not store your password and you need no Zendesk API key. About the official Zendesk API: Zendesk has a full REST API, the Support API (also called the Ticketing API), but no documented Zendesk-hosted MCP server for working tickets (checked 16 Oct 2026). Zendesk's MCP documentation covers the MCP client, where Zendesk calls other servers. Setup and FAQ: https://cotlet.dev/integrations/zendesk-api-mcp-server
HappyFox MCP server for ChatGPT, Claude and any AI agent: search tickets, reply to ticket, add private note, update ticket, apply canned action and list queues in your own HappyFox account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to HappyFox yourself; Cotlet does not store your password and you need no HappyFox API key. About the official HappyFox API: HappyFox has a full REST API (version 1.1) for tickets, contacts and assets, but no official MCP server for working tickets (checked 20 Oct 2026). The API uses an API key and auth code from an app an admin enables, and it takes status, priority, assignee and custom fields as integer IDs. Setup and FAQ: https://cotlet.dev/integrations/happyfox-api-mcp-server
SysAid MCP server for ChatGPT, Claude and any AI agent: search tickets, update ticket, assign ticket, add note, resolve ticket and merge tickets in your own SysAid account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to SysAid yourself; Cotlet does not store your password and you need no SysAid API key. About the official SysAid API: SysAid has a full REST API, the Connect API, but no official MCP server (checked 23 Oct 2026). The API covers service records, notes, users, assets and more, and needs a SysAid Spaces account and an app key, and its guides ask for administrator permissions. Setup and FAQ: https://cotlet.dev/integrations/sysaid-api-mcp-server
Tidio MCP server for ChatGPT, Claude and any AI agent: list tickets, reply to ticket, update ticket, update contact properties, create macro and read conversation history in your own Tidio account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Tidio yourself; Cotlet does not store your password and you need no Tidio API key. About the official Tidio API: Tidio has a REST API, the OpenAPI, for contacts, tickets, operators and departments, but only on the Plus and Premium plans, and its two official MCP servers cannot work your inbox (checked 17 Oct 2026). One MCP connector installs the chat widget; the other reads analytics and "can't send messages, change settings, or modify anything". Setup and FAQ: https://cotlet.dev/integrations/tidio-api-mcp-server
Related MCP Servers
AlicenseAqualityDmaintenanceEnables AI agents to scrape websites protected by Cloudflare, DataDome, and Akamai, bypassing anti-bot measures to retrieve page content.2MIT- FlicenseNot gradedqualityDmaintenanceEnables AI agents to bypass Cloudflare protection and scrape web content, returning clean Markdown with smart chunking and file export.1-
- AlicenseNot gradedqualityDmaintenanceEnables agents to take screenshots and extract text from web pages using a persistent Chrome browser via CDP, with built-in SSRF protection.7 npmMIT
- AlicenseAqualityBmaintenanceCapMonster Cloud Official MCP server CAPTCHA Solver & bypass reCAPTCHA, Turnstile, DataDome, and other CAPTCHAs.84MIT