Tools reference
Every tool below is a standard MCP tool invocation. Call it with tools/call and pass the tool name plus its arguments. Responses are JSON. Content-bearing responses pass through the credential firewall before they reach your client.
Categories
Section titled “Categories”Read and manage the tab list.
browser_tab_list— list open tabsbrowser_tab_get— get details for one tabbrowser_tab_new— open a new tabbrowser_tab_close— close a tab
See Tabs.
Navigation
Section titled “Navigation”Move a tab to a URL, subject to the allowed-domains policy.
browser_navigate— navigate a tab to a URLbrowser_set_allowed_domains— set the session-scoped allowlist
See Navigation.
Content
Section titled “Content”Structured, typed extractors. No arbitrary JavaScript, no DOM eval surface.
browser_page_content— full page contentbrowser_page_text— visible text onlybrowser_search_in_page— regex search over page textbrowser_page_context— high-level page summary (title, URL, byline, reading time)page_query_selector— resolve a CSS selector to a node referencepage_get_text— read the text of a resolved nodepage_get_attribute— read an attribute of a resolved nodepage_wait_for_selector— wait until a selector resolves
See Content.
History and bookmarks
Section titled “History and bookmarks”Read local user data.
browser_history_search— search the history databasebrowser_bookmarks_search— search bookmarks by title, URL, or tagbrowser_bookmark_create— create a bookmark
Capture (in development)
Section titled “Capture (in development)”Structured snapshots and screenshots. Reserved surface, delivered incrementally.
browser_accessibility_snapshot(in development)browser_click,browser_type,browser_select(in development,@refbased)browser_screenshot_full,browser_screenshot_element(in development)browser_network_start_capture,browser_network_get_har,browser_network_stop_capture(in development, firewall-gated)
See Capture for status and expected shape.
Session control
Section titled “Session control”Coordinate access when more than one agent is connected.
browser_acquire_lease— take exclusive control of a tabbrowser_heartbeat_lease— keep the lease alivebrowser_release_lease— hand it back
The lease semantics live in the security model since they are inseparable from the force-steal event delivery.
Response shape
Section titled “Response shape”MCP wraps tool results in a content array. The Maho server always returns exactly one content item of type text, with a JSON string as the value. This is the shape MCP clients expect:
{ "jsonrpc": "2.0", "id": 42, "result": { "content": [ { "type": "text", "text": "{\"tabs\":[{\"id\":\"tab_1a2b\",\"title\":\"Example\",\"url\":\"https://example.com/\",\"active\":true}]}" } ], "isError": false }}Errors are returned either as JSON-RPC errors (protocol-level) or as content with isError: true (tool-level).
Error codes
Section titled “Error codes”The Agent Protocol uses standard JSON-RPC error codes plus a Maho-specific range for policy failures.
| Code | Name | Meaning |
|------|------|---------|
| -32700 | parse_error | Malformed JSON. |
| -32600 | invalid_request | Not a valid JSON-RPC 2.0 request. |
| -32601 | method_not_found | Unknown tool. Also returned for any eval-style JavaScript execution primitive. |
| -32602 | invalid_params | Missing or wrong-typed parameters. |
| -32603 | internal_error | Server-side failure. |
| -32001 | not_authenticated | Handshake not completed. |
| -32002 | authentication_failed | Peer credential or session token failure. |
| -32010 | domain_approval_required | Navigation target is not in allowed_domains. |
| -32011 | lease_conflict | Another session holds the tab lease. |
| -32012 | lease_expired | The lease TTL elapsed without a heartbeat. |
| -32020 | tool_disabled | Tool exists but the user has disabled it in settings. |