For developers and AI agents
Use RankMeOff from Claude, Cursor, and Codex
RankMeOff runs a Model Context Protocol server at https://rankmeoff.com/mcp. Connect it to any MCP client and your agent can check indexing, verify backlinks, read your balance, and top up, using the same account and tokens as the web app.
Requirements
MCP access is included with any RankMeOff token pack. Create an MCP key from AI agents in your account (sign in or create an account first). Free diagnostic tools are available inside the app with a RankMeOff account; browse the tool descriptionsbefore creating an account.
Paste this into your AI agent
Sign in and create a key from AI agents first, then replace YOUR_RMO_KEY below with it before pasting this into Claude Code, Cursor, or any chat-based agent.
Connect the RankMeOff MCP server so you can use my RankMeOff account. Server URL: https://rankmeoff.com/mcp Transport: Streamable HTTP Auth header: Authorization: Bearer YOUR_RMO_KEY If you are Claude Code, run: claude mcp add --transport http rankmeoff https://rankmeoff.com/mcp --header "Authorization: Bearer YOUR_RMO_KEY" Otherwise add it to your MCP config file using the URL and header above. Then call the get_account tool and tell me my token balance to confirm it works. Rules: before any tool that spends tokens, call estimate_cost and ask me to confirm the amount. Never retry a failed spend automatically, and never open or pay a top-up link yourself.
Tools
Every spending tool requires a max_tokens budget. If the real cost is higher, nothing is charged and the tool returns a quote instead.
get_account
Token balance, this key's daily cap, and today's spend.
freeget_pricing
Live token costs and which paid products are enabled.
freeestimate_cost
Quote a job before running it.
freecheck_redirects / check_noindex / check_404 / check_5xx
Single-URL diagnostics, same checks as the free web tools.
freeextract_sitemap
Fetch and parse an XML sitemap or sitemap index.
freecreate_index_check
Check whether URLs are indexed on Google, Bing, or Yandex.
free to quote, then per URLcreate_backlink_check
Verify source URLs actually link to a target URL.
per donor URLcreate_indexing_task
Submit URLs for indexing (fetch-and-verify, or real IndexNow for key-file-verified domains).
per indexed URLget_task_status / get_task_report / list_tasks
Read back task progress and full reports.
freelist_domains / add_domain / verify_domain
Register a domain, return the exact file an agent should deploy, and verify the required IndexNow key file.
freecreate_topup_link
Get a Stripe checkout link for a token package, for you to open yourself.
freeSupported clients
Claude Code, Claude Desktop, Cursor, VS Code / Copilot, Codex, and Windsurf all support remote MCP servers over Streamable HTTP with a custom header today. Connector support for claude.ai and ChatGPT (OAuth) is coming in a later release. Exact setup snippets for each client, pre-filled with your key, are on the AI agents page once you are signed in.
Notifications
Checker and indexer reports settle in about 24h, and drip-fed or multi-day indexing tasks can take days. Instead of polling, turn on email and/or a webhook per MCP key from AI agents. Either fires once, right after a task created through that key finishes settling. Failed deliveries are retried.
A webhook (https only) receives a POST with this JSON body:
{
"event": "task.report_ready",
"task_id": "...",
"type": "checker" | "indexer" | "backlink",
"engine": "google" | "bing" | "yandex",
"title": "...",
"url_count": 10,
"summary": { "indexed": 8, "not_indexed": 1, "unknown": 1 },
"tokens_charged": 100,
"tokens_returned": 10,
"report_url": "https://rankmeoff.com/app/tasks?task=...",
"created_at": "2026-01-01T00:00:00.000Z"
}Each request carries an X-RankMeOff-Signature header: t=<unix seconds>,v1=<hex HMAC-SHA256>, signed over `${t}.${rawBody}` with the webhook secret shown once when you set the URL. Verify it before trusting the payload:
const crypto = require('node:crypto');
function verify(secret, header, rawBody) {
const parts = Object.fromEntries(
header.split(',').map((p) => p.split('=')),
);
const timestamp = Number(parts.t);
if (!Number.isSafeInteger(timestamp) ||
Math.abs(Date.now() / 1000 - timestamp) > 300 ||
!/^[0-9a-f]{64}$/.test(parts.v1 ?? '')) return false;
const expected = crypto
.createHmac('sha256', secret)
.update(`${parts.t}.${rawBody}`)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(parts.v1),
);
}A failed delivery retries with backoff and is marked dead after a handful of attempts; the last delivery status is shown per key on the AI agents page, which also has a "Send test" button.
How the agent should behave
The server tells every connecting agent, in its instructions, to quote a job with estimate_cost and confirm the amount with you before spending, never to retry a failed spend automatically, and never to open or pay a top-up link itself. A successful spend always returns the tokens charged and your new balance; a balance under 1,000 tokens (or under 20% of your last purchase) adds a warning your agent should pass along.
