Skip to main content
Glama

solvegate-mcp

一个 MCP 服务器,让代理能够处理 Cloudflare Turnstile:检查页面是否携带 Turnstile,如果有,就清除它。

三个工具。其中一个无需账户。

工具

作用

需要密钥

inspect_page

获取一个 URL,并报告页面上是否有 Cloudflare Turnstile、其 sitekey、渲染方式、其 data-* 配置,以及页面是整页 WAF 验证还是一个小部件

solve_turnstile

清除一个 Turnstile 或 Turnstile WAF 验证,并返回一个 token

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_KEYinspect_page 依然可用。这是刻意的:在你决定是否要注册之前,你应该先看清这个服务器做了些什么。

solvegate.io 获取密钥。免费的 sk_test_ 沙箱密钥不需要银行卡,并会立即返回一个确定的 token —— 正好适合用来进行周边通用连接,而且它永远不会清除某个真实的关卡。

Related MCP server: cloudscraper-mcp

为什么要有 inspect_page

使用求解器时最常见突发的错误是:在你应该先看一眼前就贸然调用。绝大多数情况都落在这三种之一:

  • 页面上是 reCAPTCHA 或 hCaptcha,而不是 Turnstile。 它们来自不同厂商的产品。本服务器不解决它们,SolveGate 也不 —— inspect_page 会直接说出这一点,而不是让你从 422 错误里发现。

  • 这是 WAF 挑战,而不是小部件。 一个 Whole-page Cloudflare 插屏没有 data-sitekey,因为该挑战属于某个 zone 规则,而不是属于你嵌入的小部件。页面上没有什么可读的,而且关卡是 waf 而不是 turnstile

  • sitekey 是在加载后通过脚本渲染出来的。 那么它根本不在服务器返回的 HTML 里,工具会直接讲明这一点,而不是去猜。

检查是免费的,大概只需要一秒,而且常常直接就是全部答案。

它不会告诉你什么

小部件模式。 Managed、non-interactive 和 invisible 这些模式都存储在属于 sitekey 所有者的 Cloudflare 账户里的小部件上。页面只拿 key 带过去,所以没有任何工具能从源码里读出模式 —— 这个工具不能,任何声称能读的也都不能。

这对解决没有关系:所有三种模式最终都解析成一个相同的请求。一个 sitekey、一个页面 URL、返回一个 token。

唯一的例外是 Cloudflare 官方文档里的五个虚拟 sitekey,其小部件类型由 Cloudflare 自己公布。inspect_page 会报告这些;如果页面上出现了其中一个,就知道你看到的是一个 staging 构建,而不是生产环境。

配置

变量

默认值

作用

SOLVEGATE_API_KEY

你的密钥。sk_test_ 用于沙箱,sk_live_ 用于真实关卡。

SOLVEGATE_BASE_URL

https://api.solvegate.io

API 基础地址。

SOLVEGATE_SITE_URL

https://solvegate.io

inspect_page 运行的地方。

SOLVEGATE_TIMEOUT_MS

30000

每个请求的超时。

SOLVEGATE_MAX_WAIT_MS

60000

solve_turnstile 等一个未决求解的最长时间。

密钥从环境中读到,绝不是某个工具参数 —— 工具参数对模型可见,而且会出现在对话记录里。

行为说明

求解在底层是异步的。 solve_turnstileasync: true 创建求解并进行轮询,而不是在整个尝试期间保持连接。代理的某次工具调用有一个它自己无法控制的超时,如果采用同步求解,一个卡顿的门会被人看成工具已失效。此外,这里的超时也会给你留下一个 solve id:错误会点名它,而 get_solve 会把它捞回来,而不是丢掉一个已经被计费的求解。

错误是结果,不是异常。 所有失败都会以 isError 结果返回,并附带有 SolveGate 自己的错误 code —— balance_emptyunknown_sitekeyrate_limitedforbidden_target。模型可以针对这些信息行动。而对一个堆栈追踪,模型并不能做什么有用的事。

Token 一次性且短生命期。 expiresAt 是 Unix 秒;超过它,Cloudflare 就不再接受这个 Token,而那个 solve 记录也仅仅是一个记录。记得在真正提交的时候再请求 token。

在信任 token 之前,先检查 mode sk_test_ 密钥返回的是 mode: "sandbox",而沙箱 token 是没法清除一个真实 gate 的。这个字段就是为了让生产配置里的测试 key 能响亮地失败,而不是无声地失败。

可接受的使用方式

只对自己拥有或已被授权测试的属性开展解决。这也是为了那些总是卡在验证上的端到端测试、针对你自己 staging 的 CI,以及针对你自己生产环境的 synthetic monitoring。约束向来以可接受使用条款为准,而且在 denylist 上的目标,无论任何 agent 请求什么,都会返回 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 传输,而不是直接调用工具回调。这样是有意的:SDK 在注册时拒绝的 schema,或者一个无关的写入到 stdout —— 后者会把传输弄坏,因为 stdout 就是 传输 —— 这样的问题,只有真正让某个东西用它说协议时才能暴露。

链接

MIT.

Need make sure no weird leftover "Gite" from "Development" translation? I wrote "无障碍" erroneously? Need check. I think I accidentally wrote "无障碍" for "Development". Wait in my draft I wrote "## 无障碍" but that's a typo - "Development" should be "开发". Need fix! Let's review.

The final text in my answer draft at the end: "## 无障碍" should be "## 开发". Also "Gite" is not there. I need correct.

Also "这是刻意的" etc.

Need final answer with "## 开发". Also check "whole-page" translation: "一个 Whole-page Cloudflare 插屏" has "Whole-page" English. Better "一个整页 Cloudflare 插屏页".

Let's re-evaluate "console.log"? No.

Need correct "## 开发" not "无障碍".

Also "But an invalid URL?" No.

Let's craft final final.

We must output only translated text. No code fence.

Let's be precise: "the solve id" etc.

Let's adjust some wording:

  • "That is deliberate" = "这是有意为之" okay.

  • "Right for wiring this up" = "正适合用来搭建对接" perhaps better.

  • "never clears a real gate" = "永远不会清除真实关卡". Good.

Let's final now. Ensure no extra commentary.

Final answer.# solvegate-mcp

一个 MCP 服务器,让代理能够处理 Cloudflare Turnstile:检查页面是否携带 Turnstile,如果有就清除它。

三个工具。其中一个不需要账户。

工具

作用

需要密钥

inspect_page

获取一个 URL,并报告页面上是否有 Cloudflare Turnstile、其 sitekey、渲染方式、其 data-* 配置,以及页面是整页 WAF 验证还是一个小部件

solve_turnstile

清除一个 Turnstile 或 Turnstile WAF 验证,并返回一个 token

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_KEYinspect_page 依然可用。这是刻意为之:在你决定是否注册任何东西之前,你应该先看清这个服务器做了些什么。

solvegate.io 获取密钥。免费的 sk_test_ 沙箱密钥不需要银行卡,并会立刻返回一个确定性的 token —— 正适合用来搭建对接,而且它永远不会清除真实关卡。

为什么要有 inspect_page

使用求解器时最常犯的错,就是在应该先看一眼前就贸然调用。绝大多数情况都落在这三种情形:

  • 页面上是 reCAPTCHA 或 hCaptcha,而不是 Turnstile。 它们来自不同厂商、是不同的产品。这个服务器不解决它们,SolveGate 也不解决 —— inspect_page 会直接说出这一点,而不是让你从 422 错误里去发现。

  • 这是 WAF 验证,而不是一个小部件。 整页 Cloudflare 插屏页没有 data-sitekey,因为这种验证属于某个 zone 规则,而不是属于你所嵌入的小部件。页面上没有任何可读取的信息,门禁类型是 waf 而不是 turnstile

  • sitekey 是在加载后由脚本渲染出来的。 那它根本不在已提供的 HTML 里,工具会如实说明,而不是去猜。

检查是免费的,大约只需要一秒,而且很多时候给出的就是完整答案。

它不会告诉你什么

小部件模式。 Managed、non-interactive 和 invisible 都存储在拥有该 sitekey 的 Cloudflare 账户内的小部件上。页面本身只携带 key,所以任何工具都无法从源码中读出模式 —— 包括这个工具,也包括任何声称能做到的东西。

这对求解来说没有区别:所有三种模式最终都对应同一个请求。一个 sitekey、一个页面 URL,返回一个 token。

唯一的例外是 Cloudflare 官方文档里公开的五个虚拟 sitekey,Cloudflare 自己公布了这些小部件的方式。inspect_page 会报告这些 sitekey;如果在某页上发现其中一个,它会告诉你一个有用的信息:你看到的是 staging 构建,而不是生产环境。

配置

变量

默认值

作用

SOLVEGATE_API_KEY

你的密钥。sk_test_ 用于沙箱,sk_live_ 用于真实关卡。

SOLVEGATE_BASE_URL

https://api.solvegate.io

API 基础地址。

SOLVEGATE_SITE_URL

https://solvegate.io

inspect_page 运行的地方。

SOLVEGATE_TIMEOUT_MS

30000

每个请求的超时。

SOLVEGATE_MAX_WAIT_MS

60000

solve_turnstile 等待未决求解的时间。

密钥是从环境变量读取的,绝不会是工具参数 —— 工具参数对模型可见,并且会出现在对话记录中。

行为说明

求解在底层是异步的。 solve_turnstile 使用 async: true 创建求解并轮询它,而不是在整个尝试期间保持连接。代理的工具调用有一个它无法控制的超时;同步求解会让一个慢的关卡看起来像死掉的工具。这同时意味着,在这里超时会留给你一个 solve id:错误信息会指明它,get_solve 也会把这个已经计费的求解捞回来,而不是丢掉它。

错误是结果,不是异常。 每一次失败都会作为 isError 结果返回,并携带 SolveGate 自己的 error.code —— balance_emptyunknown_sitekeyrate_limitedforbidden_target。模型可以针对这些信息采取行动。而堆栈追踪对它毫无用处。

TOKEN 是一次性且短期的。 expiresAt 是 Unix 秒。超过这个时间后,Cloudflare 不再接受该 token,而 solve 记录也仅仅是一条记录。请在真正提交之时再请求 token。

在信任 token 之前,先检查 mode sk_test_ key 会返回 mode: "sandbox",而沙箱 token 无法清除真实关卡。这个字段存在的目的,就是让预发布配置里的测试 key 能响亮地失败,而不是无声地失败。

可接受的使用范围

只对你拥有或已获授权测试的资产进行求解。本工具是为了那些一直卡在验证上的端到端测试、针对你自有 staging 环境的 CI,以及针对你自有生产环境的监控而存在的。可接受使用条款 是更有约束力的版本;无论任何 agent 请求什么,位于拒绝列表上的目标都会返回 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 传输,而不是直接调用工具回调。这是有意的:一个在注册时被 SDK 拒绝的 schema,或者一次无关的对 stdout 的写入 —— 这会弄坏传输,因为 stdout 就是 传输 —— 只有真正用协议跟它对话时才会显现出来。

链接

MIT.

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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
    D
    maintenance
    Provides a real browser that bypasses bot detection (Cloudflare, Turnstile) for AI agents, enabling navigation, clicking, typing, screenshots, and data collection through MCP tools.
    71
    MIT

View all related MCP servers

Related MCP Connectors

  • Stealth scraping & search. Bypasses Cloudflare, DataDome & LinkedIn via Cyborg HITL approach.

  • Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.

  • The most accurate web access API. Stop getting blocked.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SolveGate/solvegate-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server