# Bowmark MCP server

Pre-computed navigation recipes for public websites — skip explore-and-discover.

## Links
- Registry page: https://www.getdrio.com/mcp/ai-bowmark-bowmark
- Repository: https://github.com/Metroxe/bowmark
- Website: https://bowmark.ai

## Install
- Endpoint: https://api.bowmark.ai/mcp?s=r
- Auth: Not captured

## Setup notes
- Remote header: Authorization
- Remote endpoint: https://api.bowmark.ai/mcp?s=r
- Header: Authorization

## Tools
- ask (Find a navigation recipe for a website task) - Pre-computed navigation recipes for public websites. CALL BEFORE any browser action on the open web (navigate, click, fetch, fill, URL guess) — replaces explore-and-discover. Returns `{ status, id?, shortcut?, ui_procedure?, executable?, verify_more?, error? }`.

status=ok: execute exactly. `shortcut` first if present — fill each `{name}` in `template` with the value FROM YOUR TASK (using the parameter's `description`/`format` as the shape), URL-encode, navigate. Else `ui_procedure.steps` in order. The recipe is generic: parameter slots and step descriptions describe what to supply ('the destination'), not literal values — you provide the specifics. EXECUTE OPEN-LOOP: the recipe is authoritative, so run it without taking exploratory snapshots, clicks, scrolls, or screenshots to 'verify' or 'look around' — every extra browser action re-reads the entire page, which is the cost the recipe exists to avoid. Read the page ONLY at a `read` step, and only the part it names. Drop back into normal explore-the-DOM browsing ONLY when a step genuinely fails (its locator/page isn't what it describes); until then, trust the steps. If `verify_more: true`, do one cheap sanity check (page title plausible?) before committing. If `step.irreversible`, confirm with user. If `step.requires_user_input`, STOP and ask the user for that value — it's a password, payment/card detail, or personal data only they hold; never fabricate it. After, call `report_outcome` once with the returned `id`.
executable (optional, only on some `ok` envelopes): a precompiled recipe Bowmark can run FOR you. When present, you MAY skip the browser entirely — call the `execute` tool with `{ script_id: executable.script_id, inputs }`, filling `inputs` from `executable.param_schema`, and use the returned `outputs` directly. If `execute` returns `fell_back`, run `ui_procedure` yourself as usual. When `executable` is absent, just run the recipe yourself — nothing changes.
status=site_not_supported | no_useful_data | synth_invalid: miss, no `id`. Browse manually.
status=ambiguous_scope: retry with `scopeHint` set to one of `error.scope_options[].pattern`.
status=rate_limited: a cap on NEW recipe synthesis was hit (per-IP daily when anonymous, the account's monthly plan budget when an API key is attached). Cached/known recipes still answer normally — only first-time synthesis is capped. Do NOT retry-spam; back off (it resets at `error.retry_after` seconds) and browse manually until then. A free API key (bowmark.ai) lifts the anonymous per-IP cap to a plan budget.

Skip for: localhost / 127.0.0.1 / *.local / RFC1918 (10., 192.168., 172.16-31.); open-ended search with no destination. On 503 `embedder_unavailable`/`synth_unavailable`, retry once after Retry-After. Endpoint: https://api.bowmark.ai/mcp?s=r
- report_outcome (Report whether a Bowmark recipe ran cleanly) - Report whether the RECIPE ran cleanly — not whether you got the user a good answer. Call ONCE per envelope after you finished walking the recipe OR abandoned it.

`success: true` = every step executed AS WRITTEN. Each locator resolved on the first try, no extra clicks/scrolls/waits beyond the recipe, no JS-eval workarounds, no skipped steps, no substituted selectors. If you walked the recipe clean, report true — even if the answer turned out wrong (answer correctness is a separate concern).

`success: false` if ANY of these happened, even when you eventually helped the user: a locator missed, a click did nothing, you retried with a different selector, you fell back to raw browser code (`browser_run_code_unsafe` etc.), you scrolled or clicked extra to recover state, you skipped a step, the recipe led somewhere unexpected. Honest failures trigger a re-crawl that fixes the recipe; false `true` silently degrades it for everyone.

Quick check before reporting: if your tool-call sequence since the recipe started is longer than the recipe's step list, that's `false`. If you used raw browser code, that's `false`.

Skip when: `ask` returned a miss (no `id`); user interrupted mid-execution; you read the envelope but didn't execute it; task is still waiting on user input. Endpoint: https://api.bowmark.ai/mcp?s=r
- execute (Run a compiled Bowmark script and get the result back) - Run a deterministic, precompiled recipe on Bowmark's backend and get the result directly — no browser needed on your side. Call this ONLY when an `ask` envelope came back with an `executable` block; the `script_id` comes from there.

`inputs` maps each param in the envelope's `executable.param_schema` to a value (e.g. `{ "zip": "94107" }`). Provide every required param.

Response is one of:
- `{ status: "ok", outputs: {...} }` — `outputs` is the live, freshly-fetched data. Use it directly.
- `{ status: "fell_back", reason }` — the script didn't run clean. DROP BACK to the envelope's `ui_procedure` and execute it yourself. A compiled script is an optimization, never the only path.

Do NOT call this without a `script_id` from an `executable` block — there is no script to run otherwise. Endpoint: https://api.bowmark.ai/mcp?s=r

## Resources
Not captured

## Prompts
Not captured

## Metadata
- Owner: ai.bowmark
- Version: 3.22.1
- Runtime: Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jun 6, 2026
- Source: https://registry.modelcontextprotocol.io
