Skip to main content
The MCP server exposes your campaigns to AI clients that speak the Model Context Protocol — Claude, Claude Code, Cursor, and anything else supporting Streamable HTTP. Instead of writing API calls, you ask questions in plain language and the client picks the right tool.
“Which of my tracked prompts lost the most visibility this month, and what did ChatGPT actually say?”
It’s the same data as the External API, over a different transport, authenticated with the same personal API key.
Like the REST API, the MCP server is not read-only. It includes one write tool, create_prompt, which adds tracked prompts to a campaign. Any key that connects to MCP can use it — see Permissions and scope.

Before you start

You need an API key. If you already have one from the REST API it works here — the MCP server accepts the same tokens.
1

Create a key

In the app, go to Settings → API and choose Create key. Name it after the client you’re connecting, e.g. Claude Desktop.
2

Copy it once

The full key is shown only once, right after creation. You can’t view it again, only revoke it.
3

Copy your server URL

The same page shows your MCP Server URL under the MCP SERVER section:
Treat the key like a password. It grants read access to every campaign you own and the ability to add prompts to them.

Connect a client

The server is a Streamable HTTP MCP server and supports two ways to authenticate:
  • OAuth — you click “Connect”, sign in, and approve access. No key to copy. This is what browser-based clients such as claude.ai use, and it is the only option there, since they cannot send a static header.
  • Bearer token — an API key sent as Authorization: Bearer <your-key>. Used by clients you configure yourself: Claude Code, Claude Desktop, Cursor.
Go to Settings → Connectors → Add custom connector and enter the MCP server URL:
Leave the client id and secret blank — the connector registers itself automatically. You’ll be sent to AI Tracker to sign in (if you aren’t already) and asked to approve access, then returned to Claude with the connection live.
No API key is involved here. If you’re prompted for one, you’re on the bearer-token path — clear the field and use the URL alone.

Available tools

Start with list_campaigns to get a campaign uuid; every other tool takes one.

Adding prompts

create_prompt accepts a single prompt or a list. To add several at once, put one per line in text; numbered and bulleted markers are stripped for you, so you can paste a list straight out of a chat:
topic, location_code and tags apply to every prompt in the call.
string
required
Topic to file the prompts under. Matched case-insensitively against the campaign’s existing topics; created if there’s no match — so check your spelling, or you’ll end up with a near-duplicate topic.
string
default:"us"
Two-letter market code the prompts are tracked in, e.g. us, gb.
string[]
Up to 8 tags, max 24 characters each. Lowercased on save.
The same limits as the app’s Add prompt dialog apply:
  • 2,000 characters per prompt. Over-long ones are skipped and reported in the response; the rest of the batch is still created.
  • 50 prompts per call. Over that, the call is rejected and nothing is created.
  • The active-prompt cap. A campaign only tracks a limited number of active prompts. Anything past the cap is saved but left inactive — it won’t run until a slot frees up. The response returns remaining_slots so you can see where you stand.
A prompt that itself spans multiple lines would be split by the line-per-prompt rule. Pass a JSON array of strings instead — array elements are never split.

Permissions and scope

Every tool resolves campaigns through the key owner’s own campaigns, so a key can only ever reach data belonging to the user who created it. There is no way to widen that scope, and no tool that reaches another account’s data. Revoking a key in Settings → API immediately cuts off any client using it.

Rate limits

Two throttles apply, in this order: Exceeding either returns 429 Too Many Requests. An AI client exploring your data can be chatty — if you hit this, it’s usually a client looping over prompt runs rather than a genuine need for more throughput.

Troubleshooting

The key is missing, mistyped, or revoked. Check the header is exactly Authorization: Bearer <your-key> and that the key still appears in Settings → API. Keys can’t be viewed after creation — if you’ve lost it, create a new one and revoke the old.
Confirm the client is configured for Streamable HTTP, not stdio or SSE. A stdio-only entry connects to nothing.
The campaign_uuid doesn’t belong to your account, or it’s wrong. Call list_campaigns to get valid uuids — the tools deliberately don’t distinguish “doesn’t exist” from “isn’t yours”.
They were saved inactive because the campaign is at its active-prompt limit. Check remaining_slots in the response, then deactivate an existing prompt to free a slot. See Managing prompts.
Redirect URIs are restricted to an allow-list, which is what stops a rogue client registering an attacker-controlled callback. If you’re connecting a legitimate client that isn’t on it, contact support with the client name.
Check the campaign actually has results yet. A brand-new campaign has no prompt runs until its first daily run completes, and get_traffic returns nothing until an integration is connected.