Skip to main content
The server is remote. There’s nothing to install and nothing to run locally — you point your client at one URL and pass your API key as a bearer token.
1

Create an API key

Open Settings and find the API keys card, below two-factor and your active sessions. Select Create API key and give it a name you’ll recognise later.The full key is shown once, at creation. FixAEO stores only a SHA-256 hash of it, so nobody — including support — can read it back. Copy it somewhere safe before you close the dialog. Keys start with fixaeo_.How many active keys you can hold depends on your plan: one on Free, three on Lite and Growth, fifty on Enterprise. Revoking a key frees the slot.
2

Add the server to your client

Pick your client below, paste the config, restart the client.
3

Check that it worked

Ask your assistant: “list my brands in FixAEO”. You should get back your brands with their slugs. That slug is the input to every brand-specific tool, so it’s the right first call anyway.

Client configuration

Claude Code speaks HTTP natively. The command above writes the JSON block for you; add --scope project if you’d rather commit it to a project .mcp.json than keep it local. Claude Desktop needs the mcp-remote bridge, which runs through npx and needs Node installed. FixAEO’s server authenticates with a bearer header and doesn’t implement OAuth, so the built-in connector flow has no way to send your key. Note the header value has no space in the args array — some clients mangle spaces there, which is why the token lives in env instead. Config file lives at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS. Cursor reads ~/.cursor/mcp.json for every project, or .cursor/mcp.json for one. Cursor also expands ${env:VAR} inside header values, so you can keep the key out of the file.
Treat the key like a password. It reads every brand, mention, citation, and Search Console figure in your account. If a config file with a key in it is going into git, use the environment-variable form instead.

Why does the server look unreachable?

Almost always the plan. The paid gate runs before the MCP protocol does, so a free account gets a 403 on the handshake itself — your client reports “failed to connect” rather than “connected with zero tools”.
The header didn’t arrive. On Claude Desktop this usually means the mcp-remote args are malformed. On Cursor, check that headers sits inside the server object, next to url.
The key is wrong, or it’s been revoked. Keys are shown once, so a truncated copy-paste is the common cause. Create a fresh one in Settings and swap it in.
Exactly what it says. This also fires if a subscription lapsed: your effective plan drops back to Free, and MCP goes with it. The public REST API keeps working on Free.
Your client tried to send several calls in one HTTP request. The server rejects batches on purpose, so one request can never fan out into several database reads. Turn batching off in the client.
The public surface allows 120 requests a minute per IP, shared between the REST API and MCP. The response carries a Retry-After header. Normal conversational use never comes close.
Each call gets a 30-second budget. If a wide query hits it, narrow the window — ask for 7d instead of 90d, or filter to one engine.