Exposes VS Code's integrated browser to external agents (Claude Code, scripts, curl) via a local HTTP API and MCP server.
Server has 15 tools with complete input schemas and descriptions. Naming follows verb_noun convention (navigate, screenshot, click, type, eval). Descriptions are substantive (100-250 chars), explaining WHAT and WHEN. However, output schemas are entirely undocumented, LLMs cannot predict response structure for chaining. Parameters lack constraints (enums, ranges, patterns). Error handling is absent from tool definitions. No tool annotations (readOnlyHint/destructiveHint). Risk classification is present in metadata but not in descriptions themselves.
Click an element on the page by node ID.
Get the full outer HTML of the current page.
Evaluate a JavaScript expression in the page context.
Navigate a browser tab to a URL or replace the current page.
Capture a screenshot of the current page.
Get the accessibility tree of the current page.
Get the current status of the bridge including capabilities, degradation state, and tab access mode.
Output schemas completely undocumented. LLMs cannot predict response structure (fields, types, pagination) for any tool. Breaks tool chaining and forces agents to guess field names.
No parameter constraints (enums, min/max, patterns). 'limit' accepts any number (should be 1-200). 'tabId' is free-form string with no format guidance. LLMs cannot validate inputs before calling.
No error handling guidance in tool definitions. LLMs cannot know if a failure is retryable, user-fixable, or fatal. No recovery suggestions (e.g., 'If tab not found, call browser_tab_list first').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Close a browser tab.
List all browser tabs managed by the bridge.
Open a new browser tab with an optional URL.
Type text into a focused input element.
Read buffered console output (log/warn/error) captured from integrated browser pages, including messages from web workers and iframes. The buffer is continuous — it contains messages emitted before this call, which a screenshot or page read cannot recover. Use for diagnosing runtime errors.
Read buffered download events (guid, url, suggested filename, state, bytes, resolved path) from integrated browser pages. Use to confirm a download started, completed, or where the file landed.
Read buffered network requests/responses (method, url, status, type, timing) captured from integrated browser pages. The buffer is continuous, so it includes requests already completed before this call. Use to check failing API calls, status codes, or whether a request fired at all.
List browser tabs managed by the bridge.
Tool annotations missing. No readOnlyHint/destructiveHint/idempotentHint in schemas. LLMs cannot distinguish safe reads from destructive writes (browser_eval can execute arbitrary JS; browser_click modifies state).
Generic descriptions for discovery tools. 'List browser tabs managed by the bridge' (integratedBrowser_tabs, browser_tab_list) does not explain WHEN to call it or what structure it returns. Duplicate tools with identical purpose.