Model Context Protocol server for controlling an already-open Firefox instance through WebDriver BiDi.
Firefox BiDi MCP has 11 tools with basic naming and descriptions, but critical gaps in schema completeness and parameter documentation. Tool names follow verb_noun convention (firefox_bidi_*), which is good. However, most tools lack detailed parameter descriptions, many parameters have only 1-2 word descriptions ('Optional context ID'). Input schemas are present but minimal: most parameters lack type constraints, enums, or validation guidance. No output schemas are documented. Error handling is absent, tools do not guide recovery or categorize failures. The server is STDIO-only, which caps protocol readiness at 50 and limits real-world deployment.
Click an element on the page by CSS selector
Close the active BiDi session
Execute JavaScript code in the active tab and return the result
Fill an input field with text
Get the text content of an element
Get the HTML source of the current page
List all open tabs in the current Firefox session
Navigate to a URL in the active tab
Parameter descriptions are minimal (1-3 words). 'Optional context ID' does not explain what a context ID is, how to obtain it, or when to use it. LLMs cannot infer parameter semantics from bare names.
No output schemas documented. Tools return results but LLMs have no way to know what fields to expect (e.g., does list_tabs return tab IDs, URLs, titles, or all three?). This forces agents to guess and breaks tool chaining.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Open a new BiDi session with Firefox
Set the active context (tab) for subsequent operations
Take a screenshot of the current page
No error handling or recovery guidance. Tools do not indicate what errors are retryable, what the LLM should do if a selector is not found, or how to recover from a failed navigation. Agents have no path forward on failure.
CSS selector parameter lacks validation constraints. No guidance on valid selector syntax, error handling for invalid selectors, or what happens if multiple elements match. LLMs will pass arbitrary strings.
No tool composition guidance. Tools like execute_script and click_element are low-level primitives. No higher-level tools (e.g., fill_form, submit_form) exist to reduce multi-step sequences. Agents must compose many calls for simple tasks.