@scom82/rush-analytics-mcp
v1.2.0
Published
Unofficial MCP server for the Rush Analytics API v2 — 14 tools, 100% API coverage: SERP top, Wordstat, suggestions, Fast Positions, rank tracking, indexation, adwords, AI answer tracking, GDS aggregates.
Maintainers
Readme
rush-analytics-mcp
Unofficial MCP server for Rush Analytics API v2. Not affiliated with or endorsed by Rush Analytics.
Exposes 14 MCP tools with 100% coverage of all 38 Rush Analytics API v2 endpoints — Yandex/Google SERP Top-10 parsing, Wordstat keyword frequencies, search suggestions, one-shot Fast Positions checks, recurring rank tracking, indexation checks, Google Keyword Planner data, AI answer tracking, Looker Studio aggregated views, project listing, and force-refresh — over the standard Model Context Protocol stdio transport.
Installation
With npx (recommended)
npx -y @scom82/rush-analytics-mcpFrom source
git clone https://github.com/SCom-82/rush-analytics-mcp.git
cd rush-analytics-mcp
npm install
npm run build
node dist/index.jsConfiguration
Environment variables
| Variable | Required | Default | Description |
|---|---|---|---|
| RUSH_ANALYTICS_API_KEY | Yes (for API calls) | — | Your Rush Analytics API key |
| RUSH_ANALYTICS_API_URL | No | https://app.rush-analytics.ru/apiv2 | Override the base URL |
| RUSH_ANALYTICS_HTTP_TIMEOUT_MS | No | 30000 | Per-request HTTP timeout in milliseconds |
The server starts without a key — tools/list and rush_modules work key-free.
A clear error is returned when you call any tool that makes an API request without the key set.
Claude Desktop / MCP client config
{
"mcpServers": {
"rush-analytics": {
"command": "npx",
"args": ["-y", "@scom82/rush-analytics-mcp"],
"env": {
"RUSH_ANALYTICS_API_KEY": "your-api-key-here"
}
}
}
}Tools
| # | Tool | API call | Balance cost | Description |
|---|---|---|---|---|
| 1 | rush_modules | None | Free | List all 8 available / 12 unavailable modules. Works without API key. |
| 2 | rush_balance | GET /balance | Free | Get remaining balance (fractional units). |
| 3 | rush_status | GET /status/{type}/{id} | Free | Check task status by type+id. Returns {id, status, resulturl}. Warning: resulturl contains your API key in the query string — do not share or publish this URL. |
| 4 | rush_create_task | POST /create/{module} | Yes | Generic: create a task in any available module. Returns {id, type}. |
| 5 | rush_get_result | GET /result/... | Free | Poll a task once. Smart routing for ranktracker (11 views) and ai-results-tracker (4 views). Supports competitor param for competitors_positions view. |
| 6 | rush_wait_result | Polling loop | Free | Poll until done or timeout. Returns {pending, timedOut, waitedSec, result}. Supports competitor param for competitors_positions view. |
| 7 | rush_top10 | create top10 + optional wait | Yes | Top-10 SERP parsing for Yandex or Google. |
| 8 | rush_wordstat | create wordstat + optional wait | Yes | Yandex Wordstat keyword frequencies. |
| 9 | rush_suggest | create suggest + optional wait | Yes | Search suggestions (Yandex/Google/YouTube autocomplete). |
| 10 | rush_fpp | create fpp + optional wait | Yes | Fast Positions — one-shot rank check for a URL. |
| 11 | rush_ranktracker | create ranktracker (create-only) | Yes | Recurring rank monitoring project. See warning below. |
| 12 | rush_projectids | GET /projectids | Free | List project ids, optionally filtered by module type. Read-only, no balance spent. |
| 13 | rush_update_ranktracker | POST /update/ranktracker | ⚠️ Yes | Force-refresh an existing ranktracker project. May charge balance. |
| 14 | rush_gds | GET /gds/{view}/{projectid} | Free | Looker Studio aggregated views for ranktracker (5 views). Read-only. |
Rank Tracker warning
rush_ranktracker creates a recurring monitoring project that collects rank data on a
schedule and charges your balance each time data is collected. This is not a one-off task.
Make sure you intend to set up ongoing monitoring before calling this tool.
Retrieve accumulated data with rush_get_result(module="ranktracker", view="dynamic", id=<id>, page=1).
Available views (11):
dynamic | visibility | positions_history | urls_history | snippets_history |
competitors | competitors_visibility | competitors_leaders | competitors_positions |
regions | compare_regions.
competitors_positions view requires competitor parameter
When using rush_get_result or rush_wait_result with module="ranktracker" and
view="competitors_positions", the competitor parameter (competitor domain, e.g. "example.ru")
is required. Without it, the Rush Analytics API returns HTTP 400.
The MCP server validates this client-side and returns an error before making the API request.
rush_get_result(module="ranktracker", id=<id>, view="competitors_positions", competitor="example.ru", page=1)For all other views, competitor is accepted but ignored.
rush_update_ranktracker warning
rush_update_ranktracker triggers an unscheduled (forced) data collection run for an existing
Rank Tracker project. This is NOT creating or editing a project.
⚠️ This operation may charge balance — an unscheduled collection is billed at the project's normal rate. Use only when you explicitly need fresh data outside the regular collection schedule.
rush_projectids — list projects by type
Get all project ids, optionally filtered by module type. Free and read-only — balance is not affected.
rush_projectids() // all projects
rush_projectids(projecttype=3) // ranktracker projects only
rush_projectids(projecttype=2) // top10 projects onlyType numbers: 1=fpp, 2=top10, 3=ranktracker, 4=wordstat, 5=indexation, 7=suggest, 15=adwords, 32=ai-results-tracker.
rush_gds — Looker Studio aggregated views
Get pre-aggregated data for a Rank Tracker project via the Google Looker Studio connector endpoints.
Useful for reports — returns summary data without paginating through individual /result/ranktracker/* pages.
Available views (5): positions | visibility | tops | competitors_visibility | schema.
Important: this view enum is separate from the 11 ranktracker views in rush_get_result.
Do not mix them up.
rush_gds(view="visibility", projectid=<ranktracker-project-id>)
rush_gds(view="positions", projectid=<ranktracker-project-id>)Read-only, only works for ranktracker projects.
Known issue: view="positions" (GET /gds/positions/{id}) may time out — this is a known instability on the Rush Analytics API side, not a package bug; the other 4 views (visibility, tops, competitors_visibility, schema) work reliably.
Available vs unavailable modules
Rush Analytics exposes 8 modules via the /apiv2 endpoint. Other modules visible in the UI
are not available through the API (they return "Unknown API function").
Available (8)
| Slug | Type | Typed tool | Description |
|---|---|---|---|
| fpp | 1 | rush_fpp | Fast Positions — one-shot rank check |
| top10 | 2 | rush_top10 | SERP Top-10 parsing (Yandex/Google) |
| ranktracker | 3 | rush_ranktracker | Recurring rank position monitoring |
| wordstat | 4 | rush_wordstat | Yandex Wordstat search volumes |
| indexation | 5 | rush_create_task | Indexation check |
| suggest | 7 | rush_suggest | Search suggestions (autocomplete) |
| adwords | 15 | rush_create_task | Google Keyword Planner data |
| ai-results-tracker | 32 | rush_create_task | AI answer tracker (brand visibility in LLM answers) |
Not available on apiv2
clustering, textanalyzer, whois, metascanner, serm, serp-monitor, site-audit,
backlink-spam, backlink-stats, webarchive-search, webarchive-spam, webarchive-recovery —
all return "Unknown API function".
Usage pattern
Rush Analytics follows a create → poll → result async pattern:
1. Create a task:
rush_top10 / rush_wordstat / rush_suggest / rush_fpp / rush_create_task → {id, type}
2. Check status (lightweight):
rush_status(type=<module type>, id=<id>) → {status: "Parsing" | "Done", resulturl}
3. Get the result:
rush_wait_result — waits in-process (up to maxWaitSec, hard-capped at 540s)
OR
rush_get_result — single poll, repeat manually when pending=trueFor long-running tasks prefer the manual async pattern: create now, call rush_get_result again
in a later turn.
Pro accounts have 1 concurrent thread. Sending a second create while one is running returns
"No more free API threads" — wait for the first task to finish before creating another.
Result routing for ranktracker and ai-results-tracker
ranktracker — 11 views
GET /result/ranktracker/{view}/{id}/{page}?apikey=…[&periodStart=YYYY-MM-DD&periodEnd=YYYY-MM-DD]Use view parameter in rush_get_result/rush_wait_result:
dynamic | visibility | positions_history | urls_history | snippets_history |
competitors | competitors_visibility | competitors_leaders | competitors_positions |
regions | compare_regions
Default: view="dynamic", page=1.
ai-results-tracker — 4 endpoints
Use view parameter:
| view | Endpoint |
|---|---|
| brand (default) | GET /result/ai-results-tracker/brand/{id} |
| sources | GET /result/ai-results-tracker/sources/{id} |
| competitors_brands | GET /result/ai-results-tracker/competitors/brands/{id} |
| competitors_domains | GET /result/ai-results-tracker/competitors/domains/{id} |
Timeout behaviour
- Per-request HTTP timeout: controlled by
RUSH_ANALYTICS_HTTP_TIMEOUT_MS(default 30s). On timeout you get"Request timed out after Nms". - Polling hard cap:
maxWaitSecis silently capped at 540 seconds to prevent MCP client connection timeouts. If the cap is hit, the response includes"note": "maxWaitSec was capped to 540s".
Region / language reference endpoints
Use these Rush Analytics HTML pages to look up region ids, country codes, and language codes:
- Yandex regions: https://www.rush-analytics.ru/apiRegionsYandex.php
- Google regions: https://www.rush-analytics.ru/apiRegionsGoogle.php
- Languages: https://www.rush-analytics.ru/apiLanguages.php
- AI-results-tracker countries: https://www.rush-analytics.ru/apiAIResultsTrackerCountries.php
- AI-results-tracker languages: https://www.rush-analytics.ru/apiAIResultsTrackerLanguages.php
Common Yandex region IDs
| ID | Region | |---|---| | 213 | Moscow | | 2 | Saint Petersburg | | 51 | Samara | | 54 | Yekaterinburg |
Official docs
- API reference: https://www.rush-analytics.ru/api
- Rush Analytics homepage: https://www.rush-analytics.ru
This is an unofficial community wrapper. MIT License. Not affiliated with Rush Analytics.
