Skip to main content
Glama

solvegate-mcp

에이전트가 Cloudflare Turnstile을 처리할 수 있게 해주는 MCP 서버입니다. 페이지에 Turnstile이 있는지 확인하고, 있다면 해제합니다.

도구는 세 가지입니다. 그중 하나는 계정이 필요 없습니다.

도구

기능

키 필요

inspect_page

URL을 가져와서 Cloudflare Turnstile이 있는지, 사이트키, 렌더링 방식, data-* 설정, 그리고 페이지가 위젯 대신 전체 페이지 WAF 린지인지 보고합니다

아니요

solve_turnstile

Turnstile 또는 Turnstile WAF 린지를 해제하고 토큰을 반환합니다

예

get_solve

ID로 해제 결과를 가져옵니다 — 무료, 다시 청구되지 않송.

예

설치

npx solvegate-mcp

Claude Desktop / 모든 MCP 클이언트, 설정 파일에:

{
  "mcpServers": {
    "solvegate": {
      "command": "npx",
      "args": ["-y", "solvegate-mcp"],
      "env": { "SOLVEGATE_API_KEY": "sk_test_…" }
    }
  }
}

SOLVEGATE_API_KEY를 빼도 inspsect_page는 여전히 작동합니다. 이 것은 의요입니다: 어떤 것에 가입하기 전에 서버가 어든 일을 하는지 볼 수 있어야 합니다.

키는 solvegate.io에서 받수 있습니다. 무료 sk_test_ sample박스 키는 카드가 필요 업고 즉시 결정적(deterministic) 토큰을 반환합니다 — 이 걸 연결하는 데 적합하며, 실체 게이트를 해제하지 않습니다.

Related MCP server: cloudscraper-mcp

inspspect_page가 존재하는 이유

솔버(solver) 사용 시 가장 흔환 실수는 먼저 물어봐야 했는데 그냥 불러 쓰는 것입니다. 대부분을 차지하는 경우는 다음 세 가지입니다:

  • 페이지에 Turnstile이 아니라 reCAPTCHA 또는 hCaptcha가 있습니다. 이들은 서로 다른 공급사의 다른 제품입니다. 이 서버는 이들을 처리하지 않으며, SolveGate도 마찬가지입니다 — inspsect_page는 422 에러로 알게 하기보다 이름으로 그렇다고 직접 알려줍니다.

  • 위젯이 아닌 WAF 챨린지입니다. 전체 페이지 Cloudflare interstitstitial에는 data-sitekey가 없습니다. 챨린지는 위젯이 아니라 존(zone) 규칙에 속하기 때문입니다. 페이지에서 읽을 것이 없으며, 게이트는 turnstile이 아니라 waf입니다.

  • sitekey가로드 후 스크립트로 렌더링됩니다. 그러면 서브드된 HTML 전혀 없고, 이 도구는 추측하지 않고 그렇게 알려줍니다.

검사는 무료이고 약 1초 걸립니다. 그리고 종 전체 답안 됩니다.

알려주지 않는 것

위젯 모드입니다. Managed, non-interactive, invisible은 해당 feature를 소정한 Cloudflare 계의 위젯에 저장됩니다. 페이지에는 키만 있으므로 어떤 도구도 source에서 모드를 읽을 수 없습니다 — 이 도구 포함, 그렇다고 주장하는 것들도 모두 말입입니다.

해결에는 중요하지 않습니다. 모든 세 모드는 같은 요청으로 해결됩니다. sitekey와 페이지 URL을 보내면 토큰이 돌아옵니다.

단 하나의 예외는 Cloudflare가 문서로 공개한 5개 dummy site-key입니다. 위젯 타잎을 Cloudflare 스스로가 공개합니다. inspsect_page는 이들을 보고하며, 페이지에서 그것을 발견하는 것은 유용한 것을 알려줍니다 — 프로덕션 일 아니라 스테이징 빌드를 보고 있다는 것입이다.

설정

변수

기본값

설명

SOLVEGATE_API_KEY

—

내 키. sandbox용은 sk_test_, 실제 게이트용은 sk_live_

SOLVEGATE_BASE_URL

https://api.soivegate.io

API 기본 주소

SOLVEGATE_SITE_URL

https://solvegate.io

inspsect_page가 실핻되는 위치.

SOLVEGATE_TIMEOUT_MS

30000

요청네 타임아웃.

SOLVEGATE_MA_WAIT_MS

60000

solve_turnstile이 대기 중인 솔루션을 기다릍는 간격.

키는 환경 변수에서 읽혀며 어절대 도구 인자로 전달되지 않습니다 — 도구 인자는 모데이 보이 보이고 대화 기록에 남니다.

동작에 대한 참고 사항

안에서 해결은 비동기적입니다. solve_turnstile은 async: true로 해결을 생성하고 그것을 풀링하며 시도 전체의 연결을 유지하지 않습니다. 에이전트의 도구 호출에는 제어할 수 없는 timeout이 있 같은, 동기적 해결은 느린 게이트를 죽은 도구처럼 보이게 합니다. 또한 -- 여 즉시 timeout이 발생해도 솔루션 ID가 남습니다: error가 그 ID를 알려주고 get_solve가 그 해결을 이어받게 됩니다. -- 어떤 이미 청구되었는데 헤버리지 않도록.

오류는 예외가 아이라 결과입니다. 모든 실패는 SolveGate 자신의 error.code — balance_empty, unknown_sitekey, rate_limited, forbidden_target — 포한 isError 결과로 돌아있습니다. 모델은 이에 따라 행동할 수 있습니다. 스택 트레이스로는 유용한 일을 할 수 없습니다.

토큰은 일회용이며 짧시간 동안만 있습니다. expiresAt는 Unix 초입니다. 지나면 Cloudflare가 토큰을 허용하지 않습니다. --을 채청하는 시점에 토큰을 가져오세요.

mode를 확인하기 전에 토큰을 신뢰하지 마세요. sk_test_ 키는 mode: "sandbox"를 반환하고, 모래상자 토큰은 실제 게이트를 해제하지 않습니다. 이 필드는 프로덕션 구성에서 테스트 키가 조용히 실패하지 않고 분명히 실패하도록 존재합니다.

허용되는 사용

소유하거나 테스트 권한이 있는 웹 속성에 대한 해결만 하세요. 이 서버는 챌린지에서 계속 실패하는 엔드투엔드 테스트, 자신의 스테이징 환경을 대상으로 하는 CI, 그리고 자신의 프로덕션에 대한 합성 모니터링을 위해 존재합니다. 허용 가능한 사용 정책이 구속력 있는 버전이며, 차단 목록에 있는 대상은 어떤 에이전트가 요청하든 403 forbidden_target을 반환합니다.

개발

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 network

테스트는 도구 콜백을 직접 호출하는 대신 실제 stdio transport를 구동합니다. 이는 의도적인 것입니다. -- SDK 등록 시 거부하는 스키마나, -- 것-- shema or stra ay write to stdout -- which corrupts the transport, since stdout is the transport -- only show up when something actually speak the protocol to it.

대체적으로 번역하면: 등록 시 SDK 가 거부하는 스키마나, stdout 어딘 쓰기가 transport를 망기 때문에 transport 바로 transport 인 이유로 - 실제로 프로토콜 을 교환할 때만 그런 문제가 드러납니다.

Note: We have to translate prose only, keep non-modified. Need not include "shebang" etc. Let's accurately final the translation now. Need not include "translate" word. Let's write clean.

Need not use "송" etc errors. Let's craft final elegantly.

Full translation:


solvegate-mcp

An MCP server... (Korean)

...

Need ensure no "shebang" weird from partial.

Let's do final carefully, with all tokens.

  • "innerHTML" no.

  • "stdout s the transport": Use *바로* for emphasis. Sentence: "stdout에 대한 어긋난 쓰기 — stdout이 바로 transport이므로 transport를 손상시키는 일 —는 실제로무언가 그 transport를 향해 프로토콜로 말을 걸 때만 드러납니다."

Need "is the transport" -> "stdout is transport" emphasis on "is". Korean "stdout이 곧 transport" but "곧" is "just". "바로" meaning exactly. Good.

Let's produce final with no weird partial.

Need handle All headings.

Double-check table header content: The "Markerdown table" uses | -------------------- with maybe alignment lengths not important. We can keep one separator row: | --- | --- | --- |. The original has specific dashes. "Preserve exact structure" maybe means same number of columns etc, but not alignment. Use same style? It's okay to use standard. But they ask "exact structure of Markdown tables (same number of rows, columns, and pipe separators)." So yes.

Let's craft final answer# solvegate-mcp

solvegate-mcp

MCP 서버로, 에이전트가 Cloudflare Turnstile을 다룰 수 있게 해줍니다. 페이지에 Turnstile이 있는지 확인하고, 있다면 해제합니다.

여러 도구입니다. 하나는 계정이 필요 없습니다.

도구

기능

키 필요

inspect_page

URL을 가져와서 Cloudflare Turnstile이 그 페이지에 있는지, sitekey가 무엇인지, 어떻게 렌더링되는지, data-* 설정, 그리고 그 페이지가 위젯 대신 전체 페이지 WAF 챌린지인지 보고합니다.

아니오

solve_turnstile

Turnstile 또는 Turnstile WAF 챌린지를 해제하고 토큰을 반환합니다.

예

get_solve

ID로 해결 결과를 가져옵니다 — 무료, 다시 청구되지 않습니다.

예

설치

npx solvegate-mcp

Claude Desktop / 모든 MCP 클라이언트에서, 설정에 다음을 추가합니다:

{
  "mcpServers": {
    "solvegate": {
      "command": "npx",
      "args": ["-y", "solvegate-mcp"],
      "env": { "SOLVEGATE_API_KEY": "sk_test_…" }
    }
  }
}

SOLVEGATE_API_KEY를 생략해도 inspect_page는 여전히 작동합니다. 그것은 의도적인 것입니다: 어떤 것에 가입하기 전에 서버가 무엇을 하는지 볼 수 있어야 합니다.

키를 받으세요 solvegate.io. 무료 sk_test_ 샌

Available Tools

3 tools
get_solveRetrieve a solve by idA
Read-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.

NameRequiredDescriptionDefault
idYesThe solve id, e.g. slv_8Kd2aF9

Output Schema

NameRequiredDescription
idYes
modeYes
tokenYes
billedYes
statusYes
summaryYes
errorCodeYes
expiresAtYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and open-world, but the description adds valuable behavioral context: it is free and never re-bills, and a 404 is scoped to the current API key's workspace. This goes beyond structured metadata without contradicting it.

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?

Three concise sentences with no filler. The main purpose is front-loaded, followed by a concrete use case and an error interpretation; every sentence earns its place.

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 single-parameter retrieval tool with an output schema and safety annotations, the description fully covers when to call it, what the id means, cost implications, and error semantics. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the only parameter, id, is already clearly described with a format example. The description adds the useful hint that the id may come from a timeout error, but does not need to elaborate further since the schema carries the parameter meaning.

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?

States a specific verb and resource ('Fetch a solve... by id') and distinguishes itself from siblings by describing exactly when it is the right tool. The mention of solve_turnstile and 404 behavior makes its role unambiguous.

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?

Explicitly tells the agent when to use this tool: after solve_turnstile times out while the solve is pending, with the id coming from that error message. It also interprets a 404 response, giving clear operational context beyond the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_pageInspect a page for Cloudflare TurnstileA
Read-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.

NameRequiredDescriptionDefault
urlYesThe page URL to inspect, e.g. https://example.com/login

Output Schema

NameRequiredDescription
presentYesTurnstile was found on the page
summaryYesOne line a human can read
finalUrlYes
sitekeysYesSitekeys found, in document order
renderingYes
httpStatusYes
otherCaptchaYesOther CAPTCHA products on the page — we do not solve these
wafChallengeYesThe response is a Cloudflare WAF challenge interstitial
responseFieldPresentYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint, it adds meaningful behavioral specifics: it performs an HTML inspection rather than solving a challenge, requires no API key, is free, and has a specific hard limitation around widget mode. These details substantially describe side effects and boundaries beyond annotations.

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?

Although the description is long, each clause delivers a distinct, useful fact: what is fetched, what is reported, cost/auth requirements, usage timing, and a critical limitation. The most important action and resource are front-loaded, and no sentence is slack.

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 single required parameter, an output schema, and annotations, the description covers everything an agent needs: when to call it, what it returns, its constraints, and what it cannot infer. The mitigation of return format details is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the single 'url' parameter with an example, so parameter documentation coverage is 100%. The description does not add much beyond the schema, but the schema already carries the necessary semantic weight. This aligns with the baseline for high schema coverage.

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 ('Fetch') and a concrete result ('report what its HTML says about Cloudflare Turnstile') and enumerates exact outputs: widget presence, sitekey, render method, data-* configuration, test keys, and full-page WAF challenge. This clearly separates it from sibling solving/result-retrieval 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 'Use this before solving when the sitekey is unknown,' giving a direct invocation condition. It also provides an exclusion: it cannot determine the widget's mode because that data is not in the page, so agents know when this tool is not sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

NameRequiredDescriptionDefault
urlYesThe page URL the challenge renders on
gateYesWhich challenge type to clear
proxyNoOptional egress proxy URL to solve through
actionNoOptional Turnstile action label, if the widget sets one
sitekeyYesThe target's sitekey, e.g. 0x4AAAAAAA…

Output Schema

NameRequiredDescription
idYes
modeYessandbox tokens NEVER clear a real gate
tokenYesSubmit this as the cf-turnstile-response field
billedYes
statusYes
solveMsYes
summaryYes
errorCodeYes
expiresAtYesUnix seconds after which the token is worthless

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-read-only and non-idempotent behavior, and the description adds meaningful operational context: tokens are single-use and expire in minutes, failed solves are never billed, SOLVEGATE_API_KEY is required, and sitekeys are bound to hostnames. This goes well beyond the annotations and clarifies important side effects and constraints.

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?

Four sentences with no filler: purpose is front-loaded, then parameter guidance, then token lifecycle and error/cost behavior. Every sentence adds useful information and the structure is easy to parse.

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?

With an output schema and useful annotations present, the description supplies the critical missing context: token expiry timing, no-billing on failed solves, API key requirement, and hostname binding. Nothing an agent needs to invoke this tool correctly appears to be missing.

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 100%, so the baseline is 3. The description adds extra semantic value by explaining the `gate` enum values, reinforcing that `sitekey` and `url` are both required, and explaining why `url` must be the actual rendering page. Some parameters like `proxy` and `action` receive no additional description, but the schema already documents them adequately.

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 pair ('Clear a Cloudflare challenge and return a token') and then defines the two `gate` modes, clearly distinguishing an embedded widget from a full-page interstitial. This makes the tool's purpose immediately understandable and separates it from generic 'solve' tools.

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?

The description gives actionable selection guidance: it explains when to use 'turnstile' versus 'waf', and instructs the agent to request tokens at submission time due to expiry. It does not explicitly name sibling tools as alternatives or state when not to use this tool, so it stops short of full when/when-not guidance.

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. 2 tool updatesv0.1.2
    • Changedget_solve6 fields changed
      • removedOutput schema / properties / errorCode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / errorCode / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / expiresAt / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / expiresAt / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / token / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / token / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedsolve_turnstile8 fields changed
      • removedOutput schema / properties / errorCode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / errorCode / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / expiresAt / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / expiresAt / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / solveMs / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / solveMs / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / token / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / token / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  2. 3 tool updatesv0.1.1
    • First observedget_solve
    • First observedinspect_page
    • First observedsolve_turnstile

TDQS

A4.8/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to scrape websites protected by Cloudflare, DataDome, and Akamai, bypassing anti-bot measures to retrieve page content.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables agents to take screenshots and extract text from web pages using a persistent Chrome browser via CDP, with built-in SSRF protection.
    9 npm
    MIT