@scom82/topvisor-mcp

@scom82/topvisor-mcp

An unofficial MCP server that provides 17 tools for Yandex/Google rank tracking via the Topvisor API v2, enabling project management, keyword import, asynchronous position checks, and retrieval of history and SERP snapshots.

Category
访问服务器

README

@scom82/topvisor-mcp

npm version License: MIT

Unofficial. This is an unofficial MCP server and is not affiliated with or endorsed by Topvisor.

An MCP (Model Context Protocol) server for the Topvisor API v2. Provides 17 tools for Yandex/Google rank tracking: projects, keywords, searchers and regions, position check submission, history, summary charts, SERP snapshots, and account balance. Implements the stateful Topvisor project model — set up project → add searchers/regions → import keywords → submit check (async) → read history.

Installation

Via npx (recommended — through MCP config)

No local install needed. Configure your MCP client and npx handles the rest:

{
  "mcpServers": {
    "topvisor": {
      "command": "npx",
      "args": ["-y", "@scom82/topvisor-mcp"],
      "env": {
        "TOPVISOR_USER_ID": "your_user_id",
        "TOPVISOR_API_KEY": "your_api_key"
      }
    }
  }
}

From source

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

Configuration

Environment Variable Required Default Description
TOPVISOR_USER_ID yes Your Topvisor User ID (found in account settings)
TOPVISOR_API_KEY yes Your Topvisor API key (generate in account settings)
TOPVISOR_API_URL no https://api.topvisor.com/v2/json Override base URL
TOPVISOR_HTTP_TIMEOUT_MS no 30000 HTTP request timeout in milliseconds

The server starts without credentials — tools/list and topvisor_services work without them. Credentials are validated lazily on the first real API call.

Claude Desktop / Claude Code config

{
  "mcpServers": {
    "topvisor": {
      "command": "npx",
      "args": ["-y", "@scom82/topvisor-mcp"],
      "env": {
        "TOPVISOR_USER_ID": "your_user_id",
        "TOPVISOR_API_KEY": "your_api_key"
      }
    }
  }
}

Tools

Tool Service Description
topvisor_services List all API services, searcher_key reference, filter operators. Works without credentials.
topvisor_request any Generic escape hatch: call any Topvisor API v2 method directly.
topvisor_balance bank_2 Get account balance computed from transaction history (bank_2/info is non-functional for single-user accounts).
topvisor_bank_history bank_2 Get transaction history (deposits, charges, bonuses).
topvisor_list_projects projects_2 List projects with filtering, ordering, optional searchers/regions.
topvisor_add_project projects_2 Create a new project by URL.
topvisor_add_searcher positions_2 Add a search engine (Yandex/Google/etc.) to a project.
topvisor_add_region positions_2 Add a region to a searcher. See region_key vs region_index below.
topvisor_list_regions positions_2 List configured regions and get their region_index values.
topvisor_list_keywords keywords_2 List keywords in a project.
topvisor_import_keywords keywords_2 Import keywords via CSV (bulk, with group assignment).
topvisor_check_price positions_2 Preview cost of a position check without running it.
topvisor_check_positions positions_2 ASYNC submit a position check job. See checker/go is async below.
topvisor_get_history positions_2 Read position history for a project and regions.
topvisor_get_summary positions_2 Get position summary comparing two dates.
topvisor_get_summary_chart positions_2 Get chart data for position distribution over time.
topvisor_get_snapshots snapshots_2 Get SERP snapshots collected during a position check.

Stateful project model

Topvisor uses a stateful hierarchy — unlike stateless rank-check APIs, you first configure a project, then submit checks, then read results:

1. topvisor_add_project { url: "https://example.com" }
   → project_id

2. topvisor_add_searcher { project_id, searcher_key: 0 }
   # 0 = Yandex; 1 = Google

3. topvisor_add_region { project_id, searcher_key: 0, region_key: <catalog_key>, region_depth: 1 }
   # region_key is the Topvisor catalog key, NOT region_index

4. topvisor_list_regions { project_id }
   → region_index (use this, not region_key, in all subsequent calls)

5. topvisor_import_keywords { project_id, group_name: "main", keywords: "name\nкупить окна\nокна цены" }

6. topvisor_check_price { project_id, regions_indexes: [<region_index>] }
   # Preview cost before spending balance

7. topvisor_check_positions { project_id, regions_indexes: [<region_index>] }
   # Async submit — returns projectsIds, does NOT wait for results

8. (poll) topvisor_list_projects { filters: [{name:"id",operator:"EQUALS",values:[project_id]}], fields: ["id","status_positions","positions_percent"] }
   # Wait until status_positions indicates completion

9. topvisor_get_history { project_id, regions_indexes: [<region_index>], date1: "2026-06-01", date2: "2026-06-22" }
   → keywords[] with positionsData

region_key vs region_index

⚠️ These are different values. A common source of errors:

  • region_key — the catalog identifier used when adding a region (topvisor_add_region). Comes from the Topvisor regions catalog and differs per search engine.
  • region_index — the sequential index assigned by Topvisor after a region is added to your project. This is what topvisor_get_history, topvisor_check_price, topvisor_check_positions, and topvisor_get_snapshots expect.

Always call topvisor_list_regions after adding a region to retrieve the assigned region_index. Do not assume region_key === region_index.

Confirmed live on project 29248320 (green-line24.ru):

City region_key region_index
Samara 51 83
Tolyatti 240 112
Zhigulyovsk 11132 829
Syzran 11139 557

Note: region_key=51 for Yandex corresponds to the Yandex rids value for Samara — but this coincidence does not hold in general.

topvisor_list_regions uses get/projects_2/projects with show_searchers_and_regions=2 (the searchers_regions/export endpoint returns CSV with no region_index and is not used).

checker/go is async

topvisor_check_positions submits a job to the Topvisor queue and returns immediately with projectsIds. The actual position collection happens in the background — typically minutes to hours depending on the queue and number of keywords/regions.

How to wait for results:

  1. Call topvisor_check_positions → get projectsIds.
  2. Poll topvisor_list_projects with fields: ["id","status_positions","positions_percent"] until the status indicates completion.
  3. Then call topvisor_get_history to read the collected positions.

There is no built-in wait/poll in this MCP tool (v1). This is intentional — position checks can take hours, which would exceed MCP client timeouts.

Error format

Topvisor API always returns HTTP 200. Errors are indicated in the response body:

{
  "result": null,
  "errors": [
    {
      "code": 53,
      "string": "Authorisation error",
      "detail": { "header": "Authorization" }
    }
  ]
}

Known error codes: 53 = authorization error (wrong/missing credentials); 1002 = parameter value mismatch.

When a tool encounters a Topvisor error, it returns:

{
  "isError": true,
  "errors": [{ "code": 53, "string": "Authorisation error", "detail": {...} }]
}

Known limitations and API quirks

  • Rate limits: Topvisor API rate limits are not documented. This server does not implement automatic retries or backoff in v1. If you hit rate limit errors, add delays between calls manually.
  • Async checker: topvisor_check_positions does not poll for completion. You must poll topvisor_list_projects yourself.
  • Undocumented methods: Several edit/delete methods (edit/projects_2/projects/*, del/keywords_2/keywords, etc.) have undocumented parameters and are not available as typed tools. Use topvisor_request as an escape hatch.
  • region_key for specific cities: The Topvisor region catalog uses its own identifiers per search engine. Use topvisor_request with get/positions_2/searchers_regions to browse available regions.
  • topvisor_balance: The bank_2/info endpoint returns empty result:[] for single-user accounts regardless of parameters (confirmed: fields causes error 2003, all other params ignored). Balance is computed as sum of bank_2/history transactions.
  • topvisor_add_project: Returns a bare integer (project_id), not an object or array.
  • topvisor_add_searcher / topvisor_add_region: Return 0 on duplicate add (idempotent, not an error).
  • searchers_regions/export: Returns CSV in windows-1251 encoding with no region_index field — not usable for the key→index mapping. Use topvisor_list_regions instead (which calls projects_2/projects with show_searchers_and_regions=2).

License

MIT © 2026 SCom-82

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选