Token-budgeted, self-healing browser automation MCP server for AI agents. Self-host (stdio) or run as a hosted HTTP/Streamable MCP endpoint with API-key auth.
Hound gives AI agents browser control with budgeted responses and delta snapshots (returns only what changed). It also heals selectors and remembers verified repairs per site.
| Tool | Purpose |
|---|---|
browser_open |
Navigate and get a budgeted snapshot (url) |
browser_snapshot |
Re-read page; delta by default (full_snapshot) |
browser_act |
action + target (ref like e3 or CSS), optional value — supports click/fill/press/select/hover |
browser_find |
Find by accessible text (optional role,limit) |
browser_extract |
Extract with root + fields map; confidence/verified |
browser_heal |
Repair selector for logical_key; verify & remember |
browser_content |
Budgeted, cleaned text extraction (page or selector) |
browser_eval |
Run JS in page context, return budgeted result |
browser_wait |
Wait for selector/text/state before next action |
browser_scroll |
Scroll page or element (up/down) |
browser_screenshot |
JPEG screenshot (base64 when within budget, else size metadata) |
browser_pdf |
PDF export (base64 when within budget) — Chromium |
browser_budget_report |
Session token spend + optimizer/selector stats |
All tools accept max_tokens and enforce budgeted responses (profile degradation + truncation reporting). Screenshots/PDFs are budget-aware: if the payload would blow the token budget, Hound returns size metadata instead of dumping base64.
Benchmark (bench/run_fixed2.py, see bench/results/latest.json): baseline = full ARIA snapshot + body text per step; Hound = budgeted/delta.
| Page | Conventional | Hound | Reduction |
|---|---|---|---|
| example.com | 8,781 | 614 | 93.0% |
| news.ycombinator.com | 1,687 | 192 | 88.6% |
| en.wikipedia.org/wiki/Web_scraping | 212,358 | 1,145 | 99.5% |
Overall: 222,826 → 1,951 tokens (~99.1%). First snapshot has no delta baseline; results vary by page/flow.
| Tool | Purpose |
|---|---|
browser_open |
Navigate and get a budgeted snapshot (url) |
browser_snapshot |
Re-read page; delta by default (full_snapshot) |
browser_act |
action + target (ref like e3 or CSS), optional value |
browser_find |
Find by accessible text (optional role,limit) |
browser_extract |
Extract with root + fields map; confidence/verified |
browser_heal |
Repair selector for logical_key; verify & remember |
browser_budget_report |
Session token spend |
pip install git+https://github.com/sumitrao9/hound
playwright install chromium
hound-mcpMCP client config:
{"mcpServers":{"hound":{"command":"hound-mcp","env":{"HOUND_DEFAULT_BUDGET":"1200","HOUND_HEADLESS":"1"}}}}export HOUND_API_KEY="your-secret-key" # optional but recommended for hosted
export HOUND_HOST=0.0.0.0
export HOUND_PORT=8000
hound-mcp-http
# MCP endpoint: http://HOST:8000/mcp (also mounted at /)
# Health: /healthAuth: send Authorization: Bearer <HOUND_API_KEY>. Supports HOUND_API_KEYS (comma-separated). No key set = open (dev only).
docker build -t hound-mcp .
docker run -p 8000:8000 -e HOUND_API_KEY=secret hound-mcp hound-mcp-http| Variable | Default | Notes |
|---|---|---|
HOUND_DEFAULT_BUDGET |
1200 |
Token budget |
HOUND_MAX_BUDGET |
20000 |
Max budget |
HOUND_HEADLESS |
1 |
Headless browser |
HOUND_DB |
hound-selectors.db |
Selector memory DB |
HOUND_API_KEY / HOUND_API_KEYS |
(unset) | Bearer auth for HTTP mode |
HOUND_HOST / HOUND_PORT |
0.0.0.0 / 8000 |
HTTP bind |
HOUND_JSON_RESPONSE |
0 |
JSON responses vs SSE |
HOUND_STATELESS |
0 |
Stateless sessions |
- Hosted 24/7 MCP endpoint (managed, API key, usage limits) — request access / waitlist (INR ₹799–₹3,999/mo or $9–$49/mo + usage, estimate/validate; pay via Razorpay/Stripe/checkout link on approval).
- Pro/support: integration help, custom tools, authorized automation workflows.
- Agensi skill: installable skill package for local MCP setup.
- GitHub Sponsors / inquiries: https://github.com/sumitrao9/hound/issues
Only automate sites/data you are authorized to access. Respect ToS/law. Budgeting may truncate (use browser_find/browser_extract). Requires Playwright/Chromium.
pip install -e ".[dev]"
ruff check .
pytest -v -m "not live"MIT