Skip to main content
Glama
aparser-mcp

aparser-mcp

by izzipizzy

aparser-mcp

English · Русский

npm

An MCP server that exposes the A-Parser HTTP API as tools, so an AI agent can drive parsing tasks directly — run a SERP or suggest query, queue bulk jobs, poll them, and fetch results.

Transport: stdio. Built on the official TypeScript MCP SDK.

Requirements

  • A running A-Parser instance with the API enabled (Settings → API) and its password. The API listens on http://<host>:9091/API.

  • Node.js ≥ 18 (for npx, or to build from source).

Related MCP server: arsenkin-mcp

Run

Published on npm — no install needed, npx fetches and runs it:

AP_URL=http://<host>:9091/API AP_PASSWORD=<password> npx -y aparser-mcp
git clone <this-repo> aparser-mcp && cd aparser-mcp
npm install          # builds dist/ via the prepare script
AP_URL=http://<host>:9091/API AP_PASSWORD=<password> npm start

Configure

The server reads three environment variables:

Variable

Required

Description

AP_URL

yes

API base URL, e.g. http://127.0.0.1:9091/API (a trailing /API is added if missing).

AP_PASSWORD

yes

API password from the A-Parser web UI.

AP_TIMEOUT

no

Per-request HTTP timeout in seconds (default 130).

Register with Claude Code

claude mcp add aparser \
  --env AP_URL=http://<host>:9091/API \
  --env AP_PASSWORD=<password> \
  -- npx -y aparser-mcp

Or add it to .mcp.json / your MCP client config:

{
  "mcpServers": {
    "aparser": {
      "command": "npx",
      "args": ["-y", "aparser-mcp"],
      "env": {
        "AP_URL": "http://<host>:9091/API",
        "AP_PASSWORD": "<password>"
      }
    }
  }
}

Usage — just ask

Once the server and the aparser skill are installed, ask in plain language and the skill picks the parser, geo, and output format for you:

  • “aparser, find positions of domain.com for: query one, query two in Serbia” → SE::Google::Position on google.rs (gl=rs, hl=sr) → rank per query.

  • “aparser, Google autocomplete for buy iphone” → suggestions.

  • “aparser, top-20 Google results for best running shoes in Spain” → SERP links.

More concrete tool-call examples: skills/aparser/examples.md.

Tools

Tool

What it does

ping

Health check. Returns "pong".

info

Server status: tasks in queue, pid, list of available parsers.

list_parsers

Just the parser names (e.g. SE::Google, SE::Google::Suggest).

parser_info

A parser's result-field schema (arrays + flat) for building a resultsFormat.

get_proxies

Live proxies from the checkers as {"ip:port": ["type", ...]}.

one_request

Run one parse synchronously and return the result. Best for single lookups.

add_task

Queue a bulk task saved to a file. Returns the task id.

task_state

A task's status and live stats.

wait_task

Poll a task until it completes; returns the final state.

task_results

Single-use download URL for a completed task's results file.

one_request vs add_task

  • one_request — synchronous, one query, result returned inline. Use it for a suggest lookup, a single SERP, checking one page.

  • add_task — asynchronous queue, many queries, output written to a file on the server. Use wait_task then task_results to retrieve it.

Parser stack & resultsFormat

add_task takes a parsers stack — a list of [name, preset, ...overrides] entries:

[["SE::Google", "default"]]

In results_format, $p1 refers to the first entry, $p2 the second, etc. Call parser_info("SE::Google") to see the fields you can reference:

$p1.serp.format('$link; $anchor\n')

Per-request overrides (in one_request.options or a parsers entry) use the shape {"type": "override", "id": "<param_id>", "value": <value>}.

Examples

Copy-adaptable request examples — suggests, SERP, position checks with geo, captcha solving, desktop/mobile, bulk tasks — are in skills/aparser/examples.md.

Companion skill (aparser)

The skills/aparser/ directory holds a Claude Code skill that teaches an agent when and how to call these tools — parser naming, presets, geo, resultsFormat, and the position-checking query format. Install it so Claude picks it up:

# easiest — via skills.sh (installs into every supported agent):
npx skills add izzipizzy/aparser-mcp

# or manually as a personal Claude Code skill:
cp -r skills/aparser ~/.claude/skills/aparser

It then loads automatically when you ask about A-Parser positions/SERPs/suggests. (Inside the izzy plugin it is the izzy:aparser skill.) See skills/aparser/SKILL.md and skills/aparser/api-reference.md.

Notes

  • Parsers that hit search engines need working proxies. If one_request hangs or errors, check get_proxies and the parser's proxy settings in A-Parser.

  • Secrets are never stored in this repo. Keep AP_PASSWORD in your MCP client config or the environment.

Development

npm install     # install deps + build
npm run build   # compile src/ -> dist/
npm start       # run the built server (needs AP_URL / AP_PASSWORD)

Source is a single file: src/index.ts.

Available Tools

10 tools
add_taskAdd taskA

Queue a bulk parsing task. Returns the task id (taskUid). Poll it with task_state / wait_task, then fetch the output with task_results. parsers: stack as a list of [parser_name, preset_name, ...overrideObjects], e.g. [["SE::Google","default"]]. $p1 in a resultsFormat refers to the first entry. results_format: output template, e.g. "$p1.serp.format('$link\n')"; omit to use the preset's own format. results_file_name supports macros like $datefile.format() ($taskId is NOT a valid macro).

Inputs: parsers (required), do_log, queries, priority, +8 more.

get_proxiesGet proxiesA

Get live proxies from the proxy checkers as {"ip:port": ["type", ...]}.

Inputs: checkers.

infoInfoA

Get A-Parser status: tasks in queue, pid, and the list of available parsers.

Inputs: no named parameters.

list_parsersList parsersA

List the names of all installed parsers (e.g. "SE::Google", "SE::Google::Suggest").

Inputs: no named parameters.

one_requestOne requestA

Run a single parse synchronously and return the result immediately. Best for one-off lookups (a suggest query, one SERP, one page). For many queries or saved output files, use add_task instead. raw_results=true -> structured results array (recommended); false -> a single formatted resultString from the preset. options: per-request overrides, each {type:'override', id:'', value:}.

Inputs: query (required), parser (required), preset, options, +2 more.

parser_infoParser infoA

Describe a parser's result fields. Returns the results schema: arrays (nested lists like serp/ads) and flat (scalar fields like $query, $totalcount) that you can reference in a resultsFormat template. Call this before writing a resultsFormat for add_task.

Inputs: parser (required).

pingPingA

Health-check the A-Parser server. Returns "pong" when reachable.

Inputs: no named parameters.

task_resultsTask resultsA

Get a single-use download URL for a completed task's results file.

Inputs: task_uid (required).

task_stateTask stateB

Get a task's status and live stats (status, queriesDone, resultsCount, ...).

Inputs: task_uid (required).

wait_taskWait for taskB

Poll a task until it completes (or the timeout elapses). Returns the final state.

Inputs: task_uid (required), timeout, interval.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    A4/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool targets a distinct concern: health (ping), server status (info), parser discovery (list_parsers), schema introspection (parser_info), proxy access (get_proxies), synchronous execution (one_request), and async task lifecycle (add_task, task_state, wait_task, task_results). Even task_state and wait_task differ clearly: one returns a snapshot, the other blocks until completion.

    Naming Consistency4/5

    Task operations mostly use a task_ prefix (add_task, task_state, wait_task, task_results) and parser operations pair list_parsers with parser_info. However, the mix of verb-first names (add_task, get_proxies) and resource-first names (task_state, parser_info), plus the outlier one_request, prevents a perfect score.

    Tool Count5/5

    With 10 tools, the set is well-scoped for a parsing automation server. Every tool serves a clear role in the workflow—health, info, discovery, schema, proxies, single request, task submission, monitoring, and retrieval—with no redundancy or bloat.

    Completeness5/5

    The surface covers the full lifecycle: health check, server status, parser listing and schema introspection, proxy management, synchronous one-off parsing, bulk task submission, monitoring (both snapshot and blocking), and result retrieval. No critical operation is missing for typical usage.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to interact with the Apify platform to manage actors, monitor runs, and retrieve scraped data from datasets. It supports natural language commands for executing web scrapers, managing tasks, and accessing key-value stores.
      28
      MIT
    • F
      license
      A
      quality
      B
      maintenance
      Enables SEO task management, including estimating, submitting, and monitoring jobs, retrieving results, and exporting CSV/JSONL data.
      18
      1
      -
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI assistants to search Google SERPs, track rankings across locations, run Lighthouse SEO audits, find broken internal links, analyze backlinks, and get keyword volume data through a hosted service.
      15
      16 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Gives AI agents live search data over Streamable HTTP: Google and Bing results with AI Overview citations, keyword volume/difficulty, ranked keywords, competitor gaps, backlinks and referring domains, plus single-page SEO audits. Also exposes a pass-through for any other DataForSEO v3 endpoint, billed per call.
      285 npm
      MIT