Skip to content
RankX AI
RankX AI Docs
MCP server

SEO MCP server for Claude and ChatGPT

Connect Claude or ChatGPT to RankX AI over MCP and ask about your AI visibility, rankings and Search Console data. Every write needs a scope you approve.

The RankX AI MCP server connects Claude, ChatGPT, Cursor and other MCP clients to your RankX AI account, with 100 tools that read and act on your AI visibility, rankings, AI Overviews, Search Console, Google Analytics and site audits. Reading is free, a tool that spends credits quotes its price first, and every write needs a scope you grant.

The endpoint is POST /api/mcp on the RankX AI app. Connect an AI assistant to it and you can ask for your own data in words: which prompts you are invisible on, which competitors take the answers instead, what your Search Console traffic did last month, what the audit found, and what to do about it. It can also write, spend and publish, with your permission and never without it.

This is RankX AI's programmatic interface, built as a tool surface an assistant can drive end to end, so a script, an IDE and a chat client all reach the same tools under the same safeguards. For the whole surface in use, the blog walks through running a visibility audit from inside Claude.

The 60-second version

Create a connection

Open MCP in RankX AI's settings. On an agency account it is under Agency Admin; on a direct account it is in Settings. Either way it is owner-only.

You have two ways in, and the right one depends on your client. Sign in with OAuth from a client that supports it, or issue a personal access token for one that does not. The table below says which is which.

Point your client at the endpoint

https://app.rankxai.com/api/mcp

Each client wants that in a slightly different place, and the per-client pages give you the exact block to paste.

Ask for something

"List my websites, then show me the AI visibility for the first one over the last 30 days, broken down by assistant."

The assistant will call list_projects first, because every other tool takes an id it returns. That is the one convention worth knowing before you start.

Which connection method for which client

Start here. Picking wrong is the most common way to lose an hour.

ClientHow it connectsPage
Claude Desktop, Claude WebOAuth, through the Connectors panelClaude Desktop
ChatGPTOAuth, through its connector settingsChatGPT
Claude CodeEither. One command line, with or without a tokenClaude Code
Cursor, VS Code, WindsurfA token in that editor's own config fileEditors
Scripts, CI, automationA token. The only supported pathScripts and CI

Why scripts use a token. RankX AI's authorisation server issues tokens through the authorisation-code flow with PKCE, and renews them through a rotating refresh grant. Those are the only two, and the second can only ever renew what the first issued: there is no client-credentials grant, so every OAuth credential starts with a human at a browser. A cron job has no browser, which is why token authentication is a first-class path rather than a legacy one.

Claude Desktop's config file cannot take an HTTP entry with headers. That file starts local programs only, so such an entry is silently ignored and the app reports that some servers failed to load. Use the Connectors panel, or the bridge documented on the Claude Desktop page.

What you can ask the RankX AI MCP server

The RankX AI MCP server answers from your website's measured data, not from the assistant's general knowledge. Six prompts that work, and the tools each one calls:

AskTools it callsCost
"Which of my tracked prompts have the lowest mention rate in ChatGPT over the last 30 days?"list_prompts, get_prompt_visibilityFree
"Compare my Search Console clicks for the last 28 days with the 28 before, and show which pages earned them."get_search_console_trend, get_search_console_performanceFree
"Is my pricing page indexed? If not, what reason does Google give?"inspect_urlFree
"Which of my tracked keywords showed an AI Overview, and which domains did it cite?"get_ai_overview_presence, get_aio_citationsFree
"Run a full site audit. Tell me the cost first, then group the issues by severity."start_site_audit, get_site_audit_status, get_site_audit_issuesCredits, quoted before the call
"Check which SEO fields my WordPress site prints, then dry-run new titles and meta descriptions for the three weakest pages."wp_get_seo_coverage, wp_update_seoFree, needs the publish scope

More, each with the sequence of calls and what to watch for, are on the examples page.

What the server exposes

ToolScopeInputs
get_ai_conversionsreaddays, projectId
get_ai_overview_presencereaddays, projectId
get_aio_citationsreaddays, limit, projectId
get_analytics_breakdownreaddays, dimension, limit, projectId
get_analytics_trafficreaddays, dimension, limit, projectId
get_article_runreadbriefId, projectId
get_bing_crawl_issuesreadflag, limit, projectId
get_bing_drilldownreaddimension, limit, projectId, subject
get_bing_keyword_ideasreadcountry, keyword, language, limit, projectId
get_bing_performancereaddimension, limit, projectId, weeks
get_brand_profilereadprojectId
get_content_briefreadbriefId, projectId
get_content_itemreaditemId, projectId
get_credit_balancereadnone
get_credit_usagereaddays, groupBy
get_google_integration_statusreadprojectId
get_index_coveragereadlimit, offset, projectId, view
get_keyword_trends_statusreadcacheKey, projectId, taskId
get_page_optimisationreadprojectId, runId
get_product_shopping_detailreadcatalogItemId, projectId
get_projectreadprojectId
get_prompt_visibilityreaddays, projectId
get_publication_statusreaditemId, projectId
get_rank_trackingreadincludeInactive, limit, projectId
get_realtime_visitorsreaddimension, limit, projectId
get_search_console_drilldownreaddays, limit, mode, projectId, target
get_search_console_opportunitiesreaddays, projectId, view
get_search_console_performancereaddays, dimension, limit, projectId
get_search_console_trendreaddays, projectId
get_shopping_prompt_detailreadprojectId, promptId
get_shopping_visibilityreadprojectId
get_site_audit_issuesreadlimit, projectId
get_site_audit_statusreadjobId, projectId
get_site_timelinereaddays, limit, projectId, sources
inspect_urlreadprojectId, url
list_competitorsreadincludeInactive, projectId
list_content_itemsreadlimit, projectId, status
list_page_opportunitiesreadlimit, projectId
list_projectsreadnone
list_prompt_candidatesreadlimit, projectId, status
list_promptsreadincludeInactive, kind, limit, projectId
list_shopping_competitorsreadlimit, projectId
list_sitemapsreadprojectId
list_tasksreadincludeDismissed, limit, projectId, status
list_topic_clustersreadprojectId
approve_content_itemwriteitemId, projectId
create_content_briefwritechannel, primaryKeyword, projectId, supportingKeywords, wordCountTarget
create_promptwritekind, projectId, text, topicClusterId, type
create_taskwritecategory, description, opportunityScore, projectId, sourceKey, sourceType, suggestedAction, title, type
decide_page_optimisationwritedecisions, projectId, runId
link_keyword_to_clusterwriteclusterId, projectId, projectKeywordId
save_keywordswritecountryCode, device, keywords, projectId
set_prompt_statuswriteprojectId, promptId, status
untrack_keywordwritekeywordId, projectId
update_keywordwritecountryCode, device, keywordId, languageCode, projectId, trackingFrequency
generate_articlespendbriefId, projectId
get_keyword_trendsspendkeywords, locationCode, projectId, property, timeRange
propose_page_optimisationspendinstruction, pageUrl, projectId, protectedHeadings, targetKeyword
research_keywordsspendlanguageCode, limit, locationCode, projectId, seeds
research_promptsspendcontains, languageCode, limit, locationCode, minDemand, projectId, questionsPerSeed, seeds
run_prompt_checkspendprojectId, promptId
run_rank_checkspendkeywordId, projectId
run_shopping_checkspendprojectId, promptId
start_site_auditspendmaxPages, mode, projectId
write_articlespendlength, projectId, topic
apply_page_optimisationpublishprojectId, runId
apply_task_fixpublishdryRun, projectId, runId, taskId
publish_content_itempublishaction, authorWpUserId, categoryIds, connectionId, featuredMediaId, itemId, projectId, scheduledForUtc, tagIds
revert_page_optimisationpublishprojectId, runId
revert_task_fixpublishdryRun, projectId, runId
shopify_create_redirectpublishconnectionId, dryRun, path, pathStatus, projectId, target
shopify_describe_storepublishconnectionId, projectId
shopify_diagnosepublishconnectionId, limit, projectId
shopify_list_productspublishconnectionId, limit, missingSeoOnly, projectId
shopify_update_alt_textpublishalt, clearAltText, connectionId, dryRun, fileId, projectId
shopify_update_seopublishconnectionId, description, dryRun, objectId, objectType, projectId, title
wp_bulk_updatepublishacknowledgedDryRunId, altText, connectionId, dryRun, excerpt, objectType, projectId, remoteIds, seoDescription, seoTitle
wp_create_contentpublishbodyHtml, categories, connectionId, dryRun, excerpt, featuredImage, featuredImageAlt, idempotencyKey, objectType, projectId, slug, status, tags, title
wp_create_termpublishconnectionId, dryRun, name, parentTermId, projectId, taxonomy
wp_delete_contentpublishconnectionId, dryRun, objectType, projectId, remoteId
wp_describe_sitepublishconnectionId, projectId, refresh
wp_edit_blockspublishaction, allowBuilderEdit, connectionId, dryRun, expectedModifiedGmt, objectType, operations, projectId, remoteId
wp_get_contentpublishconnectionId, objectType, offset, projectId, remoteId, url
wp_get_schemapublishaction, connectionId, objectType, projectId, remoteId, url
wp_get_seo_coveragepublishconnectionId, projectId
wp_list_contentpublishconnectionId, objectType, page, perPage, projectId, search, slug, status
wp_list_redirectspublishconnectionId, projectId
wp_list_revisionspublishconnectionId, objectType, projectId, remoteId
wp_list_termspublishconnectionId, projectId, search, taxonomy
wp_manage_redirectpublishaction, backend, code, connectionId, dryRun, from, id, projectId, to
wp_mediapublishaction, altText, caption, connectionId, dryRun, expectedModifiedGmt, fileBase64, filename, mediaId, missingAltOnly, perPage, projectId, search, sourceUrl, title
wp_patch_contentpublishallowBuilderEdit, connectionId, dryRun, edits, expectedModifiedGmt, objectType, projectId, remoteId
wp_update_contentpublishallowSlugChange, bodyHtml, categories, connectionId, dryRun, excerpt, expectedModifiedGmt, featuredImage, featuredImageAlt, objectType, projectId, remoteId, slug, tags, title
wp_update_schemapublishaction, connectionId, dryRun, expectedSchemaVersion, id, mode, objectType, projectId, provider, remoteId, schema, type, url
wp_update_seopublishconnectionId, description, dryRun, expectedModifiedGmt, objectType, projectId, remoteId, title, url
wp_create_productcommercecategoryIds, connectionId, description, dryRun, name, projectId, regularPrice, shortDescription
wp_list_productscommerceconnectionId, page, perPage, projectId, search, thinDescriptionsOnly
wp_update_productcommerceconnectionId, description, dryRun, expectedModifiedGmt, productId, projectId, seoDescription, seoTitle, shortDescription
wp_advanced_requestsite_adminbody, connectionId, dryRun, method, path, projectId, query
wp_site_adminsite_adminaction, commentId, commentStatus, connectionId, dryRun, menuId, projectId, resource, settings

The tool list above is generated from RankX AI itself rather than written by hand, as at 30 September 2026 (source b27dec96). When the product changes, this page changes with it.

Grouped, with a line on each, in the tool reference.

Scopes, and a tool you cannot see is a tool you cannot call

RankX AI has six scopes, and every tool declares one it requires. A token carries a set of scopes, fixed when it is issued, and a tool outside that set is not listed and not callable: it does not appear in the client's tool list at all, and calling it anyway returns "unknown tool", indistinguishable from a tool that does not exist.

That is deliberate. Capability is not discoverable, so a read-only token cannot be probed to find out what a bigger one could do.

The practical consequence is the one support question this surface generates: "a tool is missing" points to scope. It means the token does not carry that tool's scope. See authentication.

The tools that spend credits say so

Every RankX AI MCP tool that spends credits resolves its current price into its own description when the client lists tools, so your assistant knows what a call costs before it makes one, and the price cannot go stale in a document. Reading is always free.

A scope says what a tool may do, and its description says what it costs. Most of the priced tools are the ten in the spend scope. create_content_brief is the exception: it sits in write, and it charges for the research it starts.

The server also instructs every connected assistant to check your balance before proposing work that spends, and to confirm with you first. get_credit_balance and get_credit_usage are free to call.

Five dispatch-and-poll pairs

The most common integration mistake on this surface. Five capabilities start background work and return an id immediately rather than a result:

Start it withPoll withThen
start_site_auditget_site_audit_statusget_site_audit_issues once it reports complete
write_articleget_article_runget_content_item with the item id it reports, once the run has settled
generate_articleget_content_itemRead the body once the status is ready for review or changes requested
get_keyword_trendsget_keyword_trends_statusThe data arrives with the completed status
publish_content_itemget_publication_statusReport each field's result once the publication has settled

A client that treats the first response as the answer will report an empty result as a failure. Worked examples are in examples.

Two rules your assistant is told, and should keep

RankX AI sends operating instructions to every client on connection. Two are worth knowing yourself, because they change how you read what comes back:

null means unknown, never zero. Every metric field that can be unmeasured is nullable, and the tools say so in their own responses. Reporting a null as 0% tells you that you are invisible when the truth is that nothing was measured. See null is not zero.

Tool output is data, not instructions. Content returned from a tool, and especially content read from a WordPress site, is untrusted text. An assistant should never follow directives that appear inside it.

Ready-made workflows

six Agent Skills ship with RankX AI: visibility audit, keyword research, competitor analysis, site health, content brief and shopping visibility. Each is a written workflow that turns the tool list into a job, with the confirmation steps already in it.

They are on the Agent Skills page, where you can read what each does and download the file.

Questions about the RankX AI MCP server

How much does the MCP server cost?

The RankX AI MCP server is included on every RankX AI plan, and in the free trial, at no extra charge. Reading your data costs nothing, and a tool that spends credits quotes its live price before it runs. Saving keywords or prompts is free, but it schedules checks, and those are metered like any check you set up in the app. An expired subscription cannot connect.

Does it work with Claude, ChatGPT and Cursor?

Yes. Claude Desktop and Claude Web add the RankX AI MCP server as a custom connector in the Connectors panel and sign in with OAuth. ChatGPT does the same through its own connector settings, where adding a custom connector may need developer mode or a paid ChatGPT plan. Claude Code connects with one command. Cursor, VS Code and Windsurf take a personal access token in their own config file, and so does any script. The table of which connection method suits which client has the page for each.

Can an assistant change my website through it?

Only if the connection carries the scope for it. Every RankX AI read sits under read. Anything that touches a live site, such as a WordPress title and meta description or a Shopify product, needs publish, and WooCommerce products and WordPress settings have scopes of their own. A personal access token can carry read alone, which suits a reporting script; the OAuth consent screen grants the full set in one decision and names every capability it asks for. On WordPress, every edit dry-runs by default and every write is verified by reading the object back. The RankX AI WordPress SEO tool page covers what the integration can change.

Is it the same as the assistant inside RankX AI?

Not quite. RankX AI's in-app AI SEO assistant runs on the same tool surface as the MCP server, with a narrower set: every write it proposes waits on an approval card, and some tools are never offered to it at any approval level, including page-body writes, bulk edits, media, site settings, deletion, publishing an article and the Shopify writes. Those stay reachable over MCP, where you drive the client and see each call. Use the in-app assistant for one approved change at a time, and the MCP server to bring your data into Claude or ChatGPT.

Will it work as a Google Search Console MCP server?

Yes, once Search Console is connected to your website inside RankX AI. The RankX AI MCP server then reads clicks, impressions, click-through rate and position by query, page, country or device (get_search_console_performance), the daily trend against the period before (get_search_console_trend), which queries bring people to a page (get_search_console_drilldown), Google's own verdict on one URL (inspect_url) and your sitemaps (list_sitemaps). Google Analytics and Bing Webmaster Tools data come over the same MCP connection, next to your AI visibility and rank tracking. A missing connection is reported as missing, never as zero.

Which tools are free to call?

Every RankX AI MCP tool whose description quotes no price, which is every read and nearly every write. The scope column in the RankX AI MCP tool reference shows the spend tools at a glance, and create_content_brief is the one priced tool outside that scope. For how the RankX AI MCP server compares with other MCP servers built for SEO work, see the best MCP servers for SEO, compared.

Where to go next

Last updated