Skip to main content

dawg-mcp

An MCP server that gives AI agents (Claude Code, Codex, …) direct access to the DAWG platform.

🇷🇺 Built for Runet. DAWG is purpose-built for the Russian segment of the web: Russian residential proxies and geolocation (city slugs like moskva, spb, …) and stealth fingerprints tuned for RU sites. If your agent needs to browse or scrape Russian sites (Yandex, Ozon, Wildberries, Avito, gosuslugi, banks, …), this is the tool it was made for.

  • 🌐 Remote stealth browser — provision an on-demand Chromium (RU proxy, geo, stealth baked in) and drive it with snapshot/click/type/screenshot tools.
  • 🔎 Web scraping — single-page scrape plus crawl/batch jobs returning clean markdown/text/html.
  • 📊 Account usage — read the current plan, limits and consumption for your API key.

The browser tools mirror the interaction model of the official @playwright/mcp: the agent takes an accessibility snapshot of the page (an ARIA tree with [ref=eN] markers), then targets elements by ref. This is far more reliable and token-efficient than screenshot-and-guess.

Browsers run on DAWG infrastructure — no local browser is launched or downloaded; the server only attaches to the remote Chromium over CDP.

Requirements

Install / run

# Recommended — straight from PyPI (fast: downloads a prebuilt wheel)
uvx dawg-mcp

# Or with pip
pip install dawg-mcp && dawg-mcp

# From GitHub (no PyPI), pinned to a tag:
uvx --from git+https://github.com/dawgswarm/dawg-mcp@v0.1.0 dawg-mcp

# Local checkout (development) — run from the repo root
uv run dawg-mcp

# As a module
python -m dawg_mcp

DAWG_API_KEY must be set in the environment. No playwright install is needed — the server connects to a remote browser and never launches Chromium locally.

Register with an agent

Claude Code

Project scope — commit .mcp.json (it reads ${DAWG_API_KEY} from your shell):

{
  "mcpServers": {
    "dawg": {
      "type": "stdio",
      "command": "uvx",
      "args": ["dawg-mcp"],
      "env": {
        "DAWG_API_KEY": "${DAWG_API_KEY}",
        "DAWG_BASE_URL": "${DAWG_BASE_URL:-https://dawgswarm.ru}"
      }
    }
  }
}

Or via the CLI:

claude mcp add dawg --scope user --env DAWG_API_KEY=your_key -- uvx dawg-mcp

# local working tree:
claude mcp add dawg --scope user --env DAWG_API_KEY=your_key \
  -- uv run --directory /path/to/dawg-mcp dawg-mcp

Codex

Add to ~/.codex/config.toml (see examples/codex_config.toml):

[mcp_servers.dawg]
command = "uvx"
args = ["dawg-mcp"]

[mcp_servers.dawg.env]
DAWG_API_KEY = "your_key"
DAWG_BASE_URL = "https://dawgswarm.ru"

Configuration

Env var Required Default Description
DAWG_API_KEY yes — Your DAWG API key
DAWG_BASE_URL no https://dawgswarm.ru Platform base URL
DAWG_PROVISION_TIMEOUT no 120 Max seconds to wait for a browser to be ready
DAWG_POLL_INTERVAL no 2 Seconds between readiness polls
DAWG_DEFAULT_NAV_TIMEOUT_MS no 30000 Default navigation timeout
DAWG_DEFAULT_ACTION_TIMEOUT_MS no 15000 Default action timeout
DAWG_SNAPSHOT_MAX_CHARS no 60000 Truncate snapshot/content output
DAWG_MAX_SESSIONS no 4 Max concurrent browsers
DAWG_LOG_LEVEL no INFO Log level (logs go to stderr)

Tools

Browser — lifecycle

Tool Description
browser_provision(proxy?, geo?) Provision a remote stealth Chromium. geo = city slug ("moskva") or "lat,lon". Returns session_id + initial snapshot.
browser_release(session_id?) Release a browser back to the pool.
browser_list_sessions() List active sessions.

Browser — driving

All take an optional session_id (defaults to the sole active session) and return a fresh AI snapshot after acting. Target elements by ref from the latest browser_snapshot.

Tool Description
browser_navigate(url, timeout_ms?) Go to a URL.
browser_navigate_back() / browser_navigate_forward() History navigation.
browser_snapshot() See the page — ARIA tree with [ref=eN] markers.
browser_click(element, ref, double?, button?) Click an element by ref.
browser_type(element, ref, text, submit?, clear?) Type into a field by ref.
browser_fill_form(fields) Fill many fields at once ([{element, ref, value}]).
browser_select_option(element, ref, values) Choose <select> option(s).
browser_hover(element, ref) Hover an element.
browser_press_key(key) Press a key ("Enter", "Control+a", …).
browser_wait_for(text?, text_gone?, time_ms?) Wait for text / its disappearance / a delay.
browser_get_text(format?, selector?) Get page text or HTML.
browser_take_screenshot(full_page?, ref?) PNG image (visual verification only).
browser_evaluate(function, ref?) Run JS, return JSON result.
browser_tabs(action, index?, url?) list / new / select / close tabs.

Scraper

Tool Description
scrape_page(url, format?, main_content?, include_links?, render?, timeout_ms?) Scrape one URL → content.
scrape_crawl(url, max_depth?, max_pages?, …) Start a crawl job → job_id.
scrape_batch(urls, concurrency?, …) Start a batch job → job_id.
scrape_job_status(job_id, wait?, wait_timeout?) Poll a crawl/batch job.
scrape_cancel_job(job_id) Cancel a job.

Account

Tool Description
account_usage() Current usage and tariff plan.

Typical agent flow

browser_provision()                         → session_id + snapshot
browser_navigate(url="https://...")          → snapshot with [ref=eN] markers
browser_click(element="Login", ref="e12")    → fresh snapshot
browser_type(element="Email", ref="e8", text="...", submit=true)
browser_take_screenshot()                    → PNG to confirm visually
browser_release()

If a ref is stale (the page changed), the tool returns an error with a fresh snapshot appended so the agent can re-select.

Development

uv venv && uv pip install -e ".[dev]"
uv run pytest            # 21 unit/integration tests (no network)
uv run ruff check .

# Live end-to-end smoke test (needs a real key):
DAWG_API_KEY=... uv run python examples/smoke_test.py

# Inspect over stdio with the MCP Inspector:
DAWG_API_KEY=... npx @modelcontextprotocol/inspector uv run dawg-mcp

License

MIT — see LICENSE.

Metadata

Release files for dawg-mcp 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dawg-mcp 0.1.3
File Size Uploaded Provenance Actions
dawg_mcp-0.1.3.tar.gz 105.6 kB Without provenance Details for dawg_mcp-0.1.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dawg-mcp 0.1.3
File Interpreter ABI Platform Actions
dawg_mcp-0.1.3-py3-none-any.whl Python 3 none any Details for dawg_mcp-0.1.3-py3-none-any.whl

Total release size: 126.6 kB

Release files / dawg_mcp-0.1.3.tar.gz

Download URL dawg_mcp-0.1.3.tar.gz
Size 105.6 kB
Tags Source
SHA-256 checksum
How to use checksums
8dc45d81aa1d70d8f71fec75d45384b690befc763af35300e878d70ba29afb93
BLAKE2b-256 checksum
How to use checksums
8e761b3ae42c7a6c5289189047df7fb9b55488b3c07d1c26528b2781cb615c5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / dawg_mcp-0.1.3-py3-none-any.whl

Download URL dawg_mcp-0.1.3-py3-none-any.whl
Size 21.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5b611794c8a7705938c6f9e62399a1dca45cbab909bd3d63321abdf28c851085
BLAKE2b-256 checksum
How to use checksums
eb9d4942991888236f939c2390830b684d9d1982244e369d4ba755873e23489c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for dawg-mcp 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page