# SEO Tools: A-Parser bridge (npm · seo-tools-mcp-aparser)

Bridge to a self-hosted A-Parser: SERP, suggests and 150+ parsers via its API (read-only).

- Trust score: 73/100 (medium)
- Change this week: +7
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-16

## Components

- npm · `seo-tools-mcp-aparser`: 73/100 (this document), [markdown](https://verifymcp.io/servers/antohins-seo-tools-mcp-aparser/seo-tools-mcp-aparser.md), [page](https://verifymcp.io/servers/antohins-seo-tools-mcp-aparser/seo-tools-mcp-aparser)

## Channel facts

- Registry: `npm`
- Package: `seo-tools-mcp-aparser`
- Version: `1.7.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-16.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 96 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 7 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 67/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2592 tokens (~199/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 40/100
  - Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 93/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 79% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add antohins-seo-tools-mcp-aparser -- npx -y seo-tools-mcp-aparser
```

### Codex

```bash
codex mcp add antohins-seo-tools-mcp-aparser -- npx -y seo-tools-mcp-aparser
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "antohins-seo-tools-mcp-aparser": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "seo-tools-mcp-aparser"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add antohins-seo-tools-mcp-aparser --command npx --arg -y --arg seo-tools-mcp-aparser
```

### Hermes

```yaml
mcp_servers:
  antohins-seo-tools-mcp-aparser:
    command: "npx"
    args: ["-y", "seo-tools-mcp-aparser"]
```

### Other

```json
{
  "mcpServers": {
    "antohins-seo-tools-mcp-aparser": {
      "command": "npx",
      "args": [
        "-y",
        "seo-tools-mcp-aparser"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-16 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-14 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-12 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-11 (score 70, +3)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-10 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-09 (score 66, 0)

- [functional] Package version: 1.5.1 → 1.7.0

### 2026-08-08 (score 66, +27)

- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Stability: unverified → 0.13
- [functional improvement] MCP protocol: unverified → pass
- [functional] Package version: 1.4.0 → 1.7.0
- [functional] Package version: 1.4.0 → 1.5.1

### 2026-08-07 (score 39, −21)

- [security improvement] Known CVEs: partial → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Security disclosure: fail → pass
- [functional] First check of Schema quality: unverified
- [functional] Dependency health: partial → 0.85
- [functional] Package version: 1.4.0 → 1.5.1

## MCP tools (13)

### `aparser_auth_status` (~74 tokens)

Статус авторизации aparser: какие ключи заданы (маскированно), каких не хватает, как их получить. ВЫЗЫВАТЬ ПЕРВЫМ в начале работы с aparser. Если чего-то нет — запросить значения у пользователя и сохранить через aparser_set_credentials.

### `aparser_set_credentials` (~275 tokens)

Сохранить ключи aparser в /tmp/.config/seo-tools-mcp/.env (права 600) и применить сразу, без перезапуска сервера. Передавать только обновляемые поля. account — сохранить в именованный профиль (мультиаккаунт). Значения даёт пользователь; в ответе они маскируются.

Input parameters:

- `APARSER_GOOGLE_PRESET` (string): Пресет по умолчанию для SE::Google (имя из GUI)
- `APARSER_PASSWORD` (string): Пароль API A-Parser (Settings → API)
- `APARSER_PROXY_CHECKERS` (string): Прокси-пачки по умолчанию (имена чекеров, через запятую)
- `APARSER_URL` (string): URL API вашего A-Parser, напр. http://IP:9091/API (Settings → API)
- `APARSER_USE_PROXY` (string): Использовать прокси по умолчанию (true/false)
- `APARSER_YANDEX_PRESET` (string): Пресет по умолчанию для SE::Yandex
- `account` (string): Имя аккаунта-профиля (мультиаккаунт): ключи сохранятся с суффиксом __<account>

### `aparser_ping` (~70 tokens)

Проверка связи с A-Parser и пароля API (метод ping). Быстрый способ убедиться, что инстанс доступен.

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной

### `aparser_status` (~122 tokens)

Вердикт готовности A-Parser: версия, число установленных парсеров, очередь/потоки (info) + суммарно живых прокси (getProxies). ready=false, если живых прокси 0 — SERP через прокси работать не будет: поднимите Proxy Checker в GUI (либо serp-инструменты допускают use_proxy=false на свой риск).

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной

### `aparser_proxies` (~165 tokens)

Живые (проверенные) прокси на инстансе A-Parser (метод getProxies). checkers — имена прокси-пачек (proxy checkers); без них — по всем пачкам. Возвращает { count, byType, truncated, proxies:[{address,type}] }: count — полное число живых, список обрезан до 100 (truncated=true). Логины/пароли прокси НЕ выводятся.

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной
- `checkers` (array): Имена прокси-пачек (proxy checkers). Пусто = все пачки.

### `aparser_parsers` (~74 tokens)

Список парсеров, установленных на инстансе A-Parser (из метода info). Полезно перед aparser_request/aparser_parser_fields.

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной

### `aparser_parser_fields` (~130 tokens)

Какие поля результата умеет вернуть парсер (метод getParserInfo): flat-поля (напр. query) и array-поля (напр. serp, ads, related). Используйте, чтобы понять структуру перед aparser_request с произвольным парсером.

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной
- `parser` (string, required): Идентификатор парсера, напр. SE::Google, SE::Yandex::Wordstat, Net::HTTP

### `aparser_get_preset` (~168 tokens)

Прочитать опции готового config-пресета парсера (метод getParserPreset): useproxy, домен, hl/gl, device, выбор прокси-чекеров и т.д. Помогает переиспользовать/подправить существующую настройку. preset по умолчанию — default. Значения чувствительных опций (pass|key|token|secret) маскируются.

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной
- `parser` (string, required): Идентификатор парсера, напр. SE::Google
- `preset` (string): Имя пресета из GUI (по умолчанию default)

### `aparser_serp_google` (~370 tokens)

Органическая выдача Google через ваш A-Parser (парсер SE::Google, синхронно). Прокси по умолчанию включены + preflight-проверка живых прокси. Возвращает { serp:[{position,url,anchor,snippet,flags}], related, ads, totalcount, success, empty, results_present }. Смотрите success/diagnostic: success=false + diagnostic — капча или выжженные прокси (нужны свежие); empty=true — легитимная пустая выдача; results_present=false — битый ответ API (note с пояснением). Каждая страница pages — отдельный заход к поисковику: pages>1 заметно дольше и быстрее выжигает прокси.

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной
- `checkers` (array): Прокси-пачки (proxy checkers) на этот запрос; переопределяет пресет (по умолчанию — env APARSER_PROXY_CHECKERS)
- `domain` (string): Домен Google (google.com/google.ru…)
- `gl` (string): Страна поиска (gl)
- `hl` (string): Язык интерфейса (hl)
- `pages` (integer): Сколько страниц выдачи собрать (каждая — отдельный заход, дольше)
- `preset` (string): Имя config-пресета из GUI (по умолчанию — из env APARSER_*_PRESET или default)
- `query` (string, required)
- `use_proxy` (boolean): Использовать прокси (по умолчанию — env APARSER_USE_PROXY, обычно true)

### `aparser_serp_yandex` (~330 tokens)

Органическая выдача Яндекса через ваш A-Parser (парсер SE::Yandex, синхронно). region — «Москва»/«Россия»/213 (id региона Яндекса, lr). Прокси по умолчанию включены + preflight. Возвращает { serp:[{position,url,anchor,snippet}], related, ads, totalcount, success, empty, results_present }. Смотрите success/diagnostic: success=false + diagnostic — капча или выжженные прокси; empty=true — легитимная пустая выдача; results_present=false — битый ответ API (note с пояснением). pages>1 — дольше и быстрее выжигает прокси.

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной
- `checkers` (array): Прокси-пачки (proxy checkers) на этот запрос; переопределяет пресет (по умолчанию — env APARSER_PROXY_CHECKERS)
- `pages` (integer)
- `preset` (string): Имя config-пресета из GUI (по умолчанию — из env APARSER_*_PRESET или default)
- `query` (string, required)
- `region` (string): «Москва»/«Россия»/213 — id региона Яндекса (lr)
- `use_proxy` (boolean): Использовать прокси (по умолчанию — env APARSER_USE_PROXY, обычно true)

### `aparser_suggest` (~246 tokens)

Поисковые подсказки Google/Яндекса через A-Parser (парсеры SE::Google::Suggest / SE::Yandex::Suggest). Возвращает список фраз. Прокси по умолчанию включены + preflight-проверка живых прокси (suggest тоже банится без них). results_present=false — API вернул success без results (битый ответ, НЕ пустой список подсказок; см. note).

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной
- `checkers` (array): Прокси-пачки (proxy checkers) на этот запрос; переопределяет пресет (по умолчанию — env APARSER_PROXY_CHECKERS)
- `engine` (string)
- `preset` (string): Имя config-пресета из GUI (по умолчанию — из env APARSER_*_PRESET или default)
- `query` (string, required)
- `use_proxy` (boolean): Использовать прокси (по умолчанию — env APARSER_USE_PROXY, обычно true)

### `aparser_request` (~288 tokens)

Универсальный синхронный запрос к любому парсеру A-Parser (метод oneRequest). Для парсеров, под которые нет типизированного инструмента. options — массив override-опций A-Parser (как есть). raw=true (по умолчанию) → структурированный результат; false → форматированная строка пресета. Env-дефолты serp-инструментов (APARSER_*_PRESET, APARSER_PROXY_CHECKERS, APARSER_USE_PROXY) тут НЕ действуют — пресет и опции задаются только параметрами вызова. results_present=false (raw=true) — API вернул success без results (битый ответ, см. note). Структуру полей парсера смотрите через aparser_parser_fields.

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной
- `options` (array): Override-опции A-Parser (массив), прокидываются как есть
- `parser` (string, required): Идентификатор парсера, напр. SE::Yandex::Wordstat, Net::HTTP, SE::Bing
- `preset` (string)
- `query` (string, required)
- `raw` (boolean): true → structured results; false → resultString пресета

### `aparser_bulk_request` (~280 tokens)

Пакетный синхронный запрос: один парсер, много запросов в несколько потоков (метод bulkRequest). Синхронно — держите объём разумным (лимит 200 запросов). Один HTTP-вызов до 120 с БЕЗ ретраев: при таймауте уменьшите число queries или threads и повторите — сам запрос при этом мог выполниться на инстансе. raw=true: для SE::Google/SE::Yandex результаты нормализуются ({ serp, related, ads, success, … }), для остальных парсеров отдаются как есть; raw=false — resultString пресета. count < requested — часть запросов не выполнена (см. note в ответе). Для больших выгрузок нужна очередь задач (кандидат в v2).

Input parameters:

- `account` (string): Аккаунт-профиль (мультиаккаунт, см. *_auth_status); пусто = основной
- `options` (array): Override-опции A-Parser (массив), прокидываются как есть
- `parser` (string, required)
- `preset` (string)
- `queries` (array, required): Список запросов (до 200 за вызов)
- `raw` (boolean)
- `threads` (integer)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/antohins-seo-tools-mcp-aparser/seo-tools-mcp-aparser#diagnostics

## Score history

- 2026-08-16: 73
- 2026-08-15: 72
- 2026-08-14: 72
- 2026-08-13: 71
- 2026-08-12: 71
- 2026-08-11: 70
- 2026-08-10: 67
- 2026-08-09: 66
- 2026-08-08: 66
- 2026-08-07: 39
- 2026-08-06: 60
- 2026-08-05: 60
- 2026-08-04: 60

## Links

- npm package: https://www.npmjs.com/package/seo-tools-mcp-aparser
- Socket report: https://socket.dev/npm/package/seo-tools-mcp-aparser
- Repository: https://github.com/antohins/seo-tools-mcp
- Changelog RSS feed: https://verifymcp.io/servers/antohins-seo-tools-mcp-aparser/seo-tools-mcp-aparser.xml
- Changelog JSON feed: https://verifymcp.io/servers/antohins-seo-tools-mcp-aparser/seo-tools-mcp-aparser.json
- HTML version of this page: https://verifymcp.io/servers/antohins-seo-tools-mcp-aparser/seo-tools-mcp-aparser
