zen-devtools-mcp
Zen DevTools MCP
Unofficial Model Context Protocol server for automating Zen Browser via WebDriver BiDi (through Selenium WebDriver). Works with Claude Code, Claude Desktop, Codex App/CLI, Cursor, Cline and other MCP clients.
Repository: https://github.com/simon-ami/zen-devtools-mcp
This is a Zen-first fork of Mozilla's Firefox DevTools MCP server. The public package, CLI, MCP server name, logs, profile paths, and management tools use Zen naming. The lower-level implementation still uses Selenium's Firefox/geckodriver APIs because Gecko automation is exposed through moz:firefoxOptions, Browser.FIREFOX, and moz:* WebDriver BiDi commands.
This project is maintained independently and is not affiliated with or endorsed by Zen Browser.
Note: This MCP server requires a local Zen Browser installation and cannot run on cloud hosting services. Use
npx zen-devtools-mcp@latestto run locally, or use Docker with the provided Dockerfile.
Security
Browser MCP servers carry inherent risks. A few key practices:
Use a dedicated Zen profile. Never run the server against your regular profile unless you intentionally use connect-existing mode. The agent has access to whatever the browser can reach, including cookies and saved sessions.
Be cautious about which sites you visit. Pages can return content designed to manipulate the agent (prompt injection). Stick to sites you control or trust.
Avoid enabling extra flags unless needed.
--enable-scriptand--enable-privileged-contextsignificantly expand what the agent can do.
See SECURITY.md for a full breakdown of risks and how to report vulnerabilities.
Related MCP server: firefox-devtools-mcp
Requirements
Node.js >= 20.19.0
Zen Browser installed (auto-detected on macOS at
/Applications/Zen.app/Contents/MacOS/zen, or pass--zen-path)
Install and use with Claude Code (npx)
Recommended: use npx so you always run the latest published version from npm.
Option A: Claude Code CLI
claude mcp add zen-devtools npx zen-devtools-mcp@latestPass options either as args or env vars. Examples:
# Headless + viewport via args
claude mcp add zen-devtools npx zen-devtools-mcp@latest -- --headless --viewport 1280x720
# Or via environment variables
claude mcp add zen-devtools npx zen-devtools-mcp@latest \
--env START_URL=https://example.com \
--env ZEN_HEADLESS=trueOption B: Edit Claude Code settings JSON
Add to your Claude Code config file:
macOS:
~/Library/Application Support/Claude/Code/mcp_settings.jsonLinux:
~/.config/claude/code/mcp_settings.jsonWindows:
%APPDATA%\Claude\Code\mcp_settings.json
{
"mcpServers": {
"zen-devtools": {
"command": "npx",
"args": ["-y", "zen-devtools-mcp@latest", "--headless", "--viewport", "1280x720"],
"env": {
"START_URL": "about:blank"
}
}
}
}Option C: Helper script (local dev build)
npm run setup
# Choose Claude Code; the script saves JSON to the right pathTry it with MCP Inspector
npx @modelcontextprotocol/inspector npx zen-devtools-mcp@latest --start-url https://example.com --headlessThen call tools like:
list_pages,select_page,navigate_pagetake_snapshotthenclick_by_uid/fill_by_uidlist_network_requests(always-on capture),get_network_requestscreenshot_page,list_console_messages
CLI options
You can pass flags or environment variables (names on the right):
--zen-path— absolute path to Zen binary (ZEN_PATH)--headless— run without UI (ZEN_HEADLESS=true)--viewport 1280x720— initial window size--profile-path— parent directory for a dedicated Zen MCP profile--auto-profile— use a persistent profile under~/.zen-devtools-mcp; enabled by default (AUTO_PROFILE=falsedisables it)--zen-arg— extra Zen arguments (repeatable)--start-url— open this URL on start (START_URL)--accept-insecure-certs— ignore TLS errors (ACCEPT_INSECURE_CERTS=true)--connect-existing— attach to an already-running Zen instead of launching a new one (CONNECT_EXISTING=true)--marionette-port— Marionette port for connect-existing mode, default 2828 (MARIONETTE_PORT)--pref name=value— set Zen preference at startup viamoz:firefoxOptions(repeatable)--enable-script— enable theevaluate_scripttool (executes arbitrary JavaScript in the page context) and debugging tools (list scripts, inspect source, set logpoints). Debugging tools require Gecko 153+. (ENABLE_SCRIPT=true)--enable-privileged-context— enable privileged context tools: list/select privileged contexts, evaluate privileged scripts, get/set Zen prefs, and list extensions. RequiresMOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1(ENABLE_PRIVILEGED_CONTEXT=true)--log-file— write MCP server logs to a file instead of stderr. Useful for debugging sessions with MCP clients that hide server output. SetDEBUG=*to also include verbose debug logs. Example:--log-file /tmp/zen-mcp.log
Useful preferences (--pref)
remote.prefs.recommended=false. When Zen runs in automation, it applies Gecko RecommendedPreferences that modify browser behavior for testing. Set remote.prefs.recommended to false to skip those and have a configuration closer to a regular Zen instance.
remote.log.level=Trace. Enable verbose WebDriver protocol logs in Zen. The MCP server will automatically pass the matching log level to geckodriver so both sides log at the same verbosity.
app.update.disabledForTesting=false. Allow Zen to automatically download and apply updates. Note that updates may interrupt your session. Requires also setting remote.prefs.recommended=false.
Connect to existing Zen
Use --connect-existing to automate your real browsing session with cookies, logins, and open tabs intact:
# Start Zen with Marionette enabled
/Applications/Zen.app/Contents/MacOS/zen --marionette
# Run the MCP server
npx zen-devtools-mcp --connect-existing --marionette-port 2828Or set marionette.enabled to true in about:config (or user.js) to enable Marionette on every launch.
BiDi-dependent features (console events, network events) are not available in connect-existing mode; all other features work normally.
Warning: Do not leave Marionette enabled during normal browsing. It sets
navigator.webdriver = trueand changes other browser fingerprint signals, which can trigger bot detection on sites protected by Cloudflare, Akamai, etc. Only enable Marionette when you need MCP automation, then restart Zen normally afterward.
For personal profiles, you may set remote.prefs.recommended=false in
about:config before starting Zen with Marionette. This prevents Gecko's
testing preferences from disabling features such as password autofill, but it
also leaves saved credentials available to the automated session. A dedicated
profile remains the recommended option.
Tool overview
Pages: list/new/navigate/select/close
Snapshot/UID: take/resolve/clear
Input: click/hover/fill/drag/upload/form fill
Network: list/get (ID-first, filters, always-on capture)
Console: list/clear
Screenshot: page/by uid (with optional
saveTofor CLI environments)Script: evaluate_script
Privileged Context: list/select privileged ("chrome") contexts, evaluate_privileged_script (requires
MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)WebExtension: install_extension, uninstall_extension, list_extensions (list requires
MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)Zen Management: get_zen_info, get_zen_output, restart_zen, set_zen_prefs, get_zen_prefs
Profiler: profiler_is_active, profiler_start (preset or explicit config), profiler_stop (saves profile to downloads directory)
Utilities: accept/dismiss dialog, history back/forward, set viewport
Screenshot optimization for Claude Code
When using screenshots in Claude Code CLI, the base64 image data can consume significant context.
Use the saveTo parameter to save screenshots to disk instead:
screenshot_page({ saveTo: "/tmp/page.png" })
screenshot_by_uid({ uid: "abc123", saveTo: "/tmp/element.png" })The file can then be viewed with Claude Code's Read tool without impacting context size.
Local development
npm install
npm run build
# Run with Inspector against local build
npx @modelcontextprotocol/inspector node dist/index.js --headless --viewport 1280x720
# Or run in dev with hot reload
npm run inspector:devSee CONTRIBUTING.md for more details on local development, testing, and CI.
Troubleshooting
Zen not found: pass
--zen-path "/Applications/Zen.app/Contents/MacOS/zen"(macOS) or the correct path on your OS.First run is slow: Selenium sets up the BiDi session; subsequent runs are faster.
Stale UIDs after navigation: take a fresh snapshot (
take_snapshot) before using UID tools.Saved-password suggestions stopped after using
--connect-existing: Marionette's recommended automation preferences may leavesignon.autofillFormsandsignon.rememberSignonsset tofalseafter the session ends. Stop the MCP server, restart Zen without Marionette, and reset both preferences inabout:config.Windows 10: Error during discovery for MCP server 'zen-devtools': MCP error -32000: Connection closed
Solution 1 Wrap with
cmd /c(details):"mcpServers": { "zen-devtools": { "command": "cmd", "args": ["/c", "npx", "-y", "zen-devtools-mcp@latest"] } }Solution 2 Use the absolute path to
npx(adjust extension:.cmd,.bat,.exe, or.ps1, to match your setup):"mcpServers": { "zen-devtools": { "command": "C:\\nvm4w\\nodejs\\npx.ps1", "args": ["-y", "zen-devtools-mcp@latest"] } }
Versioning
Pre-1.0 API: versions start at
0.x. Use@latestwith npx for the newest release.This fork uses its own version line rather than upstream Firefox DevTools MCP version numbers.
Contributing
See CONTRIBUTING.md for how to file issues, run tests, and work on the project locally.
Author
Maintained independently by Simon Benedict. Based on Mozilla's Firefox DevTools MCP server.
License
Licensed under either of MIT or Apache 2.0 at your option.
Available Tools
32 toolsaccept_dialogB
Accept browser dialog. Provide promptText for prompts.
| Name | Required | Description | Default |
|---|---|---|---|
| promptText | No | Text for prompt dialogs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It fails to disclose important behavioral traits such as whether accepting an alert vs. prompt behaves differently, what happens if no dialog is present, or if the action is destructive. The minimal description leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with only two sentences and no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema, no nested objects) and the presence of a sibling 'dismiss_dialog', the description is minimally complete. It explains the core function but omits details like error handling or behavior on different dialog types, which a context-aware agent would benefit from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the only parameter with a description 'Text for prompt dialogs'. The description adds 'Provide promptText for prompts' which essentially repeats the schema information. With 100% schema coverage, the description adds no new value, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Accept browser dialog' which is a clear verb-resource pairing. It distinguishes from the sibling tool 'dismiss_dialog' by indicating acceptance rather than dismissal. However, it does not specify which dialog types (alert, confirm, prompt) are supported, though 'promptText' hints at prompt dialogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to 'Provide promptText for prompts', giving context for when to use the parameter. However, it does not explicitly state when to use this tool versus alternatives like 'dismiss_dialog' or what to do if the dialog is not a prompt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_console_messagesB
Clear collected console messages.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. 'Clear' implies destructive action but does not state irreversibility or side effects. No mention of what happens to the collected messages (e.g., whether they are permanently deleted).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with no redundancy. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple clear operation with no parameters and no output schema, the description is nearly complete. It could mention that all messages are cleared, but this is reasonably implied by 'clear collected console messages'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema and description align perfectly. The description adds no parameter info but none is needed. Baseline elevated due to zero parameter complexity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Clear collected console messages' clearly states the action (clear) and the resource (console messages). It distinguishes from sibling 'list_console_messages' which retrieves messages. However, 'collected' is slightly ambiguous without context, preventing a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'list_console_messages' or when clearing is appropriate. The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_snapshotB
Clear snapshot cache. Usually not needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description fails to disclose behavioral traits such as side effects, permissions, or whether the action is destructive. It only states the action without additional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short sentences, front-loading the key action. The second sentence is somewhat vague but does not significantly detract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is minimally adequate. However, it lacks explanation of what the snapshot cache is or when clearing it is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description does not need to add meaning beyond the schema. Baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Clear snapshot cache' which is a specific verb and resource, clearly indicating the tool's action. However, it does not differentiate from sibling tools like take_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Usually not needed,' which is vague and provides no clear guidance on when to use this tool versus alternatives or when to avoid it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_by_uidB
Click element by UID. Set dblClick for double-click.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Element UID from snapshot | |
| dblClick | No | Double-click (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose behavior like waiting for element visibility, error handling on missing UID, or side effects. The description is too minimal to compensate for the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise, two sentences front-loaded with key action. However, the extreme brevity sacrifices necessary detail, making it borderline under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations or output schema, the description fails to explain prerequisites (e.g., snapshot needed), behavior on success/failure, or how this tool differs from similar interactions like hover_by_uid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description only restates schema information ('Set dblClick for double-click'), adding no new semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Click' and resource 'element by UID', and distinguishes from sibling tools like hover_by_uid or drag_by_uid_to_uid. The brief mention of dblClick further specifies the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use click instead of hover, drag, or fill. No exclusions or context provided. Agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_pageB
Close tab by index.
| Name | Required | Description | Default |
|---|---|---|---|
| pageIdx | Yes | Tab index to close |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states 'Close tab by index.' It does not mention what happens if the index is out of bounds, whether it is destructive, or if it closes the current page. This is insufficient for safe agent use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently communicates the core purpose. While very short, it earns its place without redundancy. However, it loses a point for lacking depth in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description adequately identifies the action. However, it omits details like whether the index is zero-based, or error behavior, making it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, as the only parameter 'pageIdx' already has a description 'Tab index to close'. The tool description adds no extra meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Close tab by index.' clearly states the action (close), the resource (tab), and the method (by index). It distinguishes this tool from sibling page management tools like 'select_page' or 'navigate_page' which do not close pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as when to close a page versus accepting a dialog or navigating. The description does not mention prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismiss_dialogA
Dismiss browser dialog.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It fails to disclose what happens if no dialog is present or if multiple dialogs exist, leaving behavior ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with two words, front-loaded, and no unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description is minimally adequate but lacks details about edge cases or behavior in the absence of a dialog.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description adds no meaning beyond the schema, but the baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Dismiss') and the resource ('browser dialog'), with a specific verb that distinguishes it from the sibling 'accept_dialog'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The context implies it's for dismissing rather than accepting, but lacks details on prerequisites or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drag_by_uid_to_uidC
Drag element to another (HTML5 drag events).
| Name | Required | Description | Default |
|---|---|---|---|
| toUid | Yes | Target element UID | |
| fromUid | Yes | Source element UID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only mentions 'HTML5 drag events' which hints at the mechanism but lacks details on side effects, auth needs, error conditions, or what happens after the drag. This leaves the agent guessing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that gets straight to the point. It is efficient but could be slightly more informative without being wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and lack of output schema, the description omits important context such as required event listeners, return values, and error handling. The agent would need to infer too much from the name and parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters ('Source element UID' and 'Target element UID'). The description adds no extra meaning beyond the schema, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action 'Drag element to another' and specifies it uses HTML5 drag events, which distinguishes it from other action tools like click or hover. The verb and resource are clear, though it does not explicitly mention the UIDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. The description does not specify prerequisites (e.g., elements must be draggable) or when not to use it. Context from sibling tools is not leveraged.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fill_by_uidB
Fill text input/textarea by UID.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Input element UID from snapshot | |
| value | Yes | Text to fill |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It only states the action but fails to disclose whether it clears existing text, appends, or requires element visibility/focus. No side effects or constraints are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no superfluous words. It is front-loaded and directly states the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fill tool with no output schema and no annotations, the description provides the minimum viable information. However, it lacks behavioral details and usage guidelines, leaving gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the parameter names and schema descriptions; it merely restates the action.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'fill', the resource 'text input/textarea', and the method 'by UID'. It distinguishes itself from the sibling 'fill_form_by_uid' by specifying a single element type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not indicate when to use this tool versus alternatives like 'fill_form_by_uid' or 'click_by_uid', nor does it mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fill_form_by_uidB
Fill multiple form fields at once.
| Name | Required | Description | Default |
|---|---|---|---|
| elements | Yes | Array of {uid, value} pairs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully convey behavioral traits. It only says 'Fill' which implies mutation but does not disclose side effects (e.g., triggers events, requires focus, blocks on completion) or safety considerations. Critical behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (4 words). While not wasteful, it omits essential details. For a tool with one parameter and no annotations, conciseness should not sacrifice informativeness. A score of 3 reflects minimal adequate length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and the complexity of form filling (e.g., UID resolution, field types, error handling), the description is insufficient. It lacks information on return value, success/failure indicators, and any prerequisites. The completeness is low.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'elements' (array of {uid, value}). The description adds the notion of 'multiple fields at once', which is implicit in the array type. This adds marginal value beyond the schema, justifying a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Fill multiple form fields at once.' clearly states the action (fill), resource (form fields), and scope (multiple). The name 'fill_form_by_uid' combined with the description distinguishes it from siblings like 'fill_by_uid' (single field). The verb 'fill' is specific to form inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'fill_by_uid' for single fields. No prerequisites (e.g., page loaded, field visible) or exclusions are mentioned. The description provides no context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_requestA
Get request details by ID. URL lookup as fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Request ID from list_network_requests | |
| url | No | URL fallback (may match multiple) | |
| format | No | Output format (default: text) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description lacks behavioral details such as permissions, error handling, or performance implications. Does not contradict annotations since none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise phrases conveying essential information without redundancy. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately describes core functionality for a simple retrieval tool. Could mention behavior for missing/ambiguous inputs but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage). Description adds 'URL lookup as fallback' giving context, but does not significantly enhance beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves request details by ID or URL, with fallback behavior. It distinguishes from sibling 'list_network_requests' which lists all requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use when you have an ID or URL, but no explicit guidance on when to use this versus alternatives, nor what happens with multiple URL matches or missing inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_zen_infoA
Get information about the current Zen instance configuration, including binary path, version, environment variables, and output file location.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description clearly indicates a read-only operation retrieving configuration data. No annotations provided, so description carries full burden; it adequately conveys non-destructive behavior, though lacks details on idempotency or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded with the verb 'Get' and directly states the purpose. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description provides sufficient detail about the returned information (binary path, version, environment variables, output file location). It is complete for intended use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100% and description adds no param information. Baseline for 0 params is 4; no need for further semantic enhancement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves configuration info of the current Zen instance, listing specific items (binary path, version, environment variables, output file location). It is distinct from sibling tools like get_zen_output or get_network_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies use when configuration info is needed, but does not provide explicit when-not or alternatives. Since it's a read-only getter, the context is clear but could mention no side effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_zen_outputA
Retrieve Zen output (stdout/stderr including MOZ_LOG, warnings, crashes, stack traces). Returns recent output from the capture file. Use filters to focus on specific content.
| Name | Required | Description | Default |
|---|---|---|---|
| grep | No | Filter log lines containing this string (case-insensitive) | |
| lines | No | Number of recent log lines to return (default: 100, max: 10000) | |
| since | No | Only show logs written in the last N seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool retrieves recent output from a capture file and mentions the content types (stdout/stderr, MOZ_LOG, etc.). However, with no annotations, it lacks details on side effects, permission needs, or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each serving a distinct purpose: first defines the tool's function, second guides usage. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple retrieval tool with well-documented parameters, but lacks description of output format or default behavior when no filters are applied, especially since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully described in the schema (100% coverage), so the description adds little beyond summarizing the filtering functionality. This is the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Retrieve' and the resource 'Zen output (stdout/stderr including MOZ_LOG, warnings, crashes, stack traces)', differentiating it from sibling tools like get_zen_info or get_network_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Briefly suggests using filters to focus on specific content, but does not explicitly state when to use this tool versus alternatives or provide contexts where it is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hover_by_uidB
Hover over element by UID.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Element UID from snapshot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action without detailing side effects, such as whether the hover triggers events, waits for elements, or what happens if the element is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It is appropriately sized for such a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (one parameter, no output schema), the description is adequate but not thorough. It could mention whether the hover is synchronous or if it triggers events, but it covers the basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with a clear description for the 'uid' parameter. The tool description adds no extra meaning beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Hover over element by UID' clearly states the action (hover) and the resource (element) with the method (by UID). It distinguishes from sibling tools like click_by_uid or fill_by_uid, but could be more specific about the context of hovering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like click_by_uid or drag_by_uid_to_uid. The description does not mention prerequisites, limitations, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_extensionB
Install a Zen extension using WebDriver BiDi webExtension.install command. Supports installing from archive (.xpi/.zip), base64-encoded data, or unpacked directory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | File path (for archivePath or path types) | |
| type | Yes | Extension data type: "archivePath" for .xpi/.zip, "base64" for encoded data, "path" for unpacked directory | |
| value | No | Base64-encoded extension data (for base64 type) | |
| permanent | No | Install permanently (requires signed extension). Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral details such as whether installation is synchronous, what happens if the extension is already installed, permission requirements, or side effects. The schema's 'permanent' parameter hints at signing requirements, but the description adds no behavioral context beyond listing methods.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states the purpose, the second lists supported types. Ideal length for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main installation methods but lacks important context: no description of return value, error scenarios, or implications of the 'permanent' flag. For a mutation tool with no output schema, more detail on behavior and prerequisites would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds a brief grouping of installation methods matching the 'type' enum, but does not provide additional meaning for individual parameters beyond what the schema gives. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool installs a Zen extension using WebDriver BiDi, and lists the three supported data types (archive, base64, unpacked directory). This distinguishes it from the sibling uninstall_extension tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use which installation method, prerequisites (e.g., need signed extension for permanent install is only in schema), or when to avoid this tool. The description does not help an agent choose between this and other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_console_messagesB
List console messages. Supports filtering by level, time, text, source.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Filter by level | |
| limit | No | Max messages (default: 50) | |
| format | No | Output format (default: text) | |
| source | No | Filter by source | |
| sinceMs | No | Only last N ms | |
| textContains | No | Text filter (case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full burden. It only states 'List console messages' which implies read-only, but does not explicitly mention non-destructive behavior, side effects, or authentication needs. Minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clear, front-loaded sentence with no waste. Efficiently communicates the tool's purpose and capabilities.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with 6 parameters and no output schema, the description is adequate but lacks details on the return structure (e.g., what fields each message contains). Context signals indicate high parameter coverage, but completeness is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds a high-level summary of filtering by level, time, text, source, but doesn't add significant detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List console messages' with a specific verb and resource. It mentions filtering capabilities, which adds clarity. However, it doesn't explicitly differentiate from siblings like 'clear_console_messages' or 'list_network_requests'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Lacks information about scenarios where other tools (e.g., clear_console_messages for deletion) would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_requestsC
List network requests. Returns IDs for get_network_request.
| Name | Required | Description | Default |
|---|---|---|---|
| isXHR | No | XHR/fetch only | |
| limit | No | Max requests (default: 50) | |
| detail | No | Detail level (default: summary) | |
| format | No | Output format (default: text) | |
| method | No | HTTP method filter | |
| sortBy | No | Sort field (default: timestamp) | |
| status | No | Exact status code | |
| sinceMs | No | Only last N ms | |
| statusMax | No | Max status code | |
| statusMin | No | Min status code | |
| urlContains | No | URL filter (case-insensitive) | |
| resourceType | No | Resource type filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fails to disclose important behavioral traits. It does not mention that the tool supports extensive filtering (by URL, method, status, etc.), sorting, or output format. The only hint about behavior is that it returns IDs, but the schema implies much richer functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences, with no wasted words. It is front-loaded with the primary action. However, it may be too concise, sacrificing necessary detail for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 12 optional parameters, no output schema, and no annotations, the description is incomplete. It does not explain the return format, pagination behavior, or how the filtering/sorting parameters interact with the returned data. An agent would need to infer too much from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add any additional meaning beyond what the schema already provides. It does not explain how parameters like detail or format affect the output or the returned IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'network requests', and mentions that it returns IDs for another tool. While succinct, it conveys the core purpose without ambiguity. However, it does not explicitly distinguish this tool from sibling listing tools like list_console_messages or list_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions get_network_request as a companion tool but does not explain when to choose list_network_requests over other listing tools or how to use the returned IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesA
List open tabs (index, title, URL). Selected tab is marked.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only states that the selected tab is marked, but does not disclose any other behavioral traits such as side effects, refresh behavior, or permissions required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—a single sentence that conveys all necessary information without any fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description explains what the tool returns (index, title, URL, selected mark), which is sufficient for a simple list. No annotations but the read-only nature is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%. The description does not need to add parameter information. Baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'open tabs', and specifies the output fields (index, title, URL) and that the selected tab is marked. This distinguishes it from sibling tools like select_page or close_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_pageA
Open new tab at URL. Returns tab index.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must cover behavioral traits. It states the tool opens a new tab and returns the index, but omits details about asynchronous loading, permissions, or error handling. Adequate for a simple tool but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Action and return value are front-loaded. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the essential functionality. Could be more complete by mentioning tab index semantics or behavior when URL is invalid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear 'Target URL' description. The tool description adds that the URL is used for a new tab, which is already implied. Baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (open new tab at URL) and the return value (tab index). It distinguishes from sibling tools like navigate_page (which navigates current page) and select_page (which selects an existing tab).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, such as navigate_page or select_page. Missing when-not-to-use or prerequisites like page loading state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiler_is_activeA
Check whether the Gecko profiler is currently recording.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the check purpose without disclosing any behavioral traits such as idempotency, side effects, or whether it requires any permissions. This is insufficient for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that is front-loaded with the action and resource. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is minimal. It tells the purpose but lacks details like the return type (boolean) or typical usage patterns. Adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100%. The description does not need to add parameter semantics; baseline for no parameters is 4. The description is clear enough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Check') and the specific resource ('whether the Gecko profiler is currently recording'). It distinguishes itself from siblings like profiler_start and profiler_stop, which handle state changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Usage is implied (e.g., before or after profiler operations), but no direct when-to-use or when-not-to-use information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiler_startA
Start the Gecko profiler. Provide either a preset name or explicit recording options (entries, interval, features, threads). Cannot combine both. Valid presets: web-developer, firefox-platform, graphics, media, ml, networking, power, debug.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | No | Profiler preset name. Cannot be combined with entries, interval, features, or threads. | |
| entries | No | Number of entries to keep in the sampling buffer. Required when no preset is given. | |
| threads | No | Thread names to profile. Required when no preset is given. | |
| features | No | Profiler features to enable. Required when no preset is given. | |
| interval | No | Sampling interval in milliseconds. Required when no preset is given. | |
| activeContext | No | Id of the top-level navigable to mark as the active tab in the profile. Does not restrict profiling to that tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It lacks disclosure of behavioral traits such as idempotency, error handling, or permissions. Simply stating 'Start the Gecko profiler' is insufficient for a mutation action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, efficient, and front-loads the core action. Every word adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations or output schema, the description is fairly complete for a start action. It covers modes and constraints, but lacks explanation of return values or error states.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description adds the mutual exclusivity rule and lists presets (already in enum), but adds minimal extra meaning beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts the Gecko profiler and distinguishes the two modes (preset vs. explicit options). It is specific and differentiates from sibling tools like profiler_stop and profiler_is_active.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Cannot combine both' and lists valid presets, providing clear context for usage. However, it does not provide when-not-to-use guidance (e.g., if already running) or explicitly reference alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiler_stopA
Stop the Gecko profiler and save the recorded profile to a file in the downloads directory. Returns the path to the saved file, or null when nothing was saved.
| Name | Required | Description | Default |
|---|---|---|---|
| discard | No | If true, stop the profiler and discard the recording instead of saving it to disk. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It reveals the save-to-file action, the directory, and the return value. However, it does not cover edge cases like what happens if no profile is active, file naming conflicts, or whether the action is synchronous. The description is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, no unnecessary words, and front-loads the primary action. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the essential behavior and return value. It lacks some context (e.g., prerequisites, error handling) but is complete enough for an agent to understand the main functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter description is already in the schema. The tool description does not add any additional semantics beyond the schema's own description of the 'discard' parameter. It is a baseline score as the description adds no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Stop the Gecko profiler'), the result ('save the recorded profile to a file in the downloads directory'), and the return value ('path to the saved file, or null'). It distinctly separates from sibling tools like profiler_start and profiler_is_active by using the verb 'stop' and specifying saving.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not state when to use this tool, such as requiring the profiler to be running first, or when not to use it (e.g., if already stopped). The optional 'discard' parameter is mentioned but not contrasted with normal save behavior. No alternatives or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_uid_to_selectorA
Resolve UID to CSS selector. Fails if stale.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UID from snapshot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description adds the behavioral trait 'Fails if stale,' which is helpful. However, it does not disclose the return format (presumably a CSS selector string), error behavior, or side effects. Some transparency is present but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences: the first conveys the core purpose, and the second adds a crucial constraint. No extraneous words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single parameter, no output schema, and no annotations. The description covers the basic purpose and a failure condition but lacks details about the output format, definition of 'stale,' and error handling. Adequate for a simple tool but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes 'uid' as 'UID from snapshot' (100% coverage). The description adds meaning by specifying the operation (resolve to CSS selector), which clarifies the parameter's role beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Resolve UID to CSS selector,' which is a specific verb and resource. It distinguishes itself from sibling tools that use UIDs for actions (e.g., click_by_uid) by explaining it resolves to a selector rather than performing an action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for resolving UIDs from a snapshot, and notes that it fails if stale, but does not provide explicit when-to-use or when-not-to-use guidance relative to siblings. No alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_zenA
Restart Zen with different configuration. Allows changing binary path, environment variables, and other options. All current tabs will be closed.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | New environment variables in KEY=VALUE format (optional, e.g., ["MOZ_LOG=HTMLMediaElement:5", "MOZ_LOG_FILE=/tmp/ff.log"]) | |
| prefs | No | Zen preferences to set at startup. Values are auto-typed: true/false become booleans, integers become numbers, everything else is a string. Requires MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1. | |
| zenPath | No | New Zen binary path (optional, keeps current if not specified) | |
| headless | No | Run in headless mode (optional, keeps current if not specified) | |
| startUrl | No | URL to navigate to after restart (optional, uses about:blank if not specified) | |
| profilePath | No | Zen profile parent path (optional, keeps current if not specified) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that all current tabs will close, which is a critical side effect. However, it does not mention potential data loss, required permissions, or whether the operation is reversible, limiting transparency for a restart action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact with two sentences. The first sentence states the core action and purpose, and the second adds a key behavioral note. No redundant text is present, making it efficient for agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6 parameters and no output schema, the description covers the main action and a key side effect but lacks details on process flow, error handling, or prerequisites (e.g., Zen must be running). It is adequate but leaves gaps for an agent needing full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal extra meaning beyond stating configuration options, thus meeting the baseline for high coverage without exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Restart) and resource (Zen), and specifies the purpose of changing configuration. It distinguishes from siblings like 'close_page' or 'navigate_page' by focusing on restart with configuration changes, and notes that tabs will close.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for restarting Zen with new configuration but does not explicitly state when to use it vs. alternatives (e.g., 'navigate_page' for just navigation). No exclusion criteria or prerequisites are mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot_by_uidB
Capture element screenshot by UID as base64 PNG.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Element UID from snapshot | |
| saveTo | No | Optional file path to save the screenshot to instead of returning it as image data in the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose any behavioral traits such as side effects, error conditions (e.g., if UID not found), size limits, or whether the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that effectively communicates the core action. However, it is slightly underspecified for a tool with two parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no output schema, 2 params), the description is minimally adequate but lacks details on return value behavior and error handling. Sibling tools provide context but the description doesn't leverage it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add extra meaning beyond the schema (e.g., relationship between uid and saveTo, or whether saveTo overrides the return).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'capture', the resource 'element screenshot by UID', and the output format 'base64 PNG'. It is specific and distinguishes from sibling 'screenshot_page' which captures the full page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like screenshot_page, or when not to use it. The description does not provide context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot_pageC
Capture page screenshot as base64 PNG.
| Name | Required | Description | Default |
|---|---|---|---|
| saveTo | No | Optional file path to save the screenshot to instead of returning it as image data in the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It does not disclose whether the screenshot captures the full page or only the visible viewport, nor does it explain the behavior of the 'saveTo' parameter (e.g., whether it suppresses the base64 output). These are important behavioral traits for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks important details about the scope of the screenshot and parameter behavior. It trades completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description is minimally adequate but leaves ambiguity about the screenshot area and the side effects of 'saveTo'. A more complete description would clarify these aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for its single parameter, which already explains the 'saveTo' option. The tool description adds no additional meaning beyond the schema's description, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Capture page screenshot as base64 PNG' clearly states the action (capture) and resource (page screenshot) and output format (base64 PNG). However, it does not explicitly differentiate from sibling tool 'screenshot_by_uid', which might capture specific elements. A slight ambiguity remains whether it captures full page or just viewport.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'screenshot_by_uid', or any prerequisites such as page being fully loaded. The description lacks any usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_pageA
Select active tab by index, URL, or title. Index takes precedence.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL substring (case-insensitive) | |
| title | No | Title substring (case-insensitive) | |
| pageIdx | No | Tab index (0-based, most reliable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. Discloses selection mechanism and precedence, but omits side effects like error handling on no match. Partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 11 words, front-loaded with verb and resource. No redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple tool with 3 fully documented parameters and no output schema, description explains selection methods and precedence. Could mention return behavior or no-match handling, but adequate for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. Description adds 'Index takes precedence' which clarifies relationship but doesn't add new parameter meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'select' and resource 'active tab' with specific methods (by index, URL, or title). Distinguishes from siblings like list_pages and navigate_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives mentioned. The precedence rule ('Index takes precedence') provides some guidance but not enough context on when to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_viewport_sizeB
Set viewport dimensions in pixels.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | Width in pixels | |
| height | Yes | Height in pixels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavioral traits. It only states the action without mentioning side effects (e.g., whether it resizes the browser window, affects zoom, or requires a page). This is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence with no redundant words. It is front-loaded with the core action and perfectly sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite low complexity, the description fails to explain what happens after setting (e.g., return value, visual impact). With no output schema, more context is needed to fully inform the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'Set', the resource 'viewport dimensions', and specifies units in pixels. It uniquely identifies the tool's action among siblings, which include other page actions but none that set viewport size.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when or when not to use this tool. Does not mention prerequisites (e.g., a page must be open) or alternatives. The description assumes the agent will infer usage context, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_snapshotA
Capture DOM snapshot with stable UIDs. Retake after navigation.
| Name | Required | Description | Default |
|---|---|---|---|
| maxDepth | No | Max tree depth | |
| maxLines | No | Max lines (default: 100) | |
| selector | No | CSS selector to scope snapshot to specific element (e.g., "#app") | |
| includeAll | No | Include all visible elements without relevance filtering. Useful for Vue/Livewire apps (default: false) | |
| includeText | No | Include text (default: true) | |
| includeAttributes | No | Include ARIA attributes (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, but the description discloses key behavioral traits: stable UIDs and the need to retake after navigation, which helps the agent understand snapshot validity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first states purpose, second provides a critical usage guideline. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for conveying when to retake, but lacks details about the snapshot format, return value, or how UIDs are maintained. Given no output schema, more explanation would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter descriptions. The tool description adds minimal value beyond the schema, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose with a specific verb 'Capture' and resource 'DOM snapshot', and distinguishes from siblings like 'clear_snapshot' and 'screenshot_by_uid'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear guideline to retake after navigation, implying when the tool should be used again, but does not specify when not to use or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uninstall_extensionA
Uninstall a Zen extension using WebDriver BiDi webExtension.uninstall command. Requires the extension ID returned by install_extension or obtained from list_extensions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Extension ID (e.g., "addon@example.com") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It mentions the underlying WebDriver BiDi command but fails to disclose that this is a destructive operation, potential side effects, or failure modes. More behavioral context is needed for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, front-loading the action and method, and then providing the prerequisite. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the action and input source. However, it lacks details on return values, error behavior, or confirmation, which is a gap for a destructive action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter 'id' is well-described in the schema. The description adds no new information about the parameter format or constraints beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Uninstall' and the resource 'a Zen extension', distinguishing it from sibling tools like install_extension by referencing the extension ID from install_extension or list_extensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that the extension ID must be obtained from install_extension or list_extensions, providing clear prerequisite context. However, it does not explicitly state when not to use this tool, though no alternative uninstall tools exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_file_by_uidB
Upload file to file input by UID.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | File input UID from snapshot | |
| filePath | Yes | Local file path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits like whether the upload is synchronous, what happens if the file doesn't exist, or if any events are triggered. The minimal description carries the full burden but adds little insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the core action efficiently. It could be slightly more informative without being verbose, but it is concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations, output schema, and the tool's action (file upload), the description is incomplete. It does not cover error cases, prerequisites (e.g., file existence), or return value, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds no additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Upload file to file input by UID' clearly states the action (upload), resource (file), and target (file input by UID). It distinguishes from sibling tools like 'fill_by_uid' which are for text inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'fill_by_uid' or other interaction tools. The description lacks context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
32 tool updates
v0.2.0- First observed
accept_dialog - First observed
clear_console_messages - First observed
clear_snapshot - First observed
click_by_uid - First observed
close_page - First observed
dismiss_dialog - First observed
drag_by_uid_to_uid - First observed
fill_by_uid - First observed
fill_form_by_uid - First observed
get_network_request - First observed
get_zen_info - First observed
get_zen_output - First observed
hover_by_uid - First observed
install_extension - First observed
list_console_messages - First observed
list_network_requests - First observed
list_pages - First observed
navigate_history - First observed
navigate_page - First observed
new_page - First observed
profiler_is_active - First observed
profiler_start - First observed
profiler_stop - First observed
resolve_uid_to_selector - First observed
restart_zen - First observed
screenshot_by_uid - First observed
screenshot_page - First observed
select_page - First observed
set_viewport_size - First observed
take_snapshot - First observed
uninstall_extension - First observed
upload_file_by_uid
TDQS
Most tools have distinct purposes, but there is slight overlap between screenshots and snapshots, and between fill_by_uid and fill_form_by_uid. Overall, agents can differentiate them.
All tool names follow a consistent verb_noun pattern with underscores, using 'by_uid' suffix where applicable. Naming is predictable and clear.
32 tools cover a wide range of browser automation features. While slightly high, each tool serves a specific need and the count is justified by the domain complexity.
The set covers core browser actions (navigation, element interaction, dialogs), debugging (console, network, profiler), and extension management. Missing high-level actions like 'wait' or 'execute script', but overall comprehensive.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
MCP server to assist with JxBrowser development.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP Server for Chrome DevTools, following the Chrome DevTools Protocol. Integrates with Claude Desktop and Claude Code.307MIT
- FlicenseBqualityAmaintenanceFirefox browser automation via WebDriver BiDi for testing, scraping, and browser control. Supports snapshot/UID-based interactions, network monitoring, console capture, and screenshots.322,085389-
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables AI assistants to build, test, and debug Zotero 7/8 plugins through tools for UI inspection, JavaScript execution, and real-time log monitoring. It integrates with Zotero's Remote Debugging Protocol to provide rich context including screenshots, DOM access, and database querying.39MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP Server that enables AI assistants to interact with your local browsers.3,60754MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/simon-ami/zen-devtools-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server