Figranium MCP Server
OfficialThe Figranium MCP Server enables LLM clients (e.g., Claude Desktop, Cursor) to interact with the Figranium automation platform via the Model Context Protocol, allowing AI agents to discover, create, execute, and schedule web automation tasks.
Task Management: Create comprehensive web automation tasks with sequential browser actions (click, type, navigate, etc.), stealth controls, and variable support; list all tasks; execute tasks, optionally overriding variables per run.
Execution Monitoring: Retrieve logs and summaries of past task executions.
Schedule Management: Define, update, delete, and preview cron or frequency-based schedules; check schedule statuses for individual tasks or overall.
Rich Browser Capabilities: Supports modes like scrape, agent, and headful; actions include JavaScript execution, screenshots, HTTP requests, conditional logic, loops, and anti-bot stealth features; extract data in JSON/CSV; manage state via variables.
Client Integration: Easily install via
npxor Docker, with detailed schema validation errors to help LLMs self-correct.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Figranium MCP ServerCreate a Figranium task to scrape Hacker News and execute it."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Figranium MCP Server
A Model Context Protocol (MCP) server for Figranium, built with @modelcontextprotocol/sdk and the official @figranium/sdk API client. This server allows LLM clients (like Cline, Claude Desktop, Cursor, and Manus AI) to discover, execute, inspect, schedule, and programmatically create Figranium automation tasks via standard STDIO transport.
Table of Contents
Related MCP server: Automatisch MCP Server
Quick Start (Docker / OCI)
No Node.js runtime or repository clone is required. The official container image is published on GitHub Container Registry (ghcr.io).
Zero-config npm usage is also supported:
npx -y figranium-mcpFor local development:
git clone https://github.com/figranium/figranium-mcp
dcd figranium-mcp
npm install
npm run builddocker pull ghcr.io/figranium/figranium-mcp:latestEnvironment Variables
The server requires the following environment variables to interact with your Figranium instance:
FIGRANIUM_BASE_URL: The base URL of your Figranium server. Defaults tohttp://localhost:11345.FIGRANIUM_API_KEY: The API key generated from Figranium settings to authorize requests. This variable is required for startup.
If FIGRANIUM_API_KEY is missing, the server prints a clear setup message and exits gracefully.
Client Integration
Cline
Add the following to your cline_mcp_settings.json:
macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.jsonWindows:
%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.jsonLinux:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
{
"mcpServers": {
"figranium": {
"command": "npx",
"args": ["-y", "figranium-mcp"],
"env": {
"FIGRANIUM_BASE_URL": "http://localhost:11345",
"FIGRANIUM_API_KEY": "your_figranium_api_key_here"
}
}
}
}Alternatively, if running directly from a cloned source repository:
{
"mcpServers": {
"figranium": {
"command": "node",
"args": ["/path/to/figranium-mcp/dist/index.js"],
"env": {
"FIGRANIUM_BASE_URL": "http://localhost:11345",
"FIGRANIUM_API_KEY": "your_figranium_api_key_here"
}
}
}
}Automated Setup for Cline: Give Cline a link or reference to
llms-install.mdand Cline will perform the setup and configuration automatically.
Claude Desktop
Add the container configuration to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"figranium": {
"command": "npx",
"args": ["-y", "figranium-mcp"],
"env": {
"FIGRANIUM_BASE_URL": "http://localhost:11345",
"FIGRANIUM_API_KEY": "your_figranium_api_key_here"
}
}
}
}Note for Local Hosts: If your Figranium instance runs locally on your host machine, use
http://localhost:11345when running vianpx.
Cursor Integration
Add the following to ~/.cursor/mcp.json:
{
"mcpServers": {
"figranium": {
"command": "npx",
"args": ["-y", "figranium-mcp"],
"env": {
"FIGRANIUM_BASE_URL": "http://localhost:11345",
"FIGRANIUM_API_KEY": "YOUR_API_KEY"
}
}
}
}This lets Claude Desktop and Cursor launch the package directly without requiring a local build or a Docker bridge.
Automated AI Setup (llms-install.md)
AI assistants (including Cline, Cursor, Claude Desktop, and Roo Code) can automatically read llms-install.md to set up and configure the Figranium MCP server without manual intervention.
Server-Wide System Instructions
The server initializes with embedded guidelines for LLM agents detailing the task lifecycle:
Task Creation: Structuring name, starting URL, execution mode, and stealth mechanisms. Agents should default to
agentmode, including for scraping tasks.scrapemode does not support action blocks and is reserved for exceptional cases requiring extremely fast, action-free scraping;headfulis intended for visible interactive debugging.Step Sequence Construction: Ordering action steps (
navigate,wait_selector,click,type,javascript) and execution flow.Selector Strategy: Preferring robust ARIA, ID, and semantic class selectors with fallback strategies.
Execution & Variables: Injecting and overriding runtime context variables.
Available Resources
figranium://schemas/task-v1.json
MIME Type:
application/jsonDescription: Exposes the complete JSON Schema specification of a Figranium task. Allows agents to dynamically inspect valid parameters and payload shapes.
Available Tools
Task Operations
create_task: Create a complete, fully-configured Figranium automation task including sequential action steps, state variables, anti-bot stealth mechanisms, and optional scheduling.task_list: List all task IDs, names, and descriptions registered on the Figranium server.task_execute: Run a saved task bytaskIdwith optional variable overrides.
The task schema supports Figranium v0.18 browser interactions: checked-state actions, drag and drop, page reloads, native select controls, and single/double/right-click modes. It also supports opt-in page translation through translation: { enabled, targetLanguage } for Agent and headful Tasks.
Execution Operations
execution_list: Retrieve a summary of past task execution logs and statuses.
Schedule Operations
schedule_list: List all tasks with configured schedules.schedule_get_all_status: Retrieve overall scheduler state and metadata.schedule_get_status: Get active schedule details and next run time for a specifictaskId.schedule_set: Create or update a cron or frequency schedule on a task.schedule_delete: Disable and remove a task schedule.schedule_describe: Validate and preview a schedule configuration without applying it.
Rich Input Diagnostics & Self-Correction
If an invalid parameter payload is supplied to create_task, the server returns structured Zod diagnostic output (isError: true). This allows connected LLMs to analyze schema errors and attempt immediate self-correction.
Example response:
Schema Validation Failed!
Detailed breakdown of validation errors:
- At Step Index 2 (action step #3), parameter "type" failed validation: Invalid enum value. Expected 'click' | 'type' | 'wait' ..., received 'clikc'Local Development & Source Build
If you wish to modify the source code or run without Docker:
Prerequisites
Node.js v18+
npm v9+
Build & Run
# Clone repository
git clone [https://github.com/figranium/figranium-mcp.git](https://github.com/figranium/figranium-mcp.git)
cd figranium-mcp
# Install dependencies and compile TypeScript
npm install
npm run build
# Watch mode for active development
npm run watchTesting with MCP Inspector
Inspect server tools and resources using the official MCP debugging suite:
npx @modelcontextprotocol/inspector npx -y figranium-mcpAvailable Tools
16 toolsbrowser_openA
Launch or reattach a managed headful/interactive browser session.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Initial URL to navigate to when the browser opens. | |
| mode | No | Informational mode of browser. Note: only headful is supported via the VNC stack. | headful |
| devTools | No | Open DevTools automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds the useful 'reattach' behavior and 'managed' context, but it does not explain side effects, cleanup, or what happens on repeated calls beyond reattaching.
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 filler. It front-loads the core action and resource and contains only information that helps characterize the 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?
For a simple optional-parameter tool with rich schema and annotations, the description is largely adequate. However, with no output schema, it does not mention what the tool returns or how the 'reattach' behavior relates to the supplied url parameter, leaving a minor but real gap.
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 fully documents url, mode, and devTools. The description adds no additional parameter-level meaning, so it stays at the baseline and does not compensate 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 uses specific verbs ('Launch or reattach') plus a clear resource ('managed headful/interactive browser session'). It clearly identifies the tool's operation and is distinct from the sibling task/schedule/cabinet tools, even without naming a browser-specific alternative.
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 intended use is implied by the name and description, but there is no explicit statement about when to use this tool versus alternatives, nor any preconditions such as requiring the VNC stack. An agent gets only indirect routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cabinetA
Create a new Cabinet (durable download queue) on the Figranium server.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Descriptive name for the new Cabinet. Expected type: string. Example: 'Invoices' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive mutation, so the safety profile is covered. The description adds the 'durable download queue' framing but does not disclose additional behavioral details like duplicate handling, authentication, or response behavior. There is no contradiction with 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?
The description is a single, front-loaded sentence with no filler. The parenthetical 'durable download queue' adds useful context without bloating the text.
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 one-parameter create operation, the description and annotations are mostly sufficient: the agent knows the action, resource type, and mutation profile. The only notable gap is that no return value or follow-up behavior is described, and there is no output schema, but this is a minor omission for such a simple tool.
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 only parameter, 'name', is fully described in the schema with type and example, so schema coverage is 100%. The description itself adds no extra meaning about the parameter 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 uses the specific verb 'Create' and identifies the resource as 'Cabinet', further clarifying it as a 'durable download queue' on the Figranium server. This clearly distinguishes it from sibling tools like create_task or list_cabinets.
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 gives no explicit guidance about when to use this tool versus alternatives, prerequisites, or exclusions. An agent must infer selection context solely from the tool name and the generic action statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskA
Create a complete, fully-configured Figranium automation task including sequential action steps, state variables, anti-bot stealth mechanisms, and optional scheduling.
!!! IMPORTANT GUIDELINES FOR LLM AGENTS !!!
VARIABLE TEMPLATING SYNTAX: You MUST use
{$variable_name}(with a single curly brace and dollar sign, e.g.{$myVar}) for variable references/templating inside action values, URLs, headers, or body fields. NEVER use double curly braces like{{variable_name}}or JavaScript-style templates like${variable_name}, as these syntaxes are unsupported and will cause execution failures.TASK VALIDATION: Newly created or updated tasks are ordinarily intended to be validated against a real execution result so configuration, selectors, and extracted output can be checked.
MODE SELECTION: Use
agentmode by default, including for scraping tasks.scrapemode does not support action blocks and should be used only when extremely fast, action-free scraping is required. Useheadfulfor visible interactive debugging.
1. Purpose
Use this tool when you need to automate any recurring or complex web-based workflows, including data extraction (scraping), automated form-filling, dashboard testing, or dynamic visual monitoring. Tasks are stored permanently in Figranium and can be executed ad-hoc, triggered via API, or scheduled.
2. Execution Model
Figranium tasks run as a linear sequence of steps defined in the 'actions' array. Actions are processed in order from top to bottom. Control flow steps (such as 'if', 'while', 'repeat') allow loops and branching, while 'on_error' steps define fallback behaviors. Variables represent the state and can be updated dynamically during execution. Ensure all opened block structures (such as 'if', 'while', 'repeat', 'foreach') are closed with an 'end' action step.
3. Comprehensive Step Types
'navigate': Redirect browser to a new URL specified in the 'value' field.
'wait': Pause execution for N seconds specified in the 'value' field.
'wait_selector': Pause until the DOM element matching 'selector' is rendered.
'click': Simulate a single, double, or right click on the element matching 'selector'; set 'clickType' to 'double' or 'right' when needed.
'check' / 'uncheck': Idempotently set the checked state of a checkbox or radio control matching 'selector'.
'drag_and_drop': Drag from 'selector' to the required 'targetSelector'.
'reload': Reload the current page and wait for DOM content to load.
'select': Choose an option from a native select using 'selector' and its option 'value'.
'type': Type the 'value' into the 'selector' input element. Use 'typeMode' to clear/replace or append.
'hover': Move mouse pointer to the element matching 'selector'.
'press': Press a specific keyboard key (e.g., 'Enter') specified in the 'key' field.
'scroll': Scroll the page or target element to a specific coordinate or direction.
'javascript': Execute custom JavaScript on the page. Stored in 'value', outputs can be saved to 'varName'.
'screenshot': Capture and save a screenshot.
'http_request': Perform direct API requests.
'if', 'else', 'end': Conditional blocks based on variables.
'while', 'repeat', 'foreach': Looping blocks.
'stop': Halt task execution.
'set': Set or update a task variable.
'solve_captcha': Attempt to automatically solve a detected CAPTCHA challenge.
'wait_captcha': Pause until a CAPTCHA challenge is initialized/ready without solving it.
'upload': Attach the newest unuploaded file, ZIP, or folder from a Cabinet (see 'cabinetId') to a file input, chooser, or drop target matching 'selector'.
'finalize_uploads': Mark all Cabinet items attached during the execution as uploaded.
4. Selector Strategy & Fallbacks
When targeting elements, follow this hierarchy of selectors:
Unique IDs (e.g., '#submit-button')
ARIA roles and labels (e.g., '[aria-label="Search"]')
Reliable CSS classes or data attributes (e.g., '.btn-primary', '[data-testid="login"]')
Text matchers or XPath as a final resort. Fallback: If an element might be missing or slow to load, wrap the interaction inside an 'if' block evaluating a variable or use 'on_error' to catch failure.
5. Edge Cases & Retry Logic
Timeouts: Wait-selectors have a default timeout. Ensure critical steps use 'wait_selector' first to avoid clicking non-existent elements.
Stealth: Turning on options like 'naturalTyping', 'cursorGlide', and 'allowTypos' simulates authentic human speed and rhythm to prevent anti-bot blocking on protected sites.
Statelessness: Enable 'statelessExecution' to ensure execution is completely fresh without persistent browser storage/cookies.
6. Complex Real-World Multi-Step JSON Example:
{
"name": "HackerNews Custom Scraper",
"url": "https://news.ycombinator.com",
"mode": "agent",
"wait": 3,
"rotateUserAgents": true,
"stealth": {
"allowTypos": true,
"cursorGlide": true,
"naturalTyping": true
},
"actions": [
{
"type": "wait_selector",
"selector": ".hnname"
},
{
"type": "click",
"selector": "a.hnmore"
},
{
"type": "wait",
"value": "2"
},
{
"type": "javascript",
"value": "return Array.from(document.querySelectorAll('.athing')).map(tr => ({ id: tr.id, title: tr.querySelector('.titleline > a')?.innerText, href: tr.querySelector('.titleline > a')?.href }));",
"varName": "hn_stories"
},
{
"type": "navigate",
"value": "https://httpbin.org/post"
},
{
"type": "wait_selector",
"selector": "pre"
},
{
"type": "javascript",
"value": "console.log('Finished scraping and navigated successfully.');"
}
],
"variables": {},
"extractionFormat": "json"
}| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Initial URL to navigate to when the task starts. Expected type: string. Example: 'https://news.ycombinator.com' | |
| mode | Yes | Execution mode. Use 'agent' by default, including for scraping, because it supports action blocks. 'scrape' does not support action blocks and is only for exceptional, extremely fast action-free scraping. 'headful' runs in a visible browser window with human oversight. Expected type: string enum. Example: 'agent' | |
| name | Yes | Descriptive name of the automation task. Expected type: string. Example: 'HackerNews Scraper' | |
| wait | No | Standard delay in seconds to wait after navigation and page loads to let dynamic scripts complete. Expected type: number. Example: 5 | |
| actions | No | Sequential list of browser actions/control flow steps to execute. Action blocks require 'agent' or 'headful' mode and are not supported in 'scrape' mode. Note: Variable references MUST use '{$variable_name}' syntax. | |
| stealth | No | Configures realistic stealth, anti-bot, and human behavior simulation on the browser instance. | |
| schedule | No | Task automatic execution schedule. Expected type: object. | |
| selector | No | Default CSS selector to wait for on the page load before starting actions. Expected type: string. Example: '.main-content' | |
| variables | No | Task INPUT variables and caller-overridable configuration only. Do not declare output-only fields or transient runtime state here. Use Set Variable for mid-task state. Expected type: record object of variable configurations. | |
| description | No | Detailed description of what the task automates. Expected type: string. Example: 'Logs in and extracts weekly leads' | |
| humanTyping | No | Vary typing speeds and insert tiny delays to simulate organic human typing. Expected type: boolean. Example: true | |
| includeHtml | No | Whether to include the raw page HTML in the execution response. Expected type: boolean. Example: false | |
| translation | No | Optional page translation for Agent and headful runs. It is disabled by default and is not available in Scrape mode. | |
| rotateProxies | No | Rotate through configured proxy IPs to prevent IP-based rate limiting. Expected type: boolean. Example: false | |
| rotateViewport | No | Vary viewport resolutions randomly to simulate multiple desktop and mobile devices. Expected type: boolean. Example: true | |
| disableRecording | No | Disable video/VNC recording of this task to save storage. Expected type: boolean. Example: true | |
| extractionFormat | No | Target export format of any extracted data. Expected type: string enum. Example: 'json' | json |
| extractionScript | No | Post-execution extraction script for the task's actual final output. Final structured fields, lists, tables, parsing, and extraction logic belong here rather than in task variables or JavaScript action blocks. Expected type: string. Example: 'return Array.from(document.querySelectorAll("a")).map(el => el.href)' | |
| includeShadowDom | No | Whether to parse and resolve target elements residing in Shadow DOMs. Expected type: boolean. Example: true | |
| rotateUserAgents | No | Rotate user agents across requests to avoid pattern blocking and fingerprinting. Expected type: boolean. Example: true | |
| downloadCabinetId | No | Cabinet used for intercepted downloads; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic' | |
| statelessExecution | No | If set to true, clear browser cookies and session states between runs. Expected type: boolean. Example: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses persistence ('stored permanently'), the execution model, the intended post-creation validation against real results, and hard failure constraints around variable templating. It does not mention rate limits or auth requirements, but the annotations already carry the basic read/write and destructiveness profile.
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 long, but the critical variable-syntax and mode rules are front-loaded and the rest is organized by headings with a concrete JSON example. Slight repetition of the templating rule across multiple fields is intentional and earns its place in a complex schema.
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 22-parameter task-creation tool, it covers purpose, execution model, all action types, selector strategy, edge cases, and provides a full example. It does not describe the tool's return value or response shape, but the creation semantics and boundaries are otherwise 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?
The schema already documents all 22 parameters, but the description adds real semantics: what each action type does, selector precedence, when to use wait_selector, and the mandatory {$var} templating syntax. It goes beyond the schema without having to carry the whole load.
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 opening line states a specific action and object: 'Create a complete, fully-configured Figranium automation task' and enumerates its components (actions, variables, stealth, scheduling). It clearly differentiates create_task from task_update/task_delete and gives purpose context in section 1.
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?
Section 1 explicitly says 'Use this tool when you need to automate...' and the mode-selection guidance tells when agent/scrape/headful are appropriate. However, it does not explicitly name sibling tools or say when NOT to use create_task versus task_update/task_execute.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execution_listARead-onlyIdempotent
List a summary of all past execution records.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds minimal context by noting it returns a 'summary' but does not disclose pagination, ordering, or limits, which are common for list tools. With annotations present, the added value is limited.
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?
A single, efficient sentence that is front-loaded with the core action and scope. No redundant or 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 simple read-only list with no parameters and no output schema, the description is sufficient to understand the tool's purpose. It does not mention return format or pagination, but these are not critical for a basic summary listing. The absence of explicit usage guidance slightly lowers completeness, but the tool is straightforward.
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 the baseline is 4. The description adds no parameter-specific details, which is acceptable since there are none to document.
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 a specific verb 'List' and a clear resource 'all past execution records', which unambiguously differentiates it from sibling tools like task_list and schedule_list. It is specific and not a tautology.
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 usage for viewing execution history but does not explicitly state when to use it versus alternatives. There are no exclusions or conditions given, leaving the agent to infer from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspector_highlightB
Activate inspect/highlight mode on an active browser session with optional selector hints.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Optional URL to navigate to. | |
| sessionId | No | The ID of the browser session to target. | |
| targetHint | No | Optional text or hint to find and highlight target elements. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description doesn't need to repeat those. However, it adds minimal context—mentioning 'optional selector hints' but not what happens to the session when mode is activated, whether navigation occurs, or if there are side effects. Given the low bar from annotations, this is acceptable but not enriched.
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?
A single, front-loaded sentence with no fluff. The action and subject are immediately clear, and it avoids redundant detail. This is a model of conciseness.
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 description omits key contextual details: it assumes an 'active browser session' but doesn't state that a session must already exist or how to ensure one. There is no mention of return values or what the agent should do after activation. Given no output schema and no required parameters, the description leaves the agent with gaps about preconditions and expected outcomes.
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 each parameter already having a clear description. The tool description's phrase 'optional selector hints' aligns with targetHint but adds no new meaning beyond the schema. Since the schema does the heavy lifting, 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 clearly states a verb ('Activate') and a resource ('inspect/highlight mode') tied to a browser session. It distinguishes from siblings like browser_open and task_execute by focusing on a mode activation rather than opening or executing. However, 'inspect/highlight mode' is slightly underspecified—what it does beyond highlighting isn't elaborated, but the purpose is still discernible.
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. It does not mention prerequisites (e.g., an existing browser session), nor does it contrast with browser_open or task_execute. The agent must infer context from the description and sibling names, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cabinetsARead-onlyIdempotent
List all Cabinets (durable download queues) configured on the Figranium server, including their IDs, names, and item counts. Use this to find a Cabinet ID to reference in a Task's 'downloadCabinetId' field or an 'upload' action.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral scope ('all Cabinets configured on the Figranium server') and specifies the output fields (IDs, names, item counts), which is useful given there is no output schema.
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 front-loaded sentences provide the action, scope, return content, and intended use case with no redundancy or filler. Every clause 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 no-argument, no-output-schema list tool, the description is complete: it names the resource, the defining clarification ('durable download queues), the returned fields, and the practical use case for finding a Cabinet ID.
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 the baseline of 4 applies. The description does not need to explain parameter semantics, and the input schema already fully captures that no arguments are required.
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 uses a specific verb and resource: 'List all Cabinets (durable download queues) configured on the Figranium server. It also states what is returned (IDs, names, item counts), which makes the tool's function unmistakable and distinguishes it from sibling tools like create_cabinet.
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 gives explicit use context: 'Use this to find a Cabinet ID to reference in a Task's downloadCabinetId field or an upload action.' It does not explicitly mention when not to use it, but the use cases are clear enough; there are no competing list-cabinet alternatives among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_deleteBDestructiveIdempotent
Disable and remove the schedule configuration from a specific task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The unique ID of the task whose schedule to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, which cover the destructive and repeatable nature. The description adds the phrase 'disable and remove' which is consistent but does not provide additional behavioral context beyond what annotations offer. No contradiction exists.
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, tightly written sentence that conveys the action and scope immediately. It is front-loaded and contains no fluff or redundant wording.
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 deletion tool with one parameter, no output schema, and annotations covering safety, the description is adequate. It could mention that only the schedule is affected (not the task itself), but that is implied by 'schedule configuration'. Overall, nothing critical is missing.
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 describes taskId fully, and the description does not add any extra semantic detail about the parameter. With 100% schema coverage, the baseline is 3; the description does not improve on 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 (disable and remove) and the resource (schedule configuration from a specific task). It distinguishes from siblings like schedule_set (which likely sets a schedule) and schedule_list (which lists schedules). However, it does not explicitly mention the distinction from schedule_delete or other schedule-related tools, but the purpose is clear enough.
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 does not state conditions for use, prerequisites, or when to avoid it. An agent must infer that this tool is for deletion, but there is no explicit routing to or away from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_describeARead-onlyIdempotent
Validate and preview/describe a schedule configuration without saving it.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The unique ID of the task. | |
| frequency | No | The frequency mode. Used if scheduleMode is 'frequency'. | |
| dayOfMonth | No | Day of the month (1-31) if frequency is 'monthly'. | |
| daysOfWeek | No | Array of days of the week if frequency is 'weekly'. | |
| scheduleHour | No | Hour of execution (0-23) if frequency is 'daily', 'weekly', or 'monthly'. | |
| scheduleMode | Yes | Whether to define the schedule using 'cron' or structured 'frequency' fields. | |
| cronExpression | No | Standard 5-field cron expression. Used if scheduleMode is 'cron'. | |
| scheduleMinute | No | Minute of execution (0-59) if frequency is 'daily', 'weekly', or 'monthly'. | |
| intervalMinutes | No | Interval in minutes if frequency is 'interval'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the 'validate and preview' behavior, which goes beyond the read-only hint by indicating it returns a validation result or preview. This is consistent with annotations and adds useful 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 a single, front-loaded sentence that conveys the purpose and key constraint ('without saving it') with no wasted words. It is concise and efficient.
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?
There is no output schema, so the description should clarify what the tool returns. It says 'preview/describe' but does not specify the format, whether validation errors are thrown, or how results are presented. This is a notable gap for a validation tool, though the read-only and idempotent hints mitigate some ambiguity.
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 all 9 parameters are documented in the schema. The description does not add any parameter-specific meaning beyond the schema, so the baseline 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 clearly states the action (validate and preview/describe) and the resource (schedule configuration), and explicitly notes it does not save. This differentiates it from schedule_set (which saves) and schedule_delete (which removes). The verb+resource is specific and unambiguous.
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 validation/preview before committing, via the phrase 'without saving it'. It gives clear context for when to use it, though it does not explicitly name alternatives like schedule_set. This is adequate but lacks explicit exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_get_all_statusARead-onlyIdempotent
Get overall scheduler status and metadata for all schedules.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety expectations. The description adds that this returns overall status and metadata, but it does not disclose any additional behavioral details such as response shape, error cases, or what 'metadata' includes. This is acceptable for a simple read-only aggregate call, but the description itself adds only modest context beyond the 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?
The description is a single sentence with no filler, and the key scoping information ('for all schedules') is front-loaded. 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 no-parameter, read-only aggregate status tool, the description is largely complete: it states what is returned (overall scheduler status and metadata) and annotations cover safety and idempotency. A minor gap is the lack of detail about the returned metadata shape, but that is not necessary for invoking the tool correctly given its simplicity.
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 zero parameters and the input schema is empty with 100% coverage, so the baseline is 4. There is no parameter meaning that the description would need to clarify.
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 uses a specific verb ('Get') and a specific resource ('overall scheduler status and metadata for all schedules'). It clearly distinguishes itself from the sibling schedule_get_status by clearly indicating this is the aggregate/all-schedules variant.
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 phrase 'for all schedules' gives clear context for when to use this tool versus a per-schedule tool. It does not explicitly name alternatives or provide exclusions, but the aggregate scope implied by the description is enough for an agent to make a reasonable selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_get_statusARead-onlyIdempotent
Get the detailed schedule status, cron configuration, and next run time for a specific task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The unique ID of the task to check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral detail by specifying exactly what information is returned (schedule status, cron configuration, next run time), going beyond the bare read-only hint and helping the agent know what to expect.
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?
A single sentence that front-loads the core action and scope, with zero filler. Every word earns its place, and the most important qualifier ('for a specific task') is placed at the end but still clear.
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 read-only tool with one well-documented parameter and no output schema, the description is complete. It tells the agent what the tool returns and what it targets. No additional context is needed for correct invocation.
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 provides a complete description for taskId (coverage 100%), so the baseline is 3. The description reinforces that the parameter identifies a specific task, which adds a small semantic layer beyond the schema. It doesn't provide format constraints, but the schema is sufficient.
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 a specific verb ('Get'), a clear resource ('detailed schedule status, cron configuration, and next run time'), and a scope ('for a specific task'). This distinguishes it from sibling schedule_get_all_status, which covers all tasks. The purpose is unambiguous and immediately understood.
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 usage for a single task by explicitly saying 'for a specific task', which contrasts with the all-tasks sibling. However, it does not name alternatives or provide explicit when/when-not guidance. The context is clear enough for an agent to infer appropriate use, but explicit routing would be stronger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_listARead-onlyIdempotent
List all tasks that have schedules configured (enabled or not).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety profile. The description adds that it includes schedules regardless of enabled state, which is useful context. However, it does not disclose output format, pagination, or any other behavioral traits beyond the given, so it does not exceed the baseline for annotation-backed transparency.
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 is front-loaded with the action ('List') and subject ('all tasks that have schedules'). It includes the 'enabled or not' qualifier compactly. There is no fluff, making it highly efficient.
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?
This is a simple, parameterless list operation. The description fully explains its scope and includes the important nuance about enabled/disabled states. There is no output schema, but the description suffices for an agent to know what to expect. The presence of siblings does not create a need for more information because the purpose is clear.
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?
With zero parameters and 100% schema coverage (empty schema), the baseline is 4 per rubric. The description adds nothing about parameters because there are none, but this matches the baseline exactly.
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 'all tasks that have schedules configured', with an explicit qualifier '(enabled or not)' that disambiguates from potentially similar tools. This makes the tool's purpose unambiguous and distinct from siblings like schedule_get_all_status or schedule_get_status, which focus on status rather than the task list.
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 usage when one needs to know which tasks have schedules, but it does not explicitly mention when to use this over schedule_get_all_status or schedule_get_status. The differentiation is implicit from the wording, but there is no direct guidance, so it earns a 3 rather than a 4 or 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_setBIdempotent
Create or update a schedule for a specific task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The unique ID of the task to configure. | |
| enabled | Yes | Whether the schedule is active. | |
| frequency | No | The frequency mode. Used if scheduleMode is 'frequency'. | |
| dayOfMonth | No | Day of the month (1-31) if frequency is 'monthly'. | |
| daysOfWeek | No | Array of days of the week if frequency is 'weekly'. | |
| scheduleHour | No | Hour of execution (0-23) if frequency is 'daily', 'weekly', or 'monthly'. | |
| scheduleMode | Yes | Whether to define the schedule using 'cron' or structured 'frequency' fields. | |
| cronExpression | No | Standard 5-field cron expression. Used if scheduleMode is 'cron'. | |
| scheduleMinute | No | Minute of execution (0-59) if frequency is 'daily', 'weekly', or 'monthly'. | |
| intervalMinutes | No | Interval in minutes if frequency is 'interval'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the tool is mutating, idempotent, and not destructive. The description adds the upsert semantics of create-or-update, but gives no detail on side effects, overwrite behavior, or validation. There is no contradiction with 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?
The description is a single, front-loaded sentence with no filler or repetition. It is concise, though slightly too sparse to fully support a 10-parameter scheduling 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?
The tool has 10 parameters, two mutually exclusive schedule modes, and no output schema, but the description provides no guidance on cron versus frequency, per-mode required fields, or how an existing schedule is affected. The schema helps, but the description alone is not complete enough for reliable tool selection and invocation.
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 10 parameters have schema-level descriptions, so the schema carries the semantic burden. The description adds little beyond the notion of 'specific task,' which maps to taskId, but does not compensate for any missing schema detail.
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 a clear verb-resource pair: 'Create or update a schedule for a specific task.' This unambiguously identifies the operation and distinguishes it from read/delete schedule siblings like schedule_list and schedule_delete.
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 when-to-use or when-not-to-use guidance is provided. The description does not mention alternatives, nor does it explain when to choose cron mode versus frequency mode, leaving the agent to infer the correct usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_deleteADestructiveIdempotent
Permanently delete a Figranium task by taskId.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The unique ID of the task to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds 'permanently' which reinforces destructiveness but does not disclose idempotency behavior (though idempotentHint=true is in annotations) or side effects like cascading deletes. It provides minimal extra behavioral context beyond 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?
A single, efficient sentence with the verb and object front-loaded. No filler or redundant phrases beyond the minor redundancy of 'by taskId' which is acceptable.
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 one-parameter delete operation with no output schema, the description covers the essential action and target. It does not mention potential errors or prerequisites, but given the simplicity and annotation coverage, it is sufficiently complete for an agent to call it correctly.
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 schema already explains taskId clearly. The description's 'by taskId' is redundant and adds no semantic detail beyond the schema. Baseline 3 is appropriate when the schema fully documents parameters.
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 (delete), the resource (Figranium task), and the scope (permanently, by taskId). It distinguishes from siblings like create_task, task_update, and task_list without ambiguity.
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. It does not mention conditions for deletion, prerequisites, or contrast with update or list operations. An agent must infer appropriate usage from the action name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_executeADestructive
Execute a saved automation task by ID and return its real run result. This is also useful for validating newly created or updated tasks against actual browser behavior and output.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The unique ID of the task to execute. | |
| variables | No | Key-value pairs representing the execution variables (optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, signaling mutation and non-idempotency. The description adds that it returns a 'real run result' and is useful for validating against 'actual browser behavior', which conveys that the tool performs a real browser execution with side effects. This adds context beyond the annotations without contradicting them.
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: the first states the core action, the second adds a practical use case. Both are concise and directly relevant, with no fluff or redundant information. The main purpose is front-loaded, making it easy for an agent to scan.
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 description covers the primary purpose and a use case, and the annotations handle the safety profile (destructive, non-idempotent). It mentions returning a 'real run result' but does not specify the exact output structure, which could be useful. However, given the tool's simplicity and lack of an output schema, it is adequately complete for an agent to decide to call 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?
The input schema fully describes both parameters: taskId is the unique ID, and variables are key-value pairs for execution variables. The description does not add any parameter-specific details. With 100% schema coverage, the baseline of 3 is appropriate—no extra value is provided beyond what the schema already offers.
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: 'Execute a saved automation task by ID and return its real run result.' This is specific with a verb and resource, and it distinguishes from siblings like execution_list (which lists runs) and browser_open (which opens a browser). No ambiguity about what the tool does.
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 a clear use case: 'This is also useful for validating newly created or updated tasks against actual browser behavior and output.' This implies when to use it—when you need a real execution result. It does not explicitly mention alternatives or exclusions, but the context is sufficient to guide selection. A stronger definition would name a sibling like execution_list for viewing past runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_listARead-onlyIdempotent
List all task IDs, names, and descriptions from Figranium.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the scope ('all') and the specific fields returned, which provides useful context beyond the annotations, though it doesn't mention any edge cases or side effects.
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 front-loads the action and resource. It contains no unnecessary words and fully conveys the tool's 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 read-only list tool with no parameters and no output schema, the description is complete. It specifies what will be returned (task IDs, names, descriptions) and the scope (all tasks), which is all an agent needs to know to use it correctly.
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 there is nothing for the description to explain beyond what the schema already shows. The schema description coverage is trivially 100%, and the baseline for zero-parameter tools is 4, which is appropriate here.
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 'task IDs, names, and descriptions from Figranium', making the tool's purpose unambiguous. It distinguishes itself from sibling tools like create_task, task_update, and task_delete by focusing on listing.
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 usage when you need an overview of all tasks. While it doesn't explicitly mention alternatives or when not to use it, the context is clear enough given the simple nature of the tool and its distinct action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_updateAIdempotent
Update one or more fields on an existing, saved Figranium browser-automation task.
When to use
Use this after task_list identifies the task to modify—for example, to correct its name or URL, replace its action sequence, change input variables, adjust stealth settings, or revise its extraction script or schedule. The task remains stored under the same taskId and is not executed by this operation.
Required request shape
taskIdis required and must be the ID of an existing task.Include at least one additional field. An ID-only request is rejected because it would make no change.
Every other field is optional: omitted fields are left unchanged.
Repeating the same request is safe and produces the same stored configuration.
Important update behavior
For compound fields—
actions,variables,stealth,translation, andschedule—send the complete value you want stored for that field, rather than only a nested fragment.actionsare an ordered replacement sequence. Useagentorheadfulmode for actions;scrapemode does not support them. Close everyif,while,repeat, orforeachblock with anendaction.Use
{$variable_name}for task-variable references in URLs, headers, bodies, and action values. Do not use{{variable_name}}or${variable_name}.This tool changes saved configuration but does not run or delete a task. Use
task_executeto validate an updated workflow andtask_deleteonly when permanent removal is intended.
Examples
Rename a task: { "taskId": "task_101", "name": "Daily lead extractor" }.
Replace its workflow and output extraction: { "taskId": "task_101", "actions": [{ "type": "wait_selector", "selector": "[data-testid='results']" }], "extractionScript": "return document.title" }.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Initial URL to navigate to when the task starts. Expected type: string. Example: 'https://news.ycombinator.com' | |
| mode | No | Execution mode. Use 'agent' by default, including for scraping, because it supports action blocks. 'scrape' does not support action blocks and is only for exceptional, extremely fast action-free scraping. 'headful' runs in a visible browser window with human oversight. Expected type: string enum. Example: 'agent' | |
| name | No | Descriptive name of the automation task. Expected type: string. Example: 'HackerNews Scraper' | |
| wait | No | Standard delay in seconds to wait after navigation and page loads to let dynamic scripts complete. Expected type: number. Example: 5 | |
| taskId | Yes | ID of the existing task to modify. Get it from task_list. Required; must be a non-empty string. Example: 'task_101'. | |
| actions | No | Sequential list of browser actions/control flow steps to execute. Action blocks require 'agent' or 'headful' mode and are not supported in 'scrape' mode. Note: Variable references MUST use '{$variable_name}' syntax. | |
| stealth | No | Configures realistic stealth, anti-bot, and human behavior simulation on the browser instance. | |
| schedule | No | Task automatic execution schedule. Expected type: object. | |
| selector | No | Default CSS selector to wait for on the page load before starting actions. Expected type: string. Example: '.main-content' | |
| variables | No | Task INPUT variables and caller-overridable configuration only. Do not declare output-only fields or transient runtime state here. Use Set Variable for mid-task state. Expected type: record object of variable configurations. | |
| description | No | Detailed description of what the task automates. Expected type: string. Example: 'Logs in and extracts weekly leads' | |
| humanTyping | No | Vary typing speeds and insert tiny delays to simulate organic human typing. Expected type: boolean. Example: true | |
| includeHtml | No | Whether to include the raw page HTML in the execution response. Expected type: boolean. Example: false | |
| translation | No | Optional page translation for Agent and headful runs. It is disabled by default and is not available in Scrape mode. | |
| rotateProxies | No | Rotate through configured proxy IPs to prevent IP-based rate limiting. Expected type: boolean. Example: false | |
| rotateViewport | No | Vary viewport resolutions randomly to simulate multiple desktop and mobile devices. Expected type: boolean. Example: true | |
| disableRecording | No | Disable video/VNC recording of this task to save storage. Expected type: boolean. Example: true | |
| extractionFormat | No | Target export format of any extracted data. Expected type: string enum. Example: 'json' | json |
| extractionScript | No | Post-execution extraction script for the task's actual final output. Final structured fields, lists, tables, parsing, and extraction logic belong here rather than in task variables or JavaScript action blocks. Expected type: string. Example: 'return Array.from(document.querySelectorAll("a")).map(el => el.href)' | |
| includeShadowDom | No | Whether to parse and resolve target elements residing in Shadow DOMs. Expected type: boolean. Example: true | |
| rotateUserAgents | No | Rotate user agents across requests to avoid pattern blocking and fingerprinting. Expected type: boolean. Example: true | |
| downloadCabinetId | No | Cabinet used for intercepted downloads; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic' | |
| statelessExecution | No | If set to true, clear browser cookies and session states between runs. Expected type: boolean. Example: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description elaborates on idempotency ('Repeating the same request is safe'), non-execution, and compound-field replacement semantics. It also details variable syntax and action ordering, adding substantial behavioral 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 long but well-structured with clear sections: When to use, Required request shape, Important update behavior, and Examples. It front-loads the core purpose and each section provides essential information without redundancy. Every sentence 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 tool with 23 parameters, nested objects, and no output schema, the description covers key behaviors, usage, examples, and parameter semantics comprehensively. An agent has all necessary information to call it correctly, including what not to do and how to validate results.
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?
Although schema coverage is 100%, the description adds crucial guidance not present in individual field descriptions: the complete-value requirement for compound fields (actions, variables, stealth, translation, schedule), the ordered replacement nature of actions, and the variable reference syntax generalized across URLs, headers, bodies, and action values. This goes well 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 the action: 'Update one or more fields on an existing, saved Figranium browser-automation task.' It names the specific verb and resource, and immediately distinguishes itself from siblings by noting it does not execute or delete the task, and references task_list for retrieval.
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 explicit when-to-use guidance: 'Use this after task_list identifies the task to modify.' It also lists alternatives: 'Use task_execute to validate an updated workflow and task_delete only when permanent removal is intended.' This clearly routes the agent to the correct sibling.
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.
1 tool update
v1.3.1- Changed
task_update5 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "name" + ] + }, + { + "required": [ + "description" + ] + }, + { + "required": [ + "url" + ] + }, + { + "required": [ + "mode" + ] + }, + { + "required": [ + "wait" + ] + }, + { + "required": [ + "selector" + ] + }, + { + "required": [ + "rotateUserAgents" + ] + }, + { + "required": [ + "rotateProxies" + ] + }, + { + "required": [ + "rotateViewport" + ] + }, + { + "required": [ + "humanTyping" + ] + }, + { + "required": [ + "stealth" + ] + }, + { + "required": [ + "actions" + ] + }, + { + "required": [ + "variables" + ] + }, + { + "required": [ + "extractionScript" + ] + }, + { + "required": [ + "extractionFormat" + ] + }, + { + "required": [ + "includeHtml" + ] + }, + { + "required": [ + "includeShadowDom" + ] + }, + { + "required": [ + "disableRecording" + ] + }, + { + "required": [ + "statelessExecution" + ] + }, + { + "required": [ + "translation" + ] + }, + { + "required": [ + "downloadCabinetId" + ] + }, + { + "required": [ + "schedule" + ] + } +] - changed
Input schema / descriptionPrevious value: -"Exhaustive task update structure for Figranium automation tasks. NOTE: You MUST use '{$variable_name}' variable referencing syntax, and you MUST automatically test your changes using 'task_execute' right after task update unless prompted not to."New value: +"Partially update a saved Figranium automation task. First use task_list to obtain taskId, then send taskId plus at least one field to change. Omitted fields are left unchanged. This operation persists the supplied values and is idempotent when repeated with the same payload. When supplying compound fields such as actions, variables, stealth, translation, or schedule, provide the complete intended value for that field. Use '{$variable_name}' (not '{{variable_name}}' or '${variable_name}') for variable references in URLs and action values. After changing browser behavior, selectors, actions, or extractionScript, use task_execute to validate the real result. Do not use this tool to delete a task; use task_delete instead." - added
Input schema / examplesAdded value: +[ + { + "name": "Daily lead extractor", + "taskId": "task_101" + }, + { + "actions": [ + { + "selector": "[data-testid='results']", + "type": "wait_selector" + }, + { + "selector": "a.next-page", + "type": "click" + } + ], + "extractionScript": "return Array.from(document.querySelectorAll('.result')).map((el) => el.textContent?.trim());", + "taskId": "task_101" + } +] - changed
Input schema / properties / taskId / descriptionPrevious value: -"The unique ID of the task to update."New value: +"ID of the existing task to modify. Get it from task_list. Required; must be a non-empty string. Example: 'task_101'." - added
Input schema / properties / taskId / minLengthAdded value: +1
2 tool updates
v1.3.0- Changed
create_task6 fields changed- added
Input schema / properties / actions / items / properties / clickTypeAdded value: +{ + "default": "single", + "description": "Click interaction mode for 'click': single, double, or right click. Expected type: string enum. Example: 'double'", + "enum": [ + "single", + "double", + "right" + ], + "type": "string" +} - added
Input schema / properties / actions / items / properties / targetSelectorAdded value: +{ + "description": "Destination selector for 'drag_and_drop'. Required with a source 'selector'. Expected type: string. Example: '.done-column'", + "type": "string" +} - changed
Input schema / properties / actions / items / properties / type / enumPrevious value: -[ - "click", - "type", - "wait", - "wait_selector", - "press", - "scroll", - "javascript", - "csv", - "hover", - "merge", - "screenshot", - "if", - "else", - "end", - "while", - "repeat", - "foreach", - "stop", - "set", - "on_error", - "navigate", - "wait_downloads", - "start", - "http_request", - "get_content", - "solve_captcha", - "wait_captcha", - "upload", - "finalize_uploads" -]New value: +[ + "click", + "type", + "wait", + "wait_selector", + "press", + "scroll", + "javascript", + "csv", + "hover", + "merge", + "screenshot", + "if", + "else", + "end", + "while", + "repeat", + "foreach", + "stop", + "set", + "on_error", + "navigate", + "wait_downloads", + "start", + "http_request", + "get_content", + "solve_captcha", + "wait_captcha", + "upload", + "finalize_uploads", + "check", + "uncheck", + "drag_and_drop", + "reload", + "select", + "do_nothing" +] - removed
Input schema / properties / cabinetIdRemoved value: -{ - "description": "Cabinet used for intercepted downloads and 'upload' actions that omit their own cabinetId; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'", - "type": "string" -} - added
Input schema / properties / downloadCabinetIdAdded value: +{ + "description": "Cabinet used for intercepted downloads; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'", + "type": "string" +} - added
Input schema / properties / translationAdded value: +{ + "description": "Optional page translation for Agent and headful runs. It is disabled by default and is not available in Scrape mode.", + "properties": { + "enabled": { + "description": "Enable rendered-page translation. Expected type: boolean. Example: true", + "type": "boolean" + }, + "targetLanguage": { + "description": "translate.js target language name. Expected type: string. Example: 'spanish'", + "type": "string" + } + }, + "required": [ + "enabled", + "targetLanguage" + ], + "type": "object" +}
- Changed
task_update6 fields changed- added
Input schema / properties / actions / items / properties / clickTypeAdded value: +{ + "default": "single", + "description": "Click interaction mode for 'click': single, double, or right click. Expected type: string enum. Example: 'double'", + "enum": [ + "single", + "double", + "right" + ], + "type": "string" +} - added
Input schema / properties / actions / items / properties / targetSelectorAdded value: +{ + "description": "Destination selector for 'drag_and_drop'. Required with a source 'selector'. Expected type: string. Example: '.done-column'", + "type": "string" +} - changed
Input schema / properties / actions / items / properties / type / enumPrevious value: -[ - "click", - "type", - "wait", - "wait_selector", - "press", - "scroll", - "javascript", - "csv", - "hover", - "merge", - "screenshot", - "if", - "else", - "end", - "while", - "repeat", - "foreach", - "stop", - "set", - "on_error", - "navigate", - "wait_downloads", - "start", - "http_request", - "get_content", - "solve_captcha", - "wait_captcha", - "upload", - "finalize_uploads" -]New value: +[ + "click", + "type", + "wait", + "wait_selector", + "press", + "scroll", + "javascript", + "csv", + "hover", + "merge", + "screenshot", + "if", + "else", + "end", + "while", + "repeat", + "foreach", + "stop", + "set", + "on_error", + "navigate", + "wait_downloads", + "start", + "http_request", + "get_content", + "solve_captcha", + "wait_captcha", + "upload", + "finalize_uploads", + "check", + "uncheck", + "drag_and_drop", + "reload", + "select", + "do_nothing" +] - removed
Input schema / properties / cabinetIdRemoved value: -{ - "description": "Cabinet used for intercepted downloads and 'upload' actions that omit their own cabinetId; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'", - "type": "string" -} - added
Input schema / properties / downloadCabinetIdAdded value: +{ + "description": "Cabinet used for intercepted downloads; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'", + "type": "string" +} - added
Input schema / properties / translationAdded value: +{ + "description": "Optional page translation for Agent and headful runs. It is disabled by default and is not available in Scrape mode.", + "properties": { + "enabled": { + "description": "Enable rendered-page translation. Expected type: boolean. Example: true", + "type": "boolean" + }, + "targetLanguage": { + "description": "translate.js target language name. Expected type: string. Example: 'spanish'", + "type": "string" + } + }, + "required": [ + "enabled", + "targetLanguage" + ], + "type": "object" +}
2 tool updates
v1.2.3- Changed
create_task4 fields changed- changed
Input schema / properties / actions / items / properties / varName / descriptionPrevious value: -"Variable name to store output data or extracted content in. Expected type: string. Example: 'extractedTitle'"New value: +"Runtime variable name used by actions such as Set Variable, merge, or foreach. Set Variable may create or update this runtime variable. Do not use varName as the schema for final task outputs; use extractionScript for final extraction." - changed
Input schema / properties / extractionScript / descriptionPrevious value: -"Optional post-execution script to extract data. Expected type: string. Example: 'return Array.from(document.querySelectorAll(\"a\")).map(el => el.href)'"New value: +"Post-execution extraction script for the task's actual final output. Final structured fields, lists, tables, parsing, and extraction logic belong here rather than in task variables or JavaScript action blocks. Expected type: string. Example: 'return Array.from(document.querySelectorAll(\"a\")).map(el => el.href)'" - changed
Input schema / properties / variables / additionalProperties / descriptionPrevious value: -"Configures state variables accessible throughout the task execution."New value: +"Configures task input variables and caller-overridable values. Do not declare output-only fields here; use Set Variable for mid-task runtime state and extractionScript for final outputs." - changed
Input schema / properties / variables / descriptionPrevious value: -"Task variables to store state and dynamic values. Expected type: record object of variable configurations."New value: +"Task INPUT variables and caller-overridable configuration only. Do not declare output-only fields or transient runtime state here. Use Set Variable for mid-task state. Expected type: record object of variable configurations."
- Changed
task_update4 fields changed- changed
Input schema / properties / actions / items / properties / varName / descriptionPrevious value: -"Variable name to store output data or extracted content in. Expected type: string. Example: 'extractedTitle'"New value: +"Runtime variable name used by actions such as Set Variable, merge, or foreach. Set Variable may create or update this runtime variable. Do not use varName as the schema for final task outputs; use extractionScript for final extraction." - changed
Input schema / properties / extractionScript / descriptionPrevious value: -"Optional post-execution script to extract data. Expected type: string. Example: 'return Array.from(document.querySelectorAll(\"a\")).map(el => el.href)'"New value: +"Post-execution extraction script for the task's actual final output. Final structured fields, lists, tables, parsing, and extraction logic belong here rather than in task variables or JavaScript action blocks. Expected type: string. Example: 'return Array.from(document.querySelectorAll(\"a\")).map(el => el.href)'" - changed
Input schema / properties / variables / additionalProperties / descriptionPrevious value: -"Configures state variables accessible throughout the task execution."New value: +"Configures task input variables and caller-overridable values. Do not declare output-only fields here; use Set Variable for mid-task runtime state and extractionScript for final outputs." - changed
Input schema / properties / variables / descriptionPrevious value: -"Task variables to store state and dynamic values. Expected type: record object of variable configurations."New value: +"Task INPUT variables and caller-overridable configuration only. Do not declare output-only fields or transient runtime state here. Use Set Variable for mid-task state. Expected type: record object of variable configurations."
4 tool updates
v1.2.1- Added
create_cabinet - Changed
create_task8 fields changed- changed
Input schema / properties / actions / descriptionPrevious value: -"Sequential list of browser actions/control flow steps to execute. Note: Variable reference MUST use '{$variable_name}' syntax."New value: +"Sequential list of browser actions/control flow steps to execute. Action blocks require 'agent' or 'headful' mode and are not supported in 'scrape' mode. Note: Variable references MUST use '{$variable_name}' syntax." - added
Input schema / properties / actions / items / properties / cabinetIdAdded value: +{ + "description": "Source Cabinet ID for an 'upload' action; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'", + "type": "string" +} - added
Input schema / properties / actions / items / properties / captchaTypeAdded value: +{ + "description": "The CAPTCHA provider to target for 'solve_captcha'/'wait_captcha' actions. Expected type: string enum. Example: 'recaptcha_v2'", + "enum": [ + "recaptcha_v2", + "recaptcha_v3", + "hcaptcha", + "turnstile" + ], + "type": "string" +} - added
Input schema / properties / actions / items / properties / markAsUploadedAdded value: +{ + "default": false, + "description": "When true, an 'upload' action marks its Cabinet item uploaded immediately after attaching it. Expected type: boolean. Example: false", + "type": "boolean" +} - added
Input schema / properties / actions / items / properties / timeoutAdded value: +{ + "description": "Maximum time in seconds to wait for a CAPTCHA to become ready or solved, for 'solve_captcha'/'wait_captcha' actions. Expected type: number. Example: 30", + "type": "number" +} - changed
Input schema / properties / actions / items / properties / type / enumPrevious value: -[ - "click", - "type", - "wait", - "wait_selector", - "press", - "scroll", - "javascript", - "csv", - "hover", - "merge", - "screenshot", - "if", - "else", - "end", - "while", - "repeat", - "foreach", - "stop", - "set", - "on_error", - "navigate", - "wait_downloads", - "start", - "http_request", - "get_content" -]New value: +[ + "click", + "type", + "wait", + "wait_selector", + "press", + "scroll", + "javascript", + "csv", + "hover", + "merge", + "screenshot", + "if", + "else", + "end", + "while", + "repeat", + "foreach", + "stop", + "set", + "on_error", + "navigate", + "wait_downloads", + "start", + "http_request", + "get_content", + "solve_captcha", + "wait_captcha", + "upload", + "finalize_uploads" +] - added
Input schema / properties / cabinetIdAdded value: +{ + "description": "Cabinet used for intercepted downloads and 'upload' actions that omit their own cabinetId; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'", + "type": "string" +} - changed
Input schema / properties / mode / descriptionPrevious value: -"Execution mode. 'scrape' is fast and headless; 'agent' uses automated browser interaction; 'headful' runs in a visible browser window with human oversight. Expected type: string enum. Example: 'agent'"New value: +"Execution mode. Use 'agent' by default, including for scraping, because it supports action blocks. 'scrape' does not support action blocks and is only for exceptional, extremely fast action-free scraping. 'headful' runs in a visible browser window with human oversight. Expected type: string enum. Example: 'agent'"
- Added
list_cabinets - Changed
task_update8 fields changed- changed
Input schema / properties / actions / descriptionPrevious value: -"Sequential list of browser actions/control flow steps to execute. Note: Variable reference MUST use '{$variable_name}' syntax."New value: +"Sequential list of browser actions/control flow steps to execute. Action blocks require 'agent' or 'headful' mode and are not supported in 'scrape' mode. Note: Variable references MUST use '{$variable_name}' syntax." - added
Input schema / properties / actions / items / properties / cabinetIdAdded value: +{ + "description": "Source Cabinet ID for an 'upload' action; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'", + "type": "string" +} - added
Input schema / properties / actions / items / properties / captchaTypeAdded value: +{ + "description": "The CAPTCHA provider to target for 'solve_captcha'/'wait_captcha' actions. Expected type: string enum. Example: 'recaptcha_v2'", + "enum": [ + "recaptcha_v2", + "recaptcha_v3", + "hcaptcha", + "turnstile" + ], + "type": "string" +} - added
Input schema / properties / actions / items / properties / markAsUploadedAdded value: +{ + "default": false, + "description": "When true, an 'upload' action marks its Cabinet item uploaded immediately after attaching it. Expected type: boolean. Example: false", + "type": "boolean" +} - added
Input schema / properties / actions / items / properties / timeoutAdded value: +{ + "description": "Maximum time in seconds to wait for a CAPTCHA to become ready or solved, for 'solve_captcha'/'wait_captcha' actions. Expected type: number. Example: 30", + "type": "number" +} - changed
Input schema / properties / actions / items / properties / type / enumPrevious value: -[ - "click", - "type", - "wait", - "wait_selector", - "press", - "scroll", - "javascript", - "csv", - "hover", - "merge", - "screenshot", - "if", - "else", - "end", - "while", - "repeat", - "foreach", - "stop", - "set", - "on_error", - "navigate", - "wait_downloads", - "start", - "http_request", - "get_content" -]New value: +[ + "click", + "type", + "wait", + "wait_selector", + "press", + "scroll", + "javascript", + "csv", + "hover", + "merge", + "screenshot", + "if", + "else", + "end", + "while", + "repeat", + "foreach", + "stop", + "set", + "on_error", + "navigate", + "wait_downloads", + "start", + "http_request", + "get_content", + "solve_captcha", + "wait_captcha", + "upload", + "finalize_uploads" +] - added
Input schema / properties / cabinetIdAdded value: +{ + "description": "Cabinet used for intercepted downloads and 'upload' actions that omit their own cabinetId; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'", + "type": "string" +} - changed
Input schema / properties / mode / descriptionPrevious value: -"Execution mode. 'scrape' is fast and headless; 'agent' uses automated browser interaction; 'headful' runs in a visible browser window with human oversight. Expected type: string enum. Example: 'agent'"New value: +"Execution mode. Use 'agent' by default, including for scraping, because it supports action blocks. 'scrape' does not support action blocks and is only for exceptional, extremely fast action-free scraping. 'headful' runs in a visible browser window with human oversight. Expected type: string enum. Example: 'agent'"
5 tool updates
v1.1.1- Added
browser_open - Changed
create_task5 fields changed- changed
Input schema / properties / actions / descriptionPrevious value: -"Sequential list of browser actions/control flow steps to execute."New value: +"Sequential list of browser actions/control flow steps to execute. Note: Variable reference MUST use '{$variable_name}' syntax." - changed
Input schema / properties / actions / items / descriptionPrevious value: -"Represents a discrete automation step or flow-control operation executed in sequence."New value: +"Represents a discrete automation step or flow-control operation executed in sequence. Variable reference MUST use '{$variable_name}' syntax." - changed
Input schema / properties / actions / items / properties / body / descriptionPrevious value: -"Payload body for 'http_request' actions. Expected type: string. Example: '{\"query\": \"sales\"}'"New value: +"Payload body for 'http_request' actions. Supports variable templating. MUST use '{$variable_name}' syntax for variable references (e.g., '{\"query\": \"{$value}\"}'). NEVER use '{{variable_name}}' or '${variable_name}'. Expected type: string. Example: '{\"query\": \"{$value}\"}'" - changed
Input schema / properties / actions / items / properties / headers / descriptionPrevious value: -"JSON stringified headers for 'http_request'. Expected type: string. Example: '{\"Authorization\": \"Bearer x\"}'"New value: +"JSON stringified headers for 'http_request'. Supports variable templating. MUST use '{$variable_name}' syntax for variable references (e.g., '{\"Authorization\": \"Bearer {$token}\"}'). NEVER use '{{variable_name}}' or '${variable_name}'. Expected type: string. Example: '{\"Authorization\": \"Bearer {$token}\"}'" - changed
Input schema / properties / actions / items / properties / value / descriptionPrevious value: -"Input value or configuration value for this action. Used for typing text, script contents, or wait durations. Expected type: string. Example: 'hello@world.com'"New value: +"Input value or configuration value for this action. Supports variable templating. MUST use '{$variable_name}' syntax for variable references (e.g., '{$myVar}'). NEVER use '{{variable_name}}' or '${variable_name}'. Expected type: string. Example: 'hello@world.com'"
- Added
inspector_highlight - Added
task_delete - Added
task_update
10 tool updates
v1.0.0- First observed
create_task - First observed
execution_list - First observed
schedule_delete - First observed
schedule_describe - First observed
schedule_get_all_status - First observed
schedule_get_status - First observed
schedule_list - First observed
schedule_set - First observed
task_execute - First observed
task_list
TDQS
Scored across 16 tools
The tools are grouped by domain (tasks, schedules, executions, cabinets, browser) and each has a distinct role. However, schedule_list and schedule_get_all_status both surface schedule information and could be confused; otherwise the boundaries are clear.
Naming mixes conventions: some tools use verb_noun (create_task, list_cabinets) while most use noun_verb (task_update, schedule_get_status, browser_open). The verbs are specific and readable, but the inconsistent ordering prevents a fully predictable pattern.
16 tools is well-scoped for a browser-automation server that covers task CRUD, execution, scheduling, cabinets, and browser inspection. Each tool has a clear purpose and none feel redundant.
Core workflows are covered: task lifecycle, execution, schedules, and cabinets. Minor gaps exist—there is no single-task detail getter, no execution detail view, and no browser close tool—but agents can work around these via task_list and execution_list.
Maintenance
Related MCP Connectors
Build, validate, deploy — HTTP APIs, cron jobs, webhooks and MCP tools — from your AI client.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Discover, preview, estimate, run, and retrieve reusable AI workflows.
Turn any task into the right API calls: discover, evaluate, and integrate public APIs.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server implementation for Axiom that enables AI agents to query your data using Axiom Processing Language (APL).60MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with Automatisch workflow automation platform, allowing them to create, manage, and monitor workflows, connections, and executions through natural language commands.104 npm7MIT
- AlicenseNot gradedqualityAmaintenanceSkyvern MCP server lets AI agents control a real browser to navigate websites, fill forms, authenticate, and extract structured data. Supports multi-step automation workflows via natural language.23,043AGPL 3.0

browserless-mcpofficial
AlicenseAqualityAmaintenanceMCP server for Browserless.io: scrape and automate any site, bypass captchas and enable stealth mode142,267 npm7Server Side Public , v 1