Developer docs
MCP server
MonoRanks speaks the Model Context Protocol. Point an assistant at one URL and it can read your audits and act on them.
Endpoint
https://app.monoranks.com/api/mcp
Streamable HTTP over POST, JSON responses, no session to keep. Send a key as Authorization: Bearer mr_ws_… (a website key mr_site_… works too), or let the client sign you in with OAuth 2.1 (below). Scopes, the hourly limit (1,200 calls per key) and the key owner’s access are checked on every tool call, as for the REST API.
Connect
Claude Code
claude mcp add --transport http monoranks https://app.monoranks.com/api/mcp \
--header "Authorization: Bearer mr_ws_…"
Claude.ai and Claude Desktop: add the URL above as a custom connector (unverified: the menu names in those apps change often). Where the client lets you set a header, send the key as a bearer header; otherwise it signs you in with OAuth.
ChatGPT and other OAuth clients: add https://app.monoranks.com/api/mcp as an MCP server. Without a key, the endpoint answers 401 and points the client to /.well-known/oauth-protected-resource. The client registers itself (/api/oauth/register), sends you to sign in and approve access (/oauth/authorize, with PKCE), and gets its token from /api/oauth/token. It can only ask for the read scopes and issues:recheck; audits:run and actions:apply are never granted this way, so start_audit, the apply tools and update_outreach_target need a key. See API keys and scopes.
Tools
Read
| Tool | Does | Scope |
|---|---|---|
list_sites |
Websites the key covers, with ids | sites:read |
portfolio |
Every website in one call: scores and their change, issues, actions, last and next audit, and Search Console clicks (with search:read) |
sites:read |
site_summary |
Scores, last audit, open issues, WordPress access, how fresh each connection is | sites:read |
speed_results |
Speed per tested page: lab test and real-visitor data | sites:read |
audit_status |
The latest audits, or one audit by audit_id, with pages crawled and the page budget |
sites:read |
list_issues |
Issues, the same list as the Issues screen | issues:read |
issue_detail |
One issue with pages, evidence, explanation and suggested new values (100 at a time, suggestions_offset for more) |
issues:read |
list_actions |
Prioritized actions with estimated gain and how long each has been open | issues:read |
page_findings |
Findings for one page, by id or address | pages:read |
page_history |
What changed on one page from one audit or recheck to the next, by id or address | pages:read |
search_summary |
Search Console totals, top pages and queries | search:read |
search_rows |
Search Console rows for a date range, by query, page, query and page, or day (pass nextCursor back as cursor; CSV export is in the REST API only) |
search:read |
near_page_one |
Your query and page pairs sitting just off page one (positions 8 to 20 by default), most impressions first, with the extra clicks a top-3 position could bring | search:read |
topics |
The website’s pages grouped into topics, with clicks, top queries and whether each topic is strong, weak or gets no clicks | search:read |
analytics_pages |
Conversions and revenue per landing page from Google Analytics (GA4), next to Search Console clicks | analytics:read |
keywords |
Keywords as the Keywords screen lists them, with demand, position, opportunity and the relevance review; off-topic suggestions left out | search:read |
competitors |
The competitor set with a match score, the AI review of each suggestion, which ones drive gaps, shared keywords, keywords where they rank above you, strength and visibility | search:read |
competitor_gaps |
Each competitor’s position and yours per keyword (gaps, content, lost, lead). Each row also names the page where each competitor ranks. | search:read |
content_ideas |
The keyword gaps grouped into topics, most opportunity first: whether to write a new page or expand one, your pages already in the topic, the competitor pages that rank, and the top keywords | search:read |
backlinks |
The backlink summary and the referring domains of one view (all, new, lost, review, strong) | search:read |
list_outreach_targets |
Pages and sites worth asking for a link or a mention, ranked, with why and their status | search:read |
ai_visibility |
What AI assistants answered to your tracked questions, per week, with the pages each answer cites | ai:read |
answer_gaps |
Questions where AI answers name other websites but not yours | ai:read |
geo_access |
AI crawler access, llms.txt and entity signals from the last audit | ai:read |
llms_txt |
The live llms.txt and a ready-to-publish draft | ai:read |
ai_crawler_rules |
What robots.txt says to each AI crawler now | ai:read |
agentic_results |
Agentic browsing results with what to fix, or one re-run by job_id |
ai:read |
Act
| Tool | Does | Scope |
|---|---|---|
recheck |
Queue a recheck of an issue | issues:recheck |
run_agentic_check |
Re-run the Agentic browsing check for one page | issues:recheck |
start_audit |
Start a full audit now, with an optional page budget | audits:run |
apply |
Approve an action’s new SEO titles, descriptions, canonicals or noindex and write them to WordPress | actions:apply |
apply_llms_txt |
Approve a new llms.txt and write it to WordPress | actions:apply |
apply_ai_crawler_rules |
Approve allow or deny rules for AI crawlers and write them into robots.txt | actions:apply |
update_competitors |
Pick, dismiss or add a competitor; picking or adding looks up its keyword gaps within your data limit | actions:apply |
update_outreach_target |
Set the status (to contact, contacted, added, declined) and note of an outreach target | actions:apply |
Example conversation
“Which of my websites lost the most clicks this month, and what is the top action for it?”
The assistant calls portfolio once, picks the website with the biggest drop, then calls list_actions for it, and answers with the action and its estimated gain. If you say “apply it”, it reads the suggested values with issue_detail, calls apply, and the change shows up in the app’s activity with Undo.
Common questions
Which clients work?
Anything that supports MCP over Streamable HTTP: Claude Code, Claude.ai, Claude Desktop, ChatGPT (developer mode connectors), Cursor, Windsurf and others.
Can the assistant break my site?
Only three tools change your website: apply, apply_llms_txt and apply_ai_crawler_rules. They follow the same rules as the buttons in the app: connected WordPress websites only, the key owner recorded as approver, a check afterwards and Undo in the app for 30 days. recheck, run_agentic_check and start_audit only read your website again. update_outreach_target and update_competitors only change data inside MonoRanks: a target's status and note, or which competitors you follow.
Why does ChatGPT not need a key?
Clients that discover sign-in themselves use OAuth 2.1: they send you to sign in and approve access once. The token they receive stands for a workspace key with the read scopes and rechecks you approved, never audits or writes. It is listed and revocable under Settings → API and MCP.