rankcontrol
v0.7.0
Published
RankControl CLI + MCP server: drive your SEO/AI-visibility workspace from the terminal or any AI agent
Downloads
606
Maintainers
Readme
rankcontrol
RankControl from the terminal or any AI agent. One package, two faces:
- CLI —
npx rankcontrol <command>(or the short aliasrctrlonce 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 loginThat 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
# Visibility and citations
npx rankcontrol funnel # AI crawls / AI visits / AI leads (30d)
npx rankcontrol score # composite visibility score + subscores (AI/Google/Bing)
npx rankcontrol visibility --days 60 # daily AI visibility score trend
npx rankcontrol sov --days 30 # share of voice vs competitors
npx rankcontrol sources --days 30 # cited domains typed brand/competitive/ugc/editorial
npx rankcontrol sentiment --days 30 # how AI answers frame your brand
npx rankcontrol citations --model chatgpt
npx rankcontrol crawler-access # can AI crawlers reach your site (daily probe)
npx rankcontrol queries # tracked queries checked weekly across AI engines
npx rankcontrol query-add "best crm for agencies"
npx rankcontrol query-edit <queryId> "new text"
npx rankcontrol query-track <queryId> off # pause weekly checks (frees a slot)
npx rankcontrol query-remove <queryId>
npx rankcontrol competitors
npx rankcontrol competitor-add "Acme" https://acme.com
npx rankcontrol competitor-remove <competitorId>
# Content pipeline
npx rankcontrol capacity # remaining content-plan slots
npx rankcontrol content # pages with status
npx rankcontrol plan-content --topics "bus travel" --max-difficulty 40
npx rankcontrol commit-titles --file titles.json
npx rankcontrol ideas # scored content-idea backlog
npx rankcontrol plan-idea "query text" # put an idea on the calendar
npx rankcontrol delete-planned <contentId> # title returns to the idea pool
npx rankcontrol generate <contentId> --confirm # write a planned article now
npx rankcontrol publish <contentId> --confirm # dry run without --confirm
npx rankcontrol archive <contentId>
npx rankcontrol reschedule <contentId> 2026-08-04
npx rankcontrol settings # article policy (auto-write, auto-publish, images, ...)
npx rankcontrol settings-set --auto-generate off --auto-publish off
npx rankcontrol topics # pillar list (topic clusters)
npx rankcontrol topics-set "Topic A" "Topic B" # replaces the FULL list
npx rankcontrol internal-links <contentId> # who links here / links out
npx rankcontrol site-pages # pages used for internal links
npx rankcontrol detect-links https://example.com/sitemap.xml
npx rankcontrol add-pages https://example.com/pricing
# Leads and analytics
npx rankcontrol leads --limit 100 # captured leads with AI source attribution
npx rankcontrol traffic --days 30 # page views, visitors, bounce rate, time on page
npx rankcontrol engagement # per-page views, citations, sparkline
npx rankcontrol analytics-sources # which source writes traffic/crawler data
npx rankcontrol analytics-set-source <dataType> <source>
npx rankcontrol analytics-activate <screen>
# Reports
npx rankcontrol report # exec summary: last 30 days vs the 30 before
npx rankcontrol wins # biggest wins of the last 30 days
npx rankcontrol agent-activity # recent runs per agent lane
npx rankcontrol jobs # async job status
# Backlinks and outreach
npx rankcontrol backlinks --status live
npx rankcontrol backlink-stats
npx rankcontrol outreach-prospects
npx rankcontrol outreach-find-contact <backlinkId>
npx rankcontrol outreach-draft-reply <backlinkId>
npx rankcontrol outreach-queue <backlinkId> --confirm # sends from YOUR mailbox
npx rankcontrol outreach-status <backlinkId> <status>
npx rankcontrol network # Link Network credits + placements
npx rankcontrol network-opt-in on --confirm
npx rankcontrol network-remove-placement <placementId> --confirm
# Social and repurposing
npx rankcontrol repurpose [contentId] # published articles + social drafts (8 platforms)
npx rankcontrol repurpose-generate <contentId> --platforms twitter --confirm
npx rankcontrol repurpose-edit <draftId> --title "New hook"
npx rankcontrol repurpose-channels # Postiz channel ids
npx rankcontrol repurpose-push <draftId> --channels <id> --confirm
npx rankcontrol repurpose-mark-posted <draftId>
npx rankcontrol social # Reddit/X threads where your articles fit
npx rankcontrol social-stats
npx rankcontrol social-status <threadId> <status>
npx rankcontrol social-draft-reply <threadId>
# Brand, team, workspace
npx rankcontrol brand # brand profile, products, ICPs in one read
npx rankcontrol brand-set --industry "SaaS" # name, industry, description, authors, style refs
npx rankcontrol brand-profile-set --json '{"tone":"confident"}'
npx rankcontrol brand-product --json @product.json
npx rankcontrol brand-icp --json @icp.json
npx rankcontrol team
npx rankcontrol team-invite [email protected] --perms content=write,analytics=read --confirm
npx rankcontrol team-revoke <invitationId>
npx rankcontrol team-remove <memberId> --confirm
npx rankcontrol support "Subject" --message "..."
# Integration helpers
npx rankcontrol shopify-install-url <shop>
npx rankcontrol cloudflare-connect # OAuth URL for read-only crawler analytics
npx rankcontrol cloudflare-zones
npx rankcontrol cloudflare-zone <zoneId> <zoneName>
npx rankcontrol framer-install-embed --confirm
npx rankcontrol webflow-custom-code --confirmMCP
Claude Code:
claude mcp add rankcontrol --env RANKCONTROL_API_KEY=rctrl_pk_... -- npx rankcontrol mcpOr in .mcp.json / Cursor mcp.json:
{
"mcpServers": {
"rankcontrol": {
"command": "npx",
"args": ["rankcontrol", "mcp"],
"env": { "RANKCONTROL_API_KEY": "rctrl_pk_..." }
}
}
}Tools (83)
Visibility and citations
| Tool | What it does |
|---|---|
| get_overview_funnel | AI crawls / AI visits / AI leads, last 30 days |
| get_visibility_score | Composite score (50% AI + 30% Google + 20% Bing) 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_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 |
| add_tracked_query / update_tracked_query / set_query_tracking / remove_tracked_query | Manage the query pool and its plan slots |
| get_competitors / add_competitor / remove_competitor | Manage share-of-voice competitors (max 10) |
Content pipeline
| Tool | What it does |
|---|---|
| get_planning_capacity | Remaining calendar slots (check before planning) |
| plan_content | Generate candidate titles (capacity-gated, nothing scheduled) |
| commit_planned_titles | Approve reviewed titles onto the calendar |
| 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 |
| publish_content | Dry run by default; confirm: true publishes to the CMS |
| archive_content | Archive an article (reversible in the dashboard) |
| reschedule_article | Move a planned article to another day (flexible schedule) |
| get_article_settings / update_article_settings | Read / merge-patch the article policy |
| get_topics / set_topics | Read / replace the pillar list (full-list replace) |
| 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 |
| list_content | Content pages with status |
Leads and analytics
| Tool | What it does |
|---|---|
| list_leads | Captured leads with AI model / query / page attribution |
| get_traffic_overview | Page views, visitors, sessions, bounce rate, time on page |
| 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
| Tool | What it does |
|---|---|
| get_exec_summary | Last 30 days vs the 30 before: cite rate, views, crawls, leads |
| 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
| Tool | What it does |
|---|---|
| list_backlinks / get_backlink_stats | Backlink table and totals |
| list_outreach_prospects | Outreach pipeline per published article |
| 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 |
| update_outreach_status | Move a prospect through the pipeline |
| get_link_network | Credit balance, membership, placements |
| set_link_network_opt_in / remove_network_placement | Join/leave, retire placements; dry run by default |
Social and repurposing
| Tool | What it does |
|---|---|
| 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 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 | Work a thread; drafts never auto-post |
Brand, team, workspace
| Tool | What it does |
|---|---|
| get_brand | Brand profile, links/CTAs, products, and ICPs in one read |
| update_brand_identity | Name, industry, description, authors (EEAT bylines), style refs |
| update_brand_profile | Voice, colors, meta fields, locale |
| write_brand_product / write_brand_icp | Create/update/delete products and buyer profiles |
| 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 |
Integration helpers
| Tool | What it does |
|---|---|
| shopify_install_url | Mint an install link for the Shopify app |
| 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 |
The plan→commit split is intentional: plan_content proposes, a human (or a supervising agent) reviews, commit_planned_titles approves. publish_content, generate_article, and everything with a public side effect are dry-run-first for the same reason.
