Rutt for AI coding assistants
The official Model Context Protocol server. Give Claude Code, Cursor, Windsurf, or any MCP-aware tool full read access to your AI visibility, bot traffic, rankings, and brand context.
https://rutt.io/api/mcp
What is the Rutt MCP server?
Model Context Protocol is an open standard for connecting AI assistants to external systems. The Rutt MCP server is hosted at https://rutt.io/api/mcp — nothing to install. Point your assistant at the URL with your API key and you get 40 tools and 4 reference resources.
Once connected, your assistant can answer questions like:
- “How is acme.com performing on ChatGPT vs Claude this month?”
- “Which tracked keywords lost rank this week?”
- “What prompts do our competitors win where we lose?”
- “What does this brand sound like — write the blog post in that voice.”
Every tool response includes unit hints, a one-sentence interpretation, and suggested next tool calls — so the assistant never has to guess what the data means.
Connect
First, create an API key at /integrations/api-keys. Keep it scoped to read unless you specifically want the assistant to write data back.
Then point your assistant at:
https://rutt.io/api/mcp
— Authorization: Bearer rutt_xxx
Claude Code
One command:
claude mcp add --transport http rutt https://rutt.io/api/mcp \
--header "Authorization: Bearer rutt_your_api_key_here"
Cursor
Edit ~/.cursor/mcp.json (or the project-local .cursor/mcp.json):
{
"mcpServers": {
"rutt": {
"url": "https://rutt.io/api/mcp",
"headers": {
"Authorization": "Bearer rutt_your_api_key_here"
}
}
}
}
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"rutt": {
"serverUrl": "https://rutt.io/api/mcp",
"headers": {
"Authorization": "Bearer rutt_your_api_key_here"
}
}
}
}
Claude.ai & ChatGPT
Claude.ai and ChatGPT's connector UIs currently expect OAuth, which Rutt doesn't implement yet. Until they do, pass your API key as a query parameter and skip the auth step. Open Settings → Connectors → Add custom connector and paste:
https://rutt.io/api/mcp?api_key=rutt_your_api_key_here
Leave OAuth Client ID and Client Secret blank.
Security note: An API key in a URL is more exposed than one in a header — it can appear in browser history, server logs, and Claude.ai's analytics. For this connector, create a dedicated read-only key, name it “Claude.ai connector” or similar at /integrations/api-keys, and revoke it the moment you stop using it. Don’t paste the URL in public chat logs or screenshots.
Test it: curl -X POST https://rutt.io/api/mcp -H "Authorization: Bearer rutt_xxx" -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Tools
44 tools across 10 product areas. All read-only except where marked write.
Sites
| Tool | Description |
|---|---|
rutt_list_sites
|
List all sites in the team. |
rutt_get_site
|
Full site detail including brand profile and crawl config. |
rutt_get_site_summary
|
One-call dashboard snapshot: visibility, bots, rankings, open actions. Best first call. |
Brand & Voice
| Tool | Description |
|---|---|
rutt_get_brand_profile
|
Industry, tone, target audience, key products, guidelines. Call before generating content. |
rutt_list_site_pages
|
Crawled pages with SEO scores and context flags. |
rutt_get_page_seo_report
|
Detailed SEO audit for one page. |
AI Visibility
| Tool | Description |
|---|---|
rutt_get_visibility_overview
|
Per-model scores, mention rates, top competitors, top cited sources. |
rutt_get_visibility_trend
|
Daily visibility score series; optional model filter. |
rutt_list_monitoring_prompts
|
Prompts being checked across AI models. |
rutt_get_monitoring_prompt
|
Single prompt with recent mention/recommendation rates. |
rutt_get_prompt_results
|
Individual check results for one prompt. |
rutt_get_prompt_result_detail
|
Full AI response text for one check. |
rutt_add_monitoring_prompt
write
|
Create a new monitoring prompt. |
Bot Analytics
| Tool | Description |
|---|---|
rutt_get_bot_traffic
|
Human vs AI vs search vs other bot totals + AI share %. |
rutt_get_traffic_by_crawler
|
Per-crawler breakdown with intent (training / user_action / search). |
rutt_get_top_crawled_pages
|
URLs AI crawlers hit most. Filter by bot. |
rutt_get_ai_referrers
|
Hosts sending traffic — spots ChatGPT/Perplexity referrals. |
rutt_get_traffic_breakdown
|
Pageview breakdown by visitor type. |
Rank Tracker
| Tool | Description |
|---|---|
rutt_list_tracked_keywords
|
Keywords with latest SERP position + AI Overview flag. |
rutt_get_keyword
|
One keyword with latest rank data. |
rutt_get_keyword_rank_history
|
Daily rank history for a keyword. |
rutt_get_rank_movers
|
Biggest gainers and losers over the window. |
rutt_get_ai_overview_keywords
|
Keywords where Google AI Overview triggered + cited sources. |
rutt_add_tracked_keyword
write
|
Track a new keyword. |
Keyword Research
| Tool | Description |
|---|---|
rutt_get_keyword_metrics
|
Bulk volume/KD/CPC/intent for any keyword list (up to 700). Doesn't require tracking. |
rutt_research_keywords
write
|
Run keyword research from a seed term. Persists to the team — appears in /keywords. Async. |
rutt_get_keyword_research
|
Poll for the completed result of a research run. |
rutt_list_keyword_research
|
Past keyword research runs for a site. |
Competitors / SEO Rivals
| Tool | Description |
|---|---|
rutt_list_competitors
|
Competitors with DR, backlinks, organic traffic. |
rutt_get_competitor
|
Single competitor with SEO metrics. |
rutt_get_competitor_pages
|
Discovered pages for a competitor. |
rutt_analyze_domain
write
|
Analyze any domain — DR, backlinks, traffic. Auto-adds it as a tracked competitor. Async. |
rutt_get_visibility_gap
|
Prompts where competitors win and we don't. High-signal for content strategy. |
rutt_list_fanout_queries
|
Sub-questions LLMs derive from monitoring prompts. |
Weekly Plan
| Tool | Description |
|---|---|
rutt_get_current_weekly_plan
|
This week's AI-generated day-by-day action plan. |
rutt_list_weekly_plans
|
Past weekly plans. |
rutt_get_weekly_plan_items
|
Items for a specific plan. |
rutt_mark_action_complete
write
|
Mark a plan item complete. |
Reports
| Tool | Description |
|---|---|
rutt_list_reports
|
Generated reports for a site. |
rutt_get_report
|
Report metadata + public share URL. |
Reference / discovery
| Tool | Description |
|---|---|
rutt_get_reference_models
|
AI models Rutt monitors. |
rutt_get_reference_countries
|
Allowed monitoring countries (plan-gated). |
rutt_get_reference_crawlers
|
Known crawler signatures + intent. |
rutt_get_glossary
|
Definitions for Rutt-specific terms. Call once at session start. |
rutt_get_plan_limits
|
Current team's plan and feature limits. |
Resources
In addition to tools, the server exposes resources — URI-addressable reference data your assistant can auto-load at session start:
| URI | Contents |
|---|---|
rutt://glossary | Rutt-specific terminology so the assistant interprets data correctly. |
rutt://models | AI models monitored (chatgpt, claude, gemini, perplexity). |
rutt://crawlers | Known bot signatures with company + intent (training / user_action / search). |
rutt://plan-limits | Current team's plan and feature limits. |
The AI envelope
Every tool result is wrapped in an envelope that makes the data self-describing. The same envelope is available on the plain REST API by adding ?ai=1 or the header Accept: application/vnd.rutt.ai+json.
{
"data": { ... },
"meta": {
"window": { "start": "2026-04-12", "end": "2026-05-12", "label": "last 30 days" },
"site": { "id": 12, "domain": "acme.com" },
"unit_hints": {
"score": "0-100, % of monitored prompts where this site appeared in AI answers"
}
},
"interpretation": "Strongest on ChatGPT (71/100), weakest on Claude (58/100). Top competitor mentioned: Notion.",
"next_actions": [
{
"tool": "rutt_get_visibility_gap",
"args": { "site_id": 12 },
"why": "Find prompts where competitors win"
}
]
}
unit_hints describe what each metric means and its range, so the LLM never has to guess. interpretation is a one-sentence natural-language summary generated server-side from the same data. next_actions suggest follow-up tool calls so the assistant can chain without re-asking the user.