rankcontrol
RankControl from the terminal or any AI agent. One package, two faces:
- CLI —
npx rankcontrol <command> (or the short alias rctrl once installed)
- MCP server —
npx rankcontrol mcp (stdio, for Claude Code, Claude Desktop, Cursor, Codex)
Every command calls the same authed, rate-limited, org-scoped API the RankControl dashboard uses. Quotas and approval gates apply server-side no matter which client calls.
Auth
The easy way (browser approval; you must be logged in to RankControl):
npx rankcontrol login
That opens your dashboard, you check the confirmation code matches and approve. The CLI stores a key in ~/.rankcontrol/config.json. npx rankcontrol logout removes it (revoke the key itself in Settings → API).
The headless way (CI, servers, MCP env blocks): create a key in RankControl → Settings → API, then:
export RANKCONTROL_API_KEY=rctrl_pk_...
The env var wins over the stored config when both exist. Scopes are set per key; read-only keys work for all get_*/list_* tools.
CLI
npx rankcontrol funnel
npx rankcontrol score
npx rankcontrol visibility --days 60
npx rankcontrol sov --days 30
npx rankcontrol web-totals
npx rankcontrol footprint
npx rankcontrol sources --days 30
npx rankcontrol sentiment --days 30
npx rankcontrol citations --model chatgpt
npx rankcontrol crawler-access
npx rankcontrol optimizer
npx rankcontrol queries
npx rankcontrol query-slots
npx rankcontrol query-add "best crm for agencies"
npx rankcontrol query-add "Do luggage trackers work abroad?" --covered-by <contentId>
npx rankcontrol query-edit <queryId> "new text"
npx rankcontrol query-track <queryId> off
npx rankcontrol query-remove <queryId>
npx rankcontrol competitors
npx rankcontrol competitor-add "Acme"
npx rankcontrol competitor-remove <competitorId>
npx rankcontrol capacity
npx rankcontrol content
npx rankcontrol plan-content
npx rankcontrol plan-content --confirm
npx rankcontrol plan-content --topics "Travel insurance" --subject "ski trips"
npx rankcontrol commit-titles --file titles.json
npx rankcontrol remove-title <titleId>
npx rankcontrol ideas
npx rankcontrol idea-hide <queryId>
npx rankcontrol insights
npx rankcontrol insight-plan <itemId> --confirm
npx rankcontrol plan-idea "query text"
npx rankcontrol delete-planned <contentId>
npx rankcontrol generate <contentId> --confirm
npx rankcontrol write --next 4 --publish --confirm
npx rankcontrol write-runs
npx rankcontrol write-stop <runId>
npx rankcontrol publish <contentId> --confirm
npx rankcontrol archive <contentId>
npx rankcontrol reschedule <contentId> 2026-08-04
npx rankcontrol article-set <contentId> --length long
npx rankcontrol settings
npx rankcontrol settings-set --auto-generate off --auto-publish off
npx rankcontrol topics
npx rankcontrol topics-set "Topic A" "Topic B"
npx rankcontrol internal-links <contentId>
npx rankcontrol site-pages
npx rankcontrol detect-links https://example.com/sitemap.xml
npx rankcontrol add-pages https://example.com/pricing
npx rankcontrol site-page-linking <pageId> off
npx rankcontrol site-page-remove <pageId>
npx rankcontrol traffic --days 30
npx rankcontrol traffic --scope site
npx rankcontrol rankings
npx rankcontrol google-vs-ai
npx rankcontrol ai-crawling --days 30
npx rankcontrol engagement
npx rankcontrol analytics-sources
npx rankcontrol analytics-set-source <dataType> <source>
npx rankcontrol analytics-activate <screen>
npx rankcontrol report
npx rankcontrol wins
npx rankcontrol agent-activity
npx rankcontrol jobs
npx rankcontrol backlinks --status live
npx rankcontrol backlink-stats
npx rankcontrol outreach-prospects
npx rankcontrol outreach-prospects --ai-sources
npx rankcontrol outreach-stats
npx rankcontrol outreach-find-contact <backlinkId>
npx rankcontrol outreach-draft-reply <backlinkId>
npx rankcontrol outreach-queue <backlinkId> --confirm
npx rankcontrol outreach-status <backlinkId> <status>
npx rankcontrol outreach-ai-source-product <backlinkId> <productId>
npx rankcontrol outreach-cancel <backlinkId>
npx rankcontrol editorial-circle
npx rankcontrol editorial-circle-opt-in on --confirm
npx rankcontrol editorial-circle-remove-placement <placementId> --confirm
npx rankcontrol repurpose [contentId]
npx rankcontrol repurpose-generate <contentId> --confirm
npx rankcontrol repurpose-edit <draftId> --title "New hook"
npx rankcontrol repurpose-channels
npx rankcontrol repurpose-push <draftId> --channels <id> --confirm
npx rankcontrol repurpose-mark-posted <draftId>
npx rankcontrol social
npx rankcontrol social-stats
npx rankcontrol social-status <threadId> skipped
npx rankcontrol social-draft-reply <threadId>
npx rankcontrol social-open <threadId> [--text "<edited reply>"]
npx rankcontrol social-x-handle <handle|clear>
npx rankcontrol social-reddit-profile --karma 1240 --age over2yr --goal "..." --story "..." --tone "..."
npx rankcontrol brand
npx rankcontrol expedition
npx rankcontrol brand-set --industry "Software & Technology"
npx rankcontrol brand-profile-set --json '{"tone":"conversational"}'
npx rankcontrol brand-product --json @product.json
npx rankcontrol brand-icp --json @icp.json
npx rankcontrol icp-suggest
npx rankcontrol icp-draft --describe "Ops leads at 50-500 person logistics firms"
npx rankcontrol team
npx rankcontrol team-invite user@company.com --perms content=write,analytics=read --confirm
npx rankcontrol team-revoke <invitationId>
npx rankcontrol team-remove <memberId> --confirm
npx rankcontrol support "Subject" --message "..."
npx rankcontrol help-page nextjs
npx rankcontrol guides "how do I get cited by ChatGPT"
npx rankcontrol billing
npx rankcontrol cloudflare-connect
npx rankcontrol cloudflare-zones
npx rankcontrol cloudflare-zone <zoneId> <zoneName>
npx rankcontrol framer-install-embed --confirm
npx rankcontrol webflow-custom-code --confirm
MCP
Claude Code:
claude mcp add rankcontrol --env RANKCONTROL_API_KEY=rctrl_pk_... -- npx rankcontrol mcp
Or in .mcp.json / Cursor mcp.json:
{
"mcpServers": {
"rankcontrol": {
"command": "npx",
"args": ["rankcontrol", "mcp"],
"env": { "RANKCONTROL_API_KEY": "rctrl_pk_..." }
}
}
}
Tools (80+)
Visibility and citations
get_overview_funnel | AI crawls / AI visits, last 30 days |
get_visibility_score | Composite score blending AI citations with Google and Bing rank share, with subscores |
get_visibility_trend | Daily visibility score from stored weekly citation checks |
get_share_of_voice | Your citation rate vs competitor mention rates + your share |
get_web_total_history | Monthly web total for you and each competitor, last 3 months |
get_web_footprint | Web footprint for the workspace and every competitor it tracks: how much of the web links to each domain, scored 0 to 10 |
get_citation_sources | Cited domains typed brand / competitive / UGC / editorial |
get_citation_sentiment | Positive / neutral / negative framing with recent receipts |
get_citability_report | Published pages by citability score, worst first, with fixes |
list_citations | Recent citation checks per AI model |
get_crawler_access | Daily AI-crawler reachability probe (edge blocks, robots.txt) |
list_tracked_queries | The queries checked weekly across the AI engines |
get_query_slots | Tracking slots in use and the plan's limit |
add_tracked_query / update_tracked_query / set_query_tracking / remove_tracked_query | Manage the query pool and its plan slots |
hide_content_idea | Hide an idea from Content Ideas; a tracked query keeps its weekly checks and its slot |
get_insights | Action Items: what to work on next on your site (product and service pages, searches no page is about, problems across the whole site), with each item's evidence, suggested fix and action |
plan_insight_articles | Plan up to 3 articles that link to an action item's page (dry run until confirm) |
hide_insight | Hide an action item; it moves under Done as Hidden and does not come back |
move_insight_to_ideas | Move a search no page is about from Action Items to Content Ideas, tagged Search Console; the item moves under Done |
get_competitors / add_competitor / remove_competitor | Manage share-of-voice competitors (max 10) |
Content pipeline
get_planning_capacity | Remaining calendar slots (check before planning) |
plan_content | The next batch of titles, or this week's news with news: true. Dry run until confirm: true. |
commit_planned_titles | Add reviewed titles from a planning run (runId) |
remove_batch_title | Remove a title from the next batch or this week's news for good (waits for the owner) |
get_content_ideas / plan_content_idea | Scored idea backlog; put an idea on the calendar |
delete_planned_title | Remove a planned title (returns to the idea pool) |
generate_article | Write a planned article's body now; dry run by default |
write_articles | Write the next planned articles (or the ones named) one after another, publishing each when asked; dry run by default |
get_write_runs / stop_write_run | Each article's state in recent write runs; stop a run |
publish_content | Dry run by default; confirm: true publishes to the CMS |
update_article_meta | Change a written article's title, meta title or meta description; dry run by default |
archive_content | Archive an article (reversible in the dashboard) |
reschedule_article | Move a planned article to another day (flexible schedule) |
update_planned_article | Change a planned article's own settings before it is written: length, tone, image style and custom instructions. Locked once writing starts. |
get_article_settings / update_article_settings | Read / merge-patch the article policy |
get_topics / set_topics | Read / replace the pillar list (full-list replace, up to 20 topics) |
get_internal_links | Who links to this article internally, and its outbound count |
list_site_pages / add_site_pages / detect_site_links | Pages used for in-article internal links |
set_site_page_linking | Turn linking to a site page on or off. Off keeps the page in your list, but articles published after this don't link to it. |
remove_site_page | Remove a page from your site pages. Articles published after this don't link to it, and scans don't add it back; add_site_pages adds it again. |
list_content | Content pages with status |
Analytics
get_traffic_overview | Page views, visitors, sessions, bounce rate, time on page; scope: "site": the whole site from Google Analytics |
get_rankings | Verified Google and Bing positions per keyword, Search Console clicks, impressions and average position (never shown as a rank), which page earned each query and whether it is yours, how often Google's AI Overview shows and cites you; scope ours (default) or site |
get_google_vs_ai | Every tracked question with its place in Google's top 30 from the weekly rank check, beside each of the six AI engines' latest check of it (cited, mentioned or none). Each row has a state: both, google (ranks on Google, no engine mentions or cites you), ai, neither, or pending (not checked yet). The same rows as Analytics' Google vs AI tab. |
get_ai_crawling | AI crawler visits to your site: totalCrawls; bots, each crawler with its botName, kind (search, user or training, for ChatGPT's, Claude's and Perplexity's crawlers) and crawlCount, most crawls first; and daily, each day with crawls, oldest first, with its crawlCount and the count per crawler (byBot). Null, with a hint, until the Analytics screen is turned on (activate_analytics_screen) or while no AI crawler source is selected (get_analytics_sources). The same numbers as Analytics' AI Crawling tab. days: 7, 30 or 90 (default 30). |
get_page_engagement | Per-page views, citations, and a view sparkline |
get_analytics_sources / set_analytics_source | Which source writes traffic and crawler data |
activate_analytics_screen | One-time activation of the Analytics or Reports screen |
Reports
get_exec_summary | Last 30 days vs the 30 before: cite rate, views, crawls |
get_top_wins | Most-cited page, best cite-rate jump, biggest ranking climb |
get_agent_activity | Recent pipeline runs per agent lane |
list_jobs | Async job status (agent runs) |
Backlinks and outreach
list_backlinks / get_backlink_stats | Backlink table and totals |
list_outreach_prospects / get_outreach_stats | Outreach pipeline per published article, with Domain Rating |
find_outreach_contact | Scrape a prospect site for an outreach email |
draft_outreach_reply | AI-draft the next reply in a live conversation |
queue_outreach_email | Queue an email from the workspace's own mailbox |
cancel_outreach_email | Cancel a queued outreach email (a first email, a reply or a follow-up) before it sends. Refused once it has gone out. |
update_outreach_status | Move a prospect through the pipeline |
set_ai_source_product | Change the product or service an AI source offers, until its pitch is queued |
get_editorial_circle | Credit balance, membership, placements |
set_editorial_circle_opt_in / remove_editorial_circle_placement | Join/leave, retire placements; dry run by default |
Social and repurposing
list_repurpose_queue / get_repurpose_drafts | Published articles + social drafts (8 platforms) |
generate_repurpose_drafts / update_repurpose_draft | Draft and edit platform-native posts |
list_postiz_channels / push_repurpose_draft | Push to Buffer or Postiz; dry run by default |
mark_repurpose_posted | Record a draft as posted manually |
list_social_threads / get_social_stats | Reddit/X threads where your articles fit |
update_social_thread_status / draft_social_reply / open_social_thread / set_social_x_handle / set_reddit_profile | Work a thread: draft, then open it to post yourself (X gets a pre-filled composer link); the thread marks itself Posted once your reply is found. Drafts never auto-post; Posted is never set by hand |
Brand, team, workspace
get_brand | Brand profile, links/CTAs, products, ICPs and brand guidelines in one read |
get_setup_progress | The workspace's expeditions on the Overview: the current expedition, each step's name and whether it is done, and the next step |
confirm_brand_reviewed | Mark the brand as reviewed |
add_brand_guideline | Add a brand guideline |
set_brand_guideline_active | Turn a brand guideline on or off |
remove_brand_guideline | Delete a brand guideline |
update_brand_identity | Name, industry, description, authors (EEAT bylines), style refs |
update_brand_profile | Voice, colors, locale, scheduling, the Local business switch |
write_brand_product / write_brand_icp | Create/update/delete products and buyer profiles |
suggest_brand_icps / draft_brand_icp | Suggest audiences for this site and draft one buyer profile to review; nothing is saved until write_brand_icp |
get_team / invite_team_member / revoke_team_invite / remove_team_member | Seats, invites, per-screen permissions |
contact_support | Message the RankControl team with the workspace identified |
get_help_page | RankControl's help pages: setup guides for each publishing destination, the crawler and its IP address, AI crawler access, the API, CLI and MCP, getting started, and the plan and pricing. Without a page, lists the pages. |
search_guides | Search the guides on RankControl's blog about SEO and AI search: getting cited by ChatGPT, Perplexity, Claude, Gemini and Google's AI answers, ranking on Google, and growing and measuring search traffic. Returns the sections that best answer the question, each with its guide's title, date and link. |
get_billing | This workspace's billing as Settings, Billing shows it: status (trial, active or cancelling), billing cycle, next charge, add-ons, usage against the plan's limits and recent payments. Read-only; changes are made in Settings, Billing. |
Integration helpers
get_cloudflare_connect_url / list_cloudflare_zones / select_cloudflare_zone | Connect read-only Cloudflare crawler analytics |
install_framer_embed / install_webflow_custom_code | Install visit tracking; dry run by default |
get_approval | Where a change that waits for the workspace owner stands, and what happened |
plan_content shows the next batch and adds it with confirm: true. Titles about a subject go on the calendar through commit_planned_titles. Tools with a cost or a public side effect (writing, publishing, emails, posts) are dry-run-first: when the user asked for the action, call them with confirm: true.
Removals and team changes always wait for the workspace owner. So does every change for 2 hours after a key reads text written outside the workspace: prospect replies, AI answers, social threads, competitor pages. These answer approval_required with an approveUrl; the owner approves in RankControl, and get_approval (CLI: approval <approvalId>) shows where each stands.