Docs · MCP server

Ask Claude, Cursor and other AI assistants about your SEO

serp.ac runs a remote Model Context Protocol (MCP) server. Connect it once and your assistant can answer questions like “which keywords dropped this week?”, “how often does ChatGPT recommend us?” or “which paid links have issues?” straight from your serp.ac data — and, if you allow it, add keywords, prompts and links for you.

Server URL
https://serp.ac/api/mcp
Authentication
Authorization: Bearer sk_live_…
Transport
Streamable HTTP (stateless, JSON)

1. Create an API key

In serp.ac open Settings → API and create a key (only the account owner and admins can). Copy it — it is shown once. The MCP server uses the same keys, rate limit (120 requests per minute per key) and quotas as the REST API. Each key gives full access to the account that created it, so keep it secret and revoke it on the same page if it leaks.

2. Connect Claude

Claude (claude.ai and the Claude apps) — custom connector

Go to Settings → Connectors → Add custom connector, name it serp.ac and use the server URL https://serp.ac/api/mcp. The server authenticates every request with your API key sent as Authorization: Bearer sk_live_…; if the connector dialog on your plan has no way to send that header, use the Claude Desktop configuration below instead.

Claude Desktop — config file

Open Settings → Developer → Edit config and add the server to claude_desktop_config.json. It runs the mcp-remote bridge (requires Node.js), which forwards your key as a header. Restart Claude Desktop afterwards.

{
  "mcpServers": {
    "serp-ac": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://serp.ac/api/mcp", "--header", "Authorization:${SERP_AC_AUTH}"],
      "env": { "SERP_AC_AUTH": "Bearer sk_live_..." }
    }
  }
}

Claude Code

claude mcp add --transport http serp-ac https://serp.ac/api/mcp \
  --header "Authorization: Bearer sk_live_..."

3. Connect Cursor and other clients

Cursor: add the server to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json in a project, then enable it under Settings → MCP.

{
  "mcpServers": {
    "serp-ac": {
      "url": "https://serp.ac/api/mcp",
      "headers": { "Authorization": "Bearer sk_live_..." }
    }
  }
}

Any other MCP client (ChatGPT, VS Code, Windsurf, your own agent) works the same way as long as it supports the Streamable HTTP transport and can send the Authorization header. Clients that only support stdio can use the mcp-remote bridge shown above.

Quick check from a terminal:

curl https://serp.ac/api/mcp \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Read-only mode

Tools marked Changes data add things to your account and tools marked Uses quota spend your monthly quotas; assistants are told to ask you first. To expose only the read tools, connect with https://serp.ac/api/mcp?readonly=1. Read-only mode is a setting of the connection, not of the key — a key always carries the account's full rights.

Tools

Every tool answers with a short summary plus the same data as structured JSON. Lists are capped (up to 200 rows) and only ever contain your own account's data. Projects can be referred to by id or by domain.

  • list_projectsRead

    List the serp.ac projects (websites) in this account with their ids, domains and how many keywords, AI prompts and purchased links each tracks. Call this first to get project ids.

  • get_rankingsRead

    Google rankings of a project's tracked keywords: current position, change since the previous check (positive = moved up), ranking URL, whether a Google AI Overview is shown and cites the site, and last check time. Optional keyword text filter and device filter.

  • get_ai_visibilityRead

    AI visibility of a project in ChatGPT, Perplexity, Gemini, Claude and Google AI Mode: share of answers that mention the brand, citation rate, average position, per-engine numbers, a per-prompt × engine matrix, top cited source domains, share of voice and other brands the AI assistants recommend.

  • get_backlinks_summaryRead

    Backlink overview of a project: total backlinks and referring domains, domain rank, dofollow share, new links in the last 30 days, lost links and the strongest referring domains.

  • list_purchased_linksRead

    Purchased (paid) links tracked in Link management: status (pending, active, issue, lost, expired, cancelled = paused), detected issues, price, billing cycle, next payment / renewal date and vendor, plus payments due in the next 30 days. All projects unless a project is given.

  • get_index_jobRead

    Status of an index check job started with check_index, with the index status of each URL (indexed, not_indexed, queued, error).

  • get_usageRead

    The account's plan and subscription status, plan limits with current usage (projects, keywords, AI prompts, links) and the remaining monthly quotas (index submits, index checks, keyword data lookups).

  • get_maps_rankingsRead

    Google Maps rank tracking (local geo-grid) of a project: without campaign, every Maps campaign with its latest local presence score (0–100), top-10 coverage and average rank; with campaign (id or keyword text), the latest scan's rank at every grid point, scan history, outranking competitors and the local pack.

  • track_keywordsChanges data

    starts tracking new keywords' Google rankings in a project. Each new keyword counts against the plan's SERP keyword limit; keywords already tracked are left unchanged. Ask the user before adding many keywords.

  • add_ai_promptsChanges data

    adds prompts (questions people ask AI assistants) to a project's AI visibility tracking; they then run on a schedule. Each new prompt counts against the plan's AI prompt limit; prompts already tracked are left unchanged.

  • add_purchased_linkChanges data

    adds a purchased (paid) link to a project's Link management so serp.ac checks it daily and reminds about payments. Counts against the plan's tracked-link limit. Fails with already_tracked if the same source → target link exists.

  • check_indexUses quota

    starts a job that checks whether URLs are indexed by Google. Each URL uses 1 index check from the monthly quota (then purchased packs); nothing is charged if there isn't enough. Returns a job id — call get_index_job for the results.

  • get_keyword_dataUses quota

    search volume, CPC, competition, keyword difficulty, search intent and 12-month trend per keyword. Each keyword not already cached counts against the account's paid monthly keyword lookup quota (cached keywords are free); check get_usage first for large lists.

Limits and errors

  • Write tools follow your plan exactly like the dashboard and the REST API: keyword, prompt and link limits, AI engines included in the plan, and an active plan or trial.
  • check_index uses 1 index check per URL from the monthly quota, then from packs; get_keyword_data uses the monthly keyword lookup quota for keywords that aren't cached. Nothing is charged when the quota is short.
  • Problems with a call (unknown project, invalid arguments, limit reached) come back as a tool error the assistant can read. A missing or revoked key returns HTTP 401, a suspended account 403 and too many requests 429.

Automating without an AI assistant? See the REST API reference under Settings → API.