MCP server
Octoweb serves the Model Context Protocol on localhost:3434/mcp. Any MCP-compatible client — Claude Desktop,
octomind, your own script — can navigate, read, and interact with real pages in a window you
can watch.
Connecting a client
The server starts with the browser — there is nothing to install, enable, or run. Point any MCP client at the URL above.
Claude Code
claude mcp add --transport http octoweb http://localhost:3434/mcp Claude Desktop, Cursor, and other JSON clients
{
"mcpServers": {
"octoweb": {
"type": "http",
"url": "http://localhost:3434/mcp"
}
}
} octomind
Add the server to your octomind config. The session /mcp command is read-only —
use /mcp list to confirm the tools arrived.
[[mcp.servers]]
name = "octoweb"
type = "http"
url = "http://localhost:3434/mcp"
timeout_seconds = 30 Focus and workspace rules
browser_navigatealways opens in the background, in a new tab or in place viatab_id. It never steals focus.browser_switch_tabis the only tool that changes what you are looking at.- One server covers every workspace. The
X-Octoweb-Workspaceheader decides which workspace a request acts on; callers without a token fall through to the first one. - Set
OCTOWEB_MCP_PORTandOCTOWEB_CONFIG_DIRto run a second, isolated instance — useful for test suites.
Navigation
browser_navigateOpen a URL in the background — never steals focusbrowser_go_backGo back in historybrowser_go_forwardGo forward in historybrowser_reloadReload the current pagebrowser_waitWait for load, SPA readiness, or a CSS selector
Tabs
browser_get_tabsList every open tab with id, title, and URLbrowser_get_current_tabGet the tab the user is actually looking atbrowser_switch_tabShow a tab to the user — the only tool that moves focusbrowser_close_tabClose a tab by idbrowser_get_playing_tabsList tabs currently playing audio or video
Interaction
browser_clickClick an element, retrying until stable and unobstructedbrowser_typeSet an input, textarea, or contenteditable value — React-safebrowser_fill_formFill several fields and optionally submit, in one callbrowser_hoverHover with a full pointer and mouse event sequencebrowser_scrollScroll the window or any scrollable containerbrowser_press_keyPress a key — Enter submits like a real keypressbrowser_select_optionPick a <select> option by value or labelbrowser_dismiss_overlayDismiss consent overlays — prefers Reject, never auto-acceptsbrowser_handle_dialogArm answers for upcoming alert, confirm, and prompt dialogsbrowser_upload_fileArm the next file chooser with local pathsbrowser_execute_jsRun JavaScript in the page — promises are awaited
Inspection
browser_snapshotMap interactive elements with @N refs — pierces iframes and shadow DOMbrowser_get_page_infoTitle, URL, and meta descriptionbrowser_get_page_contentPage text content (innerText)browser_screenshotScreenshot the viewport or the full pagebrowser_console_messagesRecent console output and JS errorsbrowser_network_requestsRecent fetch and XHR activity with statuses and timingsbrowser_get_historyRead browsing history entries
Agent UI
render_uiDraw an interactive A2UI surface in the sidebar and wait for the click