MCP server for controlling the browser via Page Agent extension
Page Agent MCP has 15 tools with basic schemas and descriptions, but significant gaps limit production readiness. Most tools have descriptions (10 - 200 chars), but many lack parameter descriptions or have minimal detail. Schemas are present but sparse: most parameters lack descriptions, and output schemas are undocumented. Tool naming is generally clear (verb_noun pattern: execute_task, get_status, click_element_by_index), but composition issues exist, tools like execute_task and execute_javascript are broad and lack error guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Error handling is absent: no recovery guidance, no categorization of retryable vs. fatal errors. Security concerns: execute_javascript accepts arbitrary code with only an AbortSignal hint, no input validation or sandboxing documented. Overall, definitions are functional but lack the rigor expected of production tools.
Ask the user a question and wait for their answer. Use this if you need more information or clarification.
Click element by index
Close a tab by its ID. Cannot close the initial tab. Optionally specify which tab to switch to after closing.
Complete task. Text is your final response to the user — keep it concise unless the user explicitly asks for detail.
Execute JavaScript code on the current page. Supports async/await syntax. Use with caution! An `AbortSignal` named `signal` is available in scope: long-running async code MUST honor it (e.g. `await fetch(url, { signal })`, or `signal.throwIfAborted()` in loops)
Execute a task in user's browser.
execute_javascript accepts arbitrary code with minimal validation. Description mentions AbortSignal but lacks input sanitization guidance, sandboxing details, or error recovery instructions. No confirmation step for irreversible operations.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Tools like close_tab (WRITE), execute_javascript (IRREVERSIBLE), and done (READ_ONLY) lack machine-readable risk metadata.
Parameter descriptions missing or minimal. click_element_by_index, get_status, stop_task lack parameter descriptions. LLMs cannot infer what 'index' means without explicit guidance (element position? DOM order? visible elements only?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Check the current status of the Page Agent hub.
Click and type text into an interactive input element
Open a new browser tab with the specified URL. The new tab becomes the current tab for all subsequent page operations.
Scroll vertically. Without index: scrolls the document. With index: scrolls the container at that index (or its nearest scrollable ancestor). Use index of a data-scrollable element to scroll a specific area.
Scroll horizontally. Without index: scrolls the document. With index: scrolls the container at that index (or its nearest scrollable ancestor). Use index of a data-scrollable element to scroll a specific area.
Select dropdown option for interactive element index by the text of the option you want to select
Stop the currently running browser automation task.
Switch to an existing tab by its ID. After switching, all page operations will target the new current tab. You can only switch to tabs in the tab list shown in browser state.
Wait for x seconds. Can be used to wait until the page or data is fully loaded.
No output schemas documented. Tools return results but LLMs cannot plan downstream calls without knowing response structure. E.g., get_status returns what fields? execute_task returns what data?
No error handling guidance. Tools lack recovery instructions, error categorization (retryable vs. fatal), or actionable error messages. LLMs cannot self-correct on failures.