RankOrg MCP
RankOrg researches your niche and builds topical authority with SEO/GEO optimized blogs.
Hosted MCP Server
npx add-mcp 'https://rankorg.com/api/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
Agent setup and copy prompt
Create a personal access token from Settings → API access (MCP), then choose your agent and copy the setup snippet and prompt.
Claude setup
Add RankOrg as a custom remote MCP connector. Claude automatically detects OAuth 2.0 and prompts you to authorize with one click.
https://rankorg.com/api/mcp
Use the RankOrg MCP server. First get my site context, then list my scheduled articles for the next 7 days as a concise list with title, publish date, status, slug, and article ID.
MCP quick start
- 1
Connect your AI agent
Addhttps://rankorg.com/api/mcpas a Remote MCP server in Claude or ChatGPT. They will automatically authenticate via secure OAuth 2.0. - 2
Or use a personal token for CLI tools
For tools like Codex, Cursor, or scripts, generate a personal token at Settings → API access (MCP) and provide it viaAuthorization: Bearer rankorg_.... - 3
Ask in plain English
Try “What content is scheduled today?” or “Research keywords and write my next article.”
Authentication
RankOrg supports standard OAuth 2.0 (RFC 8414, RFC 7591 Dynamic Client Registration, and PKCE) for AI assistant clients (Claude, ChatGPT), as well as Personal Access Tokens for headless CLI environments.
- OAuth 2.0 (AI Connectors): Simply enter
https://rankorg.com/api/mcpin your AI client. Discovery happens automatically via/.well-known/oauth-protected-resource. - Bearer Header (CLI & Scripts):
Authorization: Bearer rankorg_...orAuthorization: Bearer mcp_at_... - URL Query (Legacy):
https://rankorg.com/api/mcp?token=rankorg_...
POST https://rankorg.com/api/mcp
Authorization: Bearer mcp_at_xxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
Accept: application/json, text/event-stream
MCP tools
read tools inspect your account. write tools change content, schedules, or publishing state.
getSiteContext read
Returns the user's site (domains) and business/niche profile. Agents should call this first to ground everything else.
Say: "What business is my RankOrg account set up for?"
listContent read
Lists the user's articles. Use filter='today' to see what publishes today, 'scheduled' for upcoming, 'published' for live posts, or 'all'.
| Param | Type | Notes |
|---|---|---|
| filter | "today" | "scheduled" | "published" | "all" | Which slice of content to return. Defaults to 'all'. |
Say: "What content is scheduled to publish today?"
getContent read
Returns a single article's full HTML content, title, meta description, status and schedule by id. Call before editing so you have the current draft.
| Param | Type | Notes |
|---|---|---|
| id * | string | The article id. |
Say: "Show me the draft titled '…' so I can review it."
getSearchPerformance read
Returns the site's Google Search Console performance — clicks, impressions, CTR, average position, top pages, top queries, and a daily trend. Reports a clear next step when Search Console isn't connected yet.
Say: "How is my content performing in Google search?"
getTopicalMap read
Returns the topical map — clusters → topics → subtopics → keywords with demand (volume/CPC), keyword difficulty, rankability scores, and which keywords already have scheduled or published articles.
Say: "What keywords are we targeting, and which are still open?"
updateContent write
Edits an article's title, HTML content, and meta description. The title cannot change once an article is published (SEO stability).
| Param | Type | Notes |
|---|---|---|
| id * | string | The article id. |
| title * | string | New title. |
| content * | string | Full article body as HTML. |
| metaDescription * | string | New meta description. |
Say: "Tighten the intro of that draft and update the meta description."
researchKeywords write
Generates a keyword profile — head keywords plus specific long-tail search phrases — from the user's business profile, and saves it to their account.
Say: "Research keywords for my business."
generateArticle write
Generates the next SEO article, picking the highest-priority keyword from the topical map and scheduling it into the next open publish slot.
Say: "Write and schedule my next article."
publishContent write
Publishes a scheduled article live immediately. This is public and irreversible-ish — only call after the user explicitly confirms.
| Param | Type | Notes |
|---|---|---|
| id * | string | The article id to publish now. |
Say: "Publish that article now."
rescheduleContent write
Moves a planned article to a different future date, or skips it to free the day. Only un-generated planned days (DRAFT pre-plan rows) can be moved or skipped; moving onto another planned day swaps the two.
| Param | Type | Notes |
|---|---|---|
| id * | string | The planned article id. |
| action * | "move" | "skip" | Move to a new date, or skip the day. |
| newDate | string | Required for 'move': new publish date (YYYY-MM-DD), must be in the future. |
Say: "Move tomorrow's post to Friday."
mergeContent write
Consolidates duplicate or overlapping published posts. The primary survives; each merged post becomes a permanent 308 redirect to it, so the old URLs keep passing SEO equity to the survivor.
| Param | Type | Notes |
|---|---|---|
| primaryId * | string | The post to keep (must be published). |
| mergedIds * | string[] | Posts to merge into the primary (become redirects). |
Say: "These two posts overlap — keep the stronger one and redirect the other."
unmergeContent write
Reverses a merge: restores a merged post to published so its URL serves content again instead of redirecting.
| Param | Type | Notes |
|---|---|---|
| id * | string | The merged article id to restore. |
Say: "Undo that merge — bring the old post back."