Skip to content

MCP server

SerpResult is also a remote MCP server, so an AI client can run a live search and read back the same JSON the REST API returns. There is one endpoint, POST https://api.serpresult.com/mcp, and one tool, serp_search. The transport is Streamable HTTP and stateless: nothing to install, nothing to run locally, no package to keep up to date. Point a client at the URL and it discovers everything else.

https://api.serpresult.com/mcp

The dashboard page at https://app.serpresult.com/dashboard/developers/mcp has the same setup snippets with your key filled in, and the Connected apps list.

Two ways in, and a reader picks one. Sign in for a personal client; use a key for a committed config or a server.

Sign in API key
How The client discovers OAuth from the endpoint and opens the browser. You approve once, scope search. Authorization: Bearer sk_live_… or sk_test_…, the same key you use for HTTP. See Authentication.
Fits claude.ai, Claude Desktop, ChatGPT, Claude Code on your own machine. A .mcp.json checked into a repo, a shared Cursor or Codex config, a server-side agent.
Lifetime Access tokens last 1 hour and refresh silently for 30 days. Until the key is rotated or revoked.
Revoke Connected apps in the dashboard. Revoke the key under Developers → API Keys.

A connection made by signing in draws credits straight from your account and never creates a key, so nothing shows up under API Keys for it.

  1. Open Customize → Connectors and press Add custom connector.

  2. Paste https://api.serpresult.com/mcp as the URL and press Connect.

  3. Sign in to SerpResult in the window that opens and approve the connection.

An API key works here too, through the request-header option, but that option is an organisation-limited beta. Its value must include the literal Bearer prefix: Bearer sk_live_…, not the bare key.

The tool takes the GET /v1/query parameters as its arguments and answers that endpoint’s JSON response verbatim: once as structuredContent, and once more as pretty-printed text so a client that only reads text still gets the whole thing. The response shape is documented on the endpoint page; the countries geo accepts are on Targets & geo.

Argument Type Default Notes
query string required The search terms, 1 to 400 characters.
target string google_search Any target on Targets & geo.
geo string us ISO 3166-1 alpha-2, one of the 193 supported countries.
locale string from geo Overrides the country’s default locale.
page integer 1 1 to 5 where the target supports paging; the others serve page 1 only.
num integer 10 1 to 20. duckduckgo_search and yahoo_search cap at 10.
safe string off off, moderate, strict.

The per-target table on Targets & geo says which target takes which page, num and safe values; a combination the target cannot serve is refused, not silently ignored.

Every serp_search call costs 1 credit, exactly like a GET /v1/query. The tool description tells the model so, which is why a well-behaved client searches once per question rather than re-running variations.

Calls made with an API key share that key’s per-minute bucket with its HTTP traffic: an MCP call and a GET /v1/query on the same key draw on the same counter, at the key’s own limit. An app connected by signing in gets 60 calls a minute per account. Rate limits has the full table.

Argument and upstream failures come back as tool results carrying the same error envelope as HTTP: invalid_request, unsupported_geo, unsupported_parameter, upstream_error, upstream_timeout. The two exceptions are 401 and 429, which are answered at the HTTP level and so show up in a client as a connection or transport failure rather than as a tool result.

  • 401 — the credential is missing or wrong. On claude.ai the header value must start with Bearer ; pasting the bare key fails.
  • “Couldn’t reach the MCP server” while signing in — that is OAuth discovery failing. Check that https://api.serpresult.com/.well-known/oauth-protected-resource/mcp loads.
  • A connection error right after a burst of searches — that is the 429 rate limit. MCP clients render it as a transport failure, not as a tool error; wait a minute and retry.
  • A result starting with unsupported_geo — a bad argument, not an outage. The refusal lists every supported code. See Errors.
  • GET on the endpoint returns 405 — deliberate. The transport is POST-only, so a browser opening the URL gets 405 with Allow: POST.

SerpResult is being listed in the Official MCP Registry as com.serpresult/serp-search, the Claude Connectors Directory and the ChatGPT app directory; until a listing is live, connect with the URL above.