Hypagon Gateway

Browser MCP API

hb-browser is the MCP server that drives the visible Chromium session. It exposes 16 grouped tools plus two optional decision tools, and three optional page-compaction tools when JEV is on. It also serves a small set of MCP resources. It is configured and started by the agent client; the app must already be running.

Call shape

Every call is a standard MCP tool call:

{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "tools/call",
  "params": {
    "name": "observe",
    "arguments": { "as": "markdown", "budget": 12000 }
  }
}

Tool schemas are authoritative in tools/list; the source of truth is src/mcp/tools-catalog.ts. Deprecated names remain callable but are hidden from tools/list. drive and decide are absent unless a decision model is configured; when present they lead the surface and are Tier 1.

Page compaction (JEV)

When Settings โ†’ Decision Model โ†’ JEV page compaction is on and a decision model is configured, the surface grows by jev_index, read_section and search_page. They lead tools/list and are the preferred way to read a page: jev_index returns a section index, read_section fetches only what is needed.

With the read mode set to enforce, unscoped observe(as: "markdown"|"text") and GET /markdown are refused with code: "JEV_REQUIRED" (HTTP 409). Scoped reads (region), bounded reads (budget > 0, cursor), full: true and pages under 1,500 tokens remain available. See JEV for the full contract.

Tool manager

Settings โ†’ Tools controls the advertised surface:

The default order follows the operational sequence: navigate_to โ†’ observe โ†’ act โ†’ wait_for โ†’ find โ†’ extract. A saved order overrides it; catalog declaration order is only a fallback for tools not yet in the curated list.

The settings are stored in <userData>/tool-settings.json. They apply to the next MCP session; restart the client or its MCP server after saving. Disabled tools are omitted from tools/list but remain callable by name through tools/call, so existing workflows do not break mid-session.

The local bridge exposes the saved settings read-only at GET /tools/config for the stdio and remote MCP server processes. The HTTP route cannot write settings.

Advertised groups

Tool Actions / scope
navigate open, back, forward, reload, consent, scroll, recipe
observe markdown, text, AX, Set-of-Marks and components
find semantic target search
act click, focus, hover, type, press, scroll, fill
wait_for readiness gate
extract structured reads and lazy-list collect
capture screenshot or rendered snapshot
evaluate_javascript deliberate page JS
devtools state, diff, console, network, streams, HAR, JSON query, fingerprint, health
human_in_loop HIL, activity/resume, notify, window and tray
collaborate highlight, ask, read, reply and resolve human page threads
browser_workspace tabs, downloads, contexts, recordings, scripts
shadow_iframes frames, focus_walk
research read, search, LLM surface/fetch, crawl, topic research, prerender
memory recall, history, bookmarks
help categorized cheatsheet

Underlying tool groups

The group names below document the flat catalog. Most names are hidden from tools/list but remain callable by name.

Navigation and history

Tool Purpose
navigate_to Navigate the visible browser; dismiss common consent overlays by default.
navigate_history Go back, forward, or reload.

Consent and input

Tool Purpose
dismiss_consent Detect and dismiss cookie/GDPR modals.
act Unified click, focus, hover, type, or key press on a mark, selector, or coordinate.
fill_form Fill several fields in one turn.
press_key Dispatch a single hardware key.
scroll_page Organic inertial wheel scrolling.

act is the preferred interaction entry point. It accepts mark_id, selector, or x + y, plus await_conditions, timeout_ms, dry_run, and secret for typed values.

Observation and inspection

Tool Purpose
observe Budgeted, cursor-paged page projection.
take_screenshot Viewport image or Set-of-Marks image.
snapshot_rendered_page Post-hydration AX tree, Markdown, or HTML.
prerender_links Pre-fetch and hydrate likely next pages.
evaluate_javascript Evaluate JavaScript in the active tab. Powerful and detectable; use deliberately.
get_console_logs Read browser console output.
get_fingerprint_profile Inspect the current browser fingerprint profile.

observe projections: markdown, text, ax, som, components, list, table, and app_data. budget and next_cursor page a large result; budget: 0 returns the whole construct.

Tabs

Tool Purpose
new_tab Create an isolated tab.
switch_tab Focus another tab.
close_tab Close a tab.
list_tabs List open tabs.

Cortex memory and bookmarks

Tool Purpose
recall_memory Semantic recall from LanceDB Cortex.
browsing_history Read browsing history.
browsing_history_clear Clear browsing history.
add_bookmark Add a bookmark.
list_bookmarks List bookmarks.
delete_bookmark Remove a bookmark.

Downloads

Tool Purpose
list_downloads List downloaded files.
read_download Read a downloaded file.

Context profiles

Tool Purpose
context_save Snapshot cookies and storage.
context_open Restore a saved context.
context_list List context profiles.
context_delete Delete a context profile.

Network and streams

Tool Purpose
get_network_traffic Compact HTTP request/response summaries.
query_json_data Query captured network, stream, download, or inline JSON.
list_realtime_streams List WebSocket and SSE streams.
clear_capture Clear network traffic, stream frames, or both.

Script vault

Tool Purpose
save_script Save a reusable script/macro.
list_scripts List or semantically search scripts.
run_script Run a saved script.
delete_script Delete a saved script.

Shadow DOM and frames

Tool Purpose
frames List iframes, their controls and optional per-frame screenshots.
focus_walk Enter a closed shadow root with trusted Tab/Shift+Tab steps.

Window, tray, and human intervention

Tool Purpose
set_window_visibility Show/hide and focus the app window.
configure_system_tray Configure close-to-tray behaviour.
request_human_intervention Pause for login, CAPTCHA, 2FA, payment, or another human step.
resolve_human_intervention Mark a human request resolved.
get_human_intervention_status Read the active HIL request.
get_human_activity Read the passive human-takeover window that blocks synthetic input.
resume_agent Clear that passive takeover window after confirmation.
send_notification Native OS notification.

Primitives and abstraction

Tool Purpose
wait_for Declarative readiness gate; replaces sleeps.
observe The primary page read.
extract Structured list, table, embedded app data, or JSON-LD.
collect_all Scroll and deduplicate a lazy or virtualized list.
find Semantic element search returning mark ids.
expect Immediate assertion over the same conditions as wait_for.
act Unified humanlike action with optional post-conditions.
page_state Cheap monotonic page signature.
diff Field-by-field change since a revision.
bridge_health Liveness, version, capabilities, window, and input transport.
export_har HAR 1.2 export of captured traffic.

Condition types for wait_for and expect include selector, gone, text, regex, url, role_name, count, network_idle, stable, and revision. Prefer stable or count over a naive selector when a page renders lazily.

Discovery

Tool Purpose
llm_surface Probe /llms.txt, alternates, sitemap, or Markdown negotiation.
llm_fetch Fetch an advertised representation. Gated by llm_surface.
read_url Read a URL as Markdown, using the site representation or a detached render.
search_web Multi-engine search in a detached view.
deep_crawl Bounded breadth-first crawl with optional Cortex indexing.
research_topic Search, gather, distill, and return cited extractive highlights.

Recording

Tool Purpose
record_start Start a timelapse recording.
record_stop Stop and save a WebM recording.
list_recordings List saved recordings.

Recording tools can be removed by a human-only switch in Settings. When disabled, tools/list omits them and the bridge refuses direct calls.

Help and optional decisions

Tool Purpose
help Tool guidance and recommended workflows.
recipe Save, list, replay or delete a zero-model navigation path.
decide Optional typed decision, only when a decision backend is configured.
drive Optional observe-decide-act loop, only when configured.

decide and drive are absent unless Settings has a decision model configured. They are not a replacement for deterministic find + act.

MCP resources

The browser server also exposes:

The partitions are readable Markdown and are useful when a client does not want to fetch the repository.

Errors

Tools return an MCP error result with a machine-readable code in the text. Common browser codes are STALE_REF, TIMEOUT, NO_TARGET, BAD_REQUEST, NOT_SUPPORTED, TYPE_NO_EFFECT, HUMAN_IN_PROGRESS, NO_LLM_SURFACE, and FETCH_BLOCKED.

If the bridge is down, the call fails with a connection error that names HB_BRIDGE_URL. Start the app or fix the bridge URL. See Error catalogue.

Recommended workflow

bridge_health
  -> observe(as:"markdown") or read_url
  -> find / extract
  -> act(mark_id, await_conditions)
  -> expect / diff

Use take_screenshot or Set-of-Marks when geometry matters. Use evaluate_javascript only when the structured primitives cannot do the job.