npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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.

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-mcp

From source

git clone https://github.com/SCom-82/rush-analytics-mcp.git
cd rush-analytics-mcp
npm install
npm run build
node dist/index.js

Configuration

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 keytools/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 only

Type 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=true

For 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: maxWaitSec is 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:

Common Yandex region IDs

| ID | Region | |---|---| | 213 | Moscow | | 2 | Saint Petersburg | | 51 | Samara | | 54 | Yekaterinburg |

Official docs


This is an unofficial community wrapper. MIT License. Not affiliated with Rush Analytics.