izzipizzy/aparser-mcp/aparser
- community
Checking that the SKILL.md file is still in the repository.
Use when parsing or scraping through A-Parser — checking Google/Bing/Yandex positions of a site, collecting SERPs, suggestions, keyword data, or running any A-Parser task via its API/MCP server. Triggers on "A-Parser", "aparser", "парсинг позиций", "сбор выдачи", "проверить позиции сайта", "собрать подсказки".
Install
npx vskill@latest install izzipizzy/aparser-mcp/aparserSKILL.md
aparser
Overview
Управление A-Parser (парсер SERP/подсказок/кейвордов и т.д.) из агента через MCP-сервер `aparser`. Сервер оборачивает HTTP API A-Parser (:9091/API) в инструменты. Полный справочник методов — api-reference.md.
When to use
- Проверить позиции сайта в Google/Bing/Yandex по списку ключей (+ гео).
- Собрать выдачу (ссылки/анкоры), подсказки, related, PAA.
- Прогнать любой установленный парсер A-Parser над списком запросов.
- Управлять задачами (очередь, статус, скачивание результатов).
Инструменты (в Claude Code — mcp__aparser__<tool>): ping, info, list_parsers, parser_info, get_proxies, one_request, add_task, task_state, wait_task, task_results.
Готовые примеры запросов: `examples.md` (EN) · `examples.ru.md` (RU) — подсказки, выдача, позиции с гео, капча (XEvil), desktop/mobile, батчи.
Setup (один раз)
MCP-сервер — пакет aparser-mcp (TypeScript, stdio, ставится через npx). Скил обращается только к твоему собственному серверу A-Parser; доступ читается из окружения, нигде не хардкодится, не логируется и не пересылается третьим сторонам. Задай в окружении AP_URL (адрес твоего A-Parser) и AP_PASSWORD (ключ API), затем зарегистрируй сервер:
ping должен вернуть pong.
Дефолты (зашиты в MCP, переопределяемы)
add_task/one_request подставляют по умолчанию — под лимит прокси этого сервера:
- `config_preset="default"` — обычный пресет (есть на любом инсталле A-Parser). На
сервере включён «Динамический лимит потоков» (Настройки → Общие настройки) + «Общий лимит потоков» = лимиту прокси (~50), поэтому A-Parser сам держит сумму активных потоков ≤ лимиту и раздаёт их между заданиями по приоритету (priority/prio 1–100). Бюджет вручную бить (кастомные 50th/th17 = 3×17) больше не нужно. Переопредели через env AP_CONFIG_PRESET или аргументом. (Если динамический лимит выключат — вернись к ручному пресету под лимит прокси + «Максимум активных заданий».)
- `proxyretries=40` — подставляется в каждый парсер стека, где опция есть и её не задали
(env AP_PROXYRETRIES). Это сток-дефолт A-Parser, ок для http/one_request. На браузере (`engine=chrome`) 40 = зависания на последнем ключе — там ставь 5-15 явно (см. «Капча, ретраи, скорость»).
- `do_log=true` (
doLog:"db") — логи в БД A-Parser (смотреть в UI).
По сырому API этих дефолтов нет — задавай configPreset, proxyretries, doLog:"db" сам.
Без MCP — сырой HTTP API (когда MCP тупит/недоступен)
MCP — лишь тонкая обёртка над HTTP: те же методы дёргаются POST-запросом на твой собственный сервер A-Parser (AP_URL), тело JSON {"action":"<method>","data":{...}}, ответ {"success":1,"data":...}. Ключ доступа берётся из окружения (AP_PASSWORD, см. Setup). Готовые примеры запросов (ping/oneRequest), curl-шаблон и полный список методов с шаблоном `addTask` — в [api-reference.md](api-reference.md). Батч: addTask → вернёт taskUid; опрашивай getTaskState; готово → getTaskResultsFile (одноразовый URL на скачивание). addTask требует ПОЛНЫЙ набор полей (queryFormat — массив, doLog — enum no|memory|db, keepUnique:"No", resultsUnique:"no", …) — бери шаблон из api-reference.md. Логи задач (doLog:"db") через API не скачать — смотри в UI A-Parser; для диагностики используй oneRequest (лог в data.logs) или getTaskState.stats.
one_request vs add_task
- `one_request` — 1 запрос, результат синхронно. Для разовой проверки
(одна подсказка, одна выдача, одна страница).
- `add_task` — много запросов, результат пишется в файл на сервере. Затем
wait_task → task_results (одноразовый URL на скачивание). Для батчей.
Настройки парсеров (отдельные файлы)
Опции (id + дефолт + описание) и поля результата каждого парсера — в `parsers/`, по файлу на парсер (напр. `parsers/SE.Google.md`, `parsers/SE.Google.Position.md`). Сгенерированы с живого сервера скриптом scripts/gen-parser-docs.mjs — перегенерируй при обновлении A-Parser. Перед сборкой задачи открой файл нужного парсера.
Как строить запрос
list_parsers— точное имя парсера (SE::Google,SE::Google::Suggest,
SE::Google::Position, SE::Bing, SE::Yandex, ...).
- Открой
parsers/<Parser>.md— валидныеidопций (+ дефолты) и поля результата
(arrays типа serp и flat типа $totalcount). parser_info(...) даёт то же с сервера онлайн.
- Опции парсера меняются override-объектами внутри записи стека:
parsers=[["SE::Google","default", {"type":"override","id":"pagecount","value":2}]].
results_format:$p1= первая запись стека. Массивы через.format():
"$p1.serp.format('$link;$anchor\\n')".
Валидация опций (чтобы не ронять A-Parser)
Невалидный override-id (опечатка, несуществующая опция) может уронить/дестабилизировать A-Parser. MCP-инструменты `add_task`/`one_request` проверяют это сами — сверяют имя парсера (info.availableParsers) и каждый override-id со списком опций (getParserPreset, кешируется) и при ошибке не постят, а возвращают понятную ошибку со списком валидных id.
По сырому API проверяй сам ПЕРЕД `addTask`/`oneRequest`:
- имя парсера ∈
info.availableParsers; - каждый
{"type":"override","id":X,...}— чтоXесть в ключах
getParserPreset(parser,"default") (для линкованных пресетов допустим X вида Util_ReCaptcha2_preset.key — проверяй базу до точки);
- постить только валидные — иначе задача может не создаться или подвесить сервер.
Гео (страна) в SE::Google
Задаётся override-ами: gl (страна, напр. ar), hl (язык интерфейса, напр. es), domain (гугл-домен, напр. www.google.com.ar). При необходимости — location.
Проверка позиций: SE::Google::Position (важный формат!)
Парсер берёт первый токен запроса как проверяемый домен, остальное — ключ. То есть вход должен быть <домен> <ключ>:
Семантика позиции: число = ранг; 0 = выдача распарсилась, домена нет в глубине (pagecount × ~10); none = запрос не отработал (пустая выдача/капча) — перегнать. Поля результата: $p1.key (ключ), $p1.position, $p1.link, $p1.domain. Наследует все опции SE::Google → см. `parsers/SE.Google.md`: `device` (desktop/mobile) меняет выдачу и позиции, engine (http/browser) — как ходим.
Пример задачи (позиции по стране Аргентина):
Капча, ретраи, скорость (важно)
- Браузер (`engine=chrome`) сам обходит бОльшую часть капчи через JS-редирект —
часто вообще без решалки. engine=http быстрее, но на флагнутых прокси чаще ловит recaptcha.
- Решалка (`Util_ReCaptcha2_preset`) ненадёжна и медленная. На практике капча
чистится редиректом браузера, а не солвером; солвер в основном добавляет долгое ожидание и не гарантирует решение. Для скорости — не подключай решалку: reCaptchaRetries=0 и без Util_ReCaptcha2_preset. Рычаг для упрямых пустых — proxyretries.
- `proxyretries` — главный рычаг и причина зависаний на браузере. Каждая попытка
~30-40с (запуск chromium + переход + бан). Безнадёжный капча-ключ грызёт proxyretries × ~35с, держа активный слот → задача виснет на N-1/N (activeThreads=1, curSpeed=0). Держи 5-15; пустые добивай отдельным пассом с бОльшим proxyretries (изолированно — залипнет только мини-пачка).
- Бюджет потоков = лимит прокси. Сумма потоков ВСЕХ активных задач ≤ лимиту прокси.
На этом сервере включён «Динамический лимит потоков» + «Общий лимит потоков»=лимиту прокси, поэтому хватает обычного пресета (default) — A-Parser сам держит сумму ≤ лимиту и делит по priority. (Без динамического лимита — бей вручную: th17 = 3×17 + «Максимум активных заданий»=3.)
- Быстрый bulk-рецепт (топ-10, тысячи ключей): `engine=chrome, headless=1,
device=mobile, pagecount=1, reCaptchaRetries=0 (без решалки), proxyretries=15, emptyResultRetries=3, пресет на все потоки → десятки-сотни запросов/мин (×10+ к варианту с решалкой). Пустые (~10-30%) добери 2-3 пассами, повышая proxyretries` (15 → 15 → 40).
- Сниппет/анкор найденного у
SE::Google::PositionНЕ в плоских полях ($p1.snippet
пуст) — только в массиве serp. Выведи serp в results_format и сматчи по найденной $p1.link, чтобы достать его snippet/anchor.
- Логи задач (
doLog:"db") через API не скачиваются — смотри в UI A-Parser; для
диагностики гоняй oneRequest (лог в data.logs) или читай getTaskState.stats.
Common Mistakes
- Позиции без префикса домена.
SE::Google::Positionсъест первое слово ключа
как домен. Всегда "<домен> <ключ>".
- `$taskId` в имени файла. Не валидный макрос → файл не создаётся,
task_results
вернёт «File not exists». Используй дефолт $datefile.format().txt или статичное имя.
- Поисковые парсеры без прокси.
SE::Googleи т.п. требуют рабочих прокси. Проверьget_proxies. - Массовые `none` = капча/баны, а не «не в топе». Как чинить (и быстро) — раздел
«Капча, ретраи, скорость» выше.
- Забыть про device. desktop и mobile дают разную выдачу → разные позиции.
Фиксируй device осознанно.
- Ждать долгий батч синхронно.
wait_taskс таймаутом; если не успел —
вернёт статус, а задача продолжит крутиться. Забери позже через task_results.
- Ручной curl вместо MCP. Сначала MCP-инструменты; сырой HTTP (api-reference.md)
— только для методов, которых нет в сервере.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/aparser/SKILL.md
Popularity
- Repository stars
- 3
- Repository forks
- 2
- 7-day trend score
- 12
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/izzipizzy/aparser-mcp/aparser)