cloro

dev.cloroPublished by cloro.devOfficial publisherv0.5.0Updated Nov 6, 2026

Scrape AI answer engines and Google Search/News with country and state-level geo-targeting.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingAI & ML

Overview

AI-generated overview

cloro scrapes ChatGPT, Gemini, Google AI Mode, Google Search and Google News with country and state geo-targeting, returning answers and cited sources.

What you can do
  • Query AI answer engines: send a prompt to ChatGPT, Gemini or Google AI Mode from a chosen country and get the answer with cited sources.
  • Run Google searches and news searches: organic results, AI Overview and People-Also-Ask answers, with desktop or mobile emulation and paging.
  • Resolve Google redirect links: turn an empty or goto link from a result into its destination URL.
  • Look up targeting options: list supported country codes and state codes, optionally per engine.
When to use it
Useful for AI visibility and brand monitoring, comparing how different answer engines respond to the same prompt in different markets, or gathering geo-targeted Google search and news results for research.
Requirements
Remote endpoint at mcp.cloro.dev over Streamable HTTP, or a self-hosted Node.js build over stdio or HTTP. Needs a cloro account and either OAuth sign-in or a cloro API key, passed as an Authorization Bearer header, in the URL path, or via CLORO_API_KEY for stdio. Calls consume paid credits.
Before you install
Every scrape call spends credits from the organization that pays; results report credits charged and remaining. API keys placed in the URL path can leak through logs, so prefer the Authorization header or OAuth. Sync calls can wait up to about five minutes and time out at 320 seconds. The server forwards your credential to api.cloro.dev.

Installation

In SourceWeft

  1. Open cloro in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/dev.cloro%2Fcloro/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "cloro": {
      "type": "http",
      "url": "https://mcp.cloro.dev/mcp"
    }
  }
}

README

cloro MCP Server

A Model Context Protocol (MCP) server for cloro, the LLM scraping API that includes a Google SERP API. It gives Claude, Codex, Cursor and any MCP client answers from ChatGPT, Gemini, Google AI Mode and Google AI Overview, plus Google web search and Google News results. Ask your agent "compare Google's top results for best LLM scraping API with ChatGPT's answer" and it calls cloro and reasons over the parsed results and cited sources.

Runs hosted at mcp.cloro.dev, or locally over stdio.

How do you connect an agent to the cloro MCP server?

In Claude, you sign in with OAuth and do not need a key:

  1. Go to Customize → Connectors and select Add custom connector.
  2. Enter https://mcp.cloro.dev/mcp. Under Authentication, choose Sign in when needed.
  3. Ask Claude to use a cloro tool. Sign in to cloro and select the organization whose credits pay for the calls.

Other clients use a cloro API key from the dashboard. The hosted server speaks Streamable HTTP. Put the key in the URL path so it works in clients that cannot set custom headers:

json
{  "mcpServers": {    "cloro": {      "type": "http",      "url": "https://mcp.cloro.dev/YOUR_CLORO_API_KEY/mcp"    }  }}

If your client can set headers, use https://mcp.cloro.dev/mcp with Authorization: Bearer YOUR_CLORO_API_KEY. In Claude Code:

bash
claude mcp add --transport http cloro https://mcp.cloro.dev/YOUR_CLORO_API_KEY/mcp

In Cursor

This repo is also a Cursor plugin. Install it from the Cursor marketplace, or point Cursor at the repo, and Cursor prompts for one variable:

VariableValue
CLORO_API_KEYYour key from the dashboard

Cursor stores the key on its side and sends it as Authorization: Bearer, so the key stays out of the URL and out of the repo. The manifest is .cursor-plugin/plugin.json and the server definition is mcp.json.

Running it yourself

bash
npm installnpm run buildMCP_TRANSPORT=stdio CLORO_API_KEY=your_key node dist/index.js

MCP_TRANSPORT is http (default) or stdio. In stdio mode the client spawns the process and the key comes from CLORO_API_KEY; in http mode keys arrive per request and no key is configured on the server. PORT defaults to 8095 and CLORO_API_URL to https://api.cloro.dev.

OAuth is off unless you set CLERK_ISSUER. The hosted server sets it to https://clerk.cloro.dev. api.cloro.dev accepts only tokens from that issuer, so a self-hosted server that forwards to it must use the same value. MCP_PUBLIC_URL (default https://mcp.cloro.dev) sets the resource URL in the protected resource metadata.

What tools does it expose?

ToolEndpoint
scrape_chatgptPOST /v1/monitor/chatgpt
scrape_geminiPOST /v1/monitor/gemini
scrape_google_ai_modePOST /v1/monitor/aimode
scrape_googlePOST /v1/monitor/google
scrape_google_newsPOST /v1/monitor/google/news
resolve_google_redirectPOST /v1/monitor/google/goto
list_countriesGET /v1/countries
list_statesGET /v1/states

The assistant tools take a prompt and a country (ISO 3166-1 alpha-2), plus an optional state for US state-level targeting. The Google tools take gl for the result geography and an optional hl for the interface language; country still works as a deprecated alias for gl. scrape_google_ai_mode targets sub-country with location or uule rather than state. scrape_google runs either from a query plus gl, or from a complete google.com/search URL that carries the query and pagination itself, and accepts include.aioverview for Google's AI Overview. Every tool takes an optional include object for heavier payload fields; leave it unset for the leanest response.

A Google result link can come back empty, or as a google.com/goto URL, with a redirectLink beside it. Pass the redirectLink to resolve_google_redirect to get the destination.

There is no Grok tool. Grok is discontinued: grok.com shows a sign-up wall to logged-out visitors, and the cloro API rejects Grok calls with a 400 (MODEL_UNAVAILABLE).

There are no Copilot or Perplexity tools. Both are discontinued: they block access for logged-out sessions, and the cloro API rejects their calls with a 400 (MODEL_UNAVAILABLE). These calls cost no credits.

How it works

The server holds no business logic and no secrets. Each request forwards the caller's own credential, an API key or an OAuth access token, to api.cloro.dev as a Bearer token, so authentication, credit billing, rate limiting and concurrency are all enforced by the API rather than here. In http mode every POST builds a fresh server and transport bound to that caller's credential, which is why one deployment serves everyone with no session state.

initialize and tools/list answer without a credential, so a client can list the tools before sign-in. The first tools/call without one returns 401 with a WWW-Authenticate header that points at /.well-known/oauth-protected-resource/mcp. An OAuth client reads the authorization server from there and runs the flow. The server checks a token's signature against the issuer's public JWKS (code in src/oauth-tokens/), so it needs no Clerk secret.

Tool input schemas are the same zod schemas the API validates with, vendored into src/schemas/ from cloro's backend. They are copied rather than imported because that package is not published. The API reference is authoritative if the two ever disagree.

FAQ

Do I need to self-host this?

No. mcp.cloro.dev is hosted and is the path most people should take. This repo exists so you can read what runs, and self-host if your setup calls for it.

Does it cost credits?

Yes. The scrape tools call the sync API, so each call costs the API rate plus a 2-credit sync surcharge. For example, a ChatGPT call costs 7 credits (5 + 2). Each tool description states its cost, and each result returns the credits charged and remaining. resolve_google_redirect costs 1 credit, with no surcharge. list_countries and list_states read fixed reference lists and charge nothing. See pricing.

Why is my API key in the URL?

Because several MCP clients cannot set custom headers. If yours can, use the Authorization header form instead and keep the key out of the path. If your client supports OAuth, use that and there is no key at all. The URL path accepts API keys only, never OAuth tokens.

What is the request timeout?

320 seconds. Sync scrapes can take up to five minutes server-side, so the client budget leaves headroom. For long-running batches use the async task API rather than MCP.

Are there agent skills for cloro?

Yes. cloro-dev/skills has one skill per surface (ChatGPT, Gemini, Google AI Mode, Google AI Overview, Google Search, Google News) and skills for SERP research, LLM answer monitoring and AI visibility tracking. Install them with npx skills add cloro-dev/skills. The skills tell the agent which tool or endpoint to call, what it costs, and how to read the result. They work with this server or with the REST API.

Learn more

License

MIT. See LICENSE.

Source: README.md at commit 6baf0df

Tools

8

scrape_chatgpt

Scrape ChatGPT

Submit a prompt to ChatGPT from a chosen country (and optionally US state) and return the full answer: text, cited sources, and optionally markdown, search queries, shopping results, and ads. Use this to see how ChatGPT answers a prompt and which brands/sources it mentions. Costs 7 credits (5 base + 2 sync surcharge); any of include.rawResponse, searchQueries, ads or shopping adds 2 once; include.productDetails adds 2 more; each prompt after the first adds 1; a state adds 2.

ParametersstatelegacypromptrequiredcountryrequiredincludedisableWebSearch

scrape_gemini

Scrape Google Gemini

Submit a prompt to Google Gemini from a chosen country (and optionally US state) and return the answer with cited sources. Use this to see how Google Gemini answers a prompt and which brands/sources it mentions. Costs 6 credits (4 base + 2 sync surcharge); a state adds 2.

Parametersstatepromptrequiredcountryrequiredinclude

scrape_google_ai_mode

Scrape Google AI Mode

Submit a prompt to Google AI Mode from a chosen country and return the AI answer with cited sources. Supports location or UULE targeting and desktop/mobile emulation. Costs 6 credits (4 base + 2 sync surcharge).

Parametersglhluuledevicepromptrequiredcountryincludelocation

scrape_google

Scrape Google Search

Run a Google search from a chosen country and return organic results, with optional AI Overview extraction (include.aioverview) and People-Also-Ask AI answers (include.paaAioverview). Two modes: structured (query + gl, with optional location/uule/pages) or url (a complete google.com/search URL that owns query, location, and pagination). Supports desktop, mobile, iOS, and Android emulation and multi-page results. A result link can come back empty with a redirectLink beside it; pass the redirectLink to resolve_google_redirect to get the destination. Costs 5 credits (3 base + 2 sync surcharge); include.aioverview and/or include.paaAioverview add 2 once; each page after the first adds 2.

Parametersglhlurluulepagesquerydevicecountryincludelocation

scrape_google_news

Scrape Google News

Run a Google News search from a chosen country and return news results. Supports desktop, mobile, iOS, and Android emulation and multi-page results. Costs 5 credits (3 base + 2 sync surcharge); each page after the first adds 2.

Parametersglhlpagesqueryrequireddevicecountryinclude

resolve_google_redirect

Resolve a Google redirect link

Resolve one Google redirect link to its destination URL. Use it when a link or url field from scrape_google, scrape_google_news or scrape_google_ai_mode is empty, missing, or a google.com/goto URL: pass that result's redirectLink. Returns { url }. A link that does not resolve returns a 502; retry it later. Costs 1 credit, with no sync surcharge, and only when the destination is returned.

Parametersurlrequired

list_countries

List supported countries

List the ISO 3166-1 alpha-2 country codes supported for geo-targeting. Pass a model to get the codes available for that specific engine (some engines block certain countries).

Parametersmodel

list_states

List states for a country

List the state codes available for state-level geo-targeting in a country (used as the "state" parameter on the scrape tools). Only countries with state-level targeting are accepted.

Parameterscountryrequired

Version history

4
  1. v0.5.0LatestNov 6, 2026
  2. v0.4.0Nov 3, 2026
  3. v0.2.0Sep 29, 2026
  4. v0.1.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts