Skip to main content
Glama
figranium

Figranium MCP Server

Official

Use Figranium with MCP

Figranium turns website workflows into reusable Tasks that AI agents can discover, create, and run through MCP. This server is the local STDIO client for connecting an MCP-compatible app to your Figranium instance.

Looking for the hosted OAuth MCP instead? Connect compatible remote MCP clients to https://mcp.figranium.dev/mcp.

Related MCP server: Automatisch MCP Server

Quick start

You need a running Figranium instance and an API key from Figranium settings.

Run the MCP server directly from npm:

FIGRANIUM_API_KEY=YOUR_API_KEY npx -y figranium-mcp

By default, it connects to Figranium at http://localhost:11345. To use another instance:

FIGRANIUM_BASE_URL=https://your-figranium-instance.example.com \
FIGRANIUM_API_KEY=YOUR_API_KEY \
npx -y figranium-mcp

MCP client configuration

Most local MCP clients accept a configuration shaped like this:

{
  "mcpServers": {
    "figranium": {
      "command": "npx",
      "args": ["-y", "figranium-mcp"],
      "env": {
        "FIGRANIUM_BASE_URL": "http://localhost:11345",
        "FIGRANIUM_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

Use that server entry in clients such as Codex, Claude Code, Cursor, GitHub Copilot, Claude Desktop, Cline, and other STDIO MCP clients.

If the MCP server itself runs inside Docker while Figranium runs on the host, use http://host.docker.internal:11345 instead of http://localhost:11345.

What agents can do

Once connected, an agent can work with Figranium without manually calling its API. The MCP server exposes tools for the core Task lifecycle:

Tool

Purpose

task_list

Discover existing Tasks

create_task

Create a new Task

task_execute

Execute a Task with optional variable overrides

execution_list

Inspect previous executions

schedule_list

Find scheduled Tasks

schedule_get_all_status

Inspect scheduler state

schedule_get_status

Inspect one Task's schedule

schedule_set

Create or update a schedule

schedule_delete

Remove a schedule

schedule_describe

Validate and preview a schedule

The server also exposes figranium://schemas/task-v1.json, allowing clients to inspect the Figranium Task schema directly.

Figranium's MCP instructions teach agents how to construct Tasks, choose selectors, use variables, and follow Task sequencing rules. Invalid Task payloads return structured validation diagnostics so an agent can correct its own request.

Local vs hosted MCP

The npm package contains the local STDIO MCP server. It does not ship the Figranium MCP landing page or hosted OAuth UI.

For clients that support remote OAuth MCP, use:

https://mcp.figranium.dev/mcp

The hosted MCP handles OAuth and connects the client to a publicly reachable Figranium instance. For local clients, npx -y figranium-mcp is usually the simpler path and can connect directly to localhost.

Environment variables

Variable

Required

Default

Description

FIGRANIUM_API_KEY

Yes

—

API key generated by your Figranium instance

FIGRANIUM_BASE_URL

No

http://localhost:11345

Base URL of the Figranium instance

The server exits with a setup message if FIGRANIUM_API_KEY is missing.

Build from source

Requires Node.js 18+ and npm 9+.

git clone https://github.com/figranium/figranium-mcp.git
cd figranium-mcp
npm install
npm run build

Run the compiled server:

FIGRANIUM_API_KEY=YOUR_API_KEY npm start

For active development:

npm run watch

Run the test suite:

npm test

MCP Inspector

You can inspect the published server with the official MCP Inspector:

FIGRANIUM_API_KEY=YOUR_API_KEY npx @modelcontextprotocol/inspector npx -y figranium-mcp

Available Tools

16 tools
create_cabinetA

Create a new Cabinet (durable download queue) on the Figranium server.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDescriptive name for the new Cabinet. Expected type: string. Example: 'Invoices'

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 !!!

  1. 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.

  2. 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.

  3. MODE SELECTION: Use agent mode by default, including for scraping tasks. scrape mode does not support action blocks and should be used only when extremely fast, action-free scraping is required. Use headful for visible interactive debugging.

  4. WORKFLOW BOUNDARIES: Timed Wait and Navigate To cannot be the first action. A fixed initial delay belongs in task-level wait, and the initial destination belongs in task-level url. Get Content cannot be the final action because its value needs a consuming action; use extractionScript for final structured output.

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:

  1. Unique IDs (e.g., '#submit-button')

  2. ARIA roles and labels (e.g., '[aria-label="Search"]')

  3. Reliable CSS classes or data attributes (e.g., '.btn-primary', '[data-testid="login"]')

  4. 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"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesInitial URL to navigate to when the task starts. Expected type: string. Example: 'https://news.ycombinator.com'
modeYesExecution 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'
nameYesDescriptive name of the automation task. Expected type: string. Example: 'HackerNews Scraper'
waitNoStandard delay in seconds to wait after navigation and page loads to let dynamic scripts complete. Expected type: number. Example: 5
actionsNoSequential list of browser actions/control flow steps to execute. Timed Wait and Navigate To cannot be the first action because task-level wait and url define the starting state; Get Content cannot be the final action because its result must feed a later action or extractionScript. Action blocks require 'agent' or 'headful' mode and are not supported in 'scrape' mode. Note: Variable references MUST use '{$variable_name}' syntax.
stealthNoConfigures realistic stealth, anti-bot, and human behavior simulation on the browser instance.
scheduleNoTask automatic execution schedule. Expected type: object.
selectorNoDefault CSS selector to wait for on the page load before starting actions. Expected type: string. Example: '.main-content'
variablesNoTask 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.
descriptionNoDetailed description of what the task automates. Expected type: string. Example: 'Logs in and extracts weekly leads'
humanTypingNoVary typing speeds and insert tiny delays to simulate organic human typing. Expected type: boolean. Example: true
includeHtmlNoWhether to include the raw page HTML in the execution response. Expected type: boolean. Example: false
translationNoOptional page translation for Agent and headful runs. It is disabled by default and is not available in Scrape mode.
rotateProxiesNoRotate through configured proxy IPs to prevent IP-based rate limiting. Expected type: boolean. Example: false
rotateViewportNoVary viewport resolutions randomly to simulate multiple desktop and mobile devices. Expected type: boolean. Example: true
disableRecordingNoDisable video/VNC recording of this task to save storage. Expected type: boolean. Example: true
extractionFormatNoTarget export format of any extracted data. Expected type: string enum. Example: 'json'json
extractionScriptNoPost-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)'
includeShadowDomNoWhether to parse and resolve target elements residing in Shadow DOMs. Expected type: boolean. Example: true
rotateUserAgentsNoRotate user agents across requests to avoid pattern blocking and fingerprinting. Expected type: boolean. Example: true
downloadCabinetIdNoCabinet used for intercepted downloads; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'
statelessExecutionNoIf set to true, clear browser cookies and session states between runs. Expected type: boolean. Example: false

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only provide a few boolean hints (readOnlyHint=false, idempotentHint=false), so the description carries the transparency burden and far exceeds it. It discloses that tasks are stored permanently, that new tasks are intended to be validated against a real execution result, that the execution model is a linear sequence requiring closed control-flow blocks, and that Get Content cannot be the final action — all genuinely useful behavioral constraints beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with a front-loaded IMPORTANT GUIDELINES block followed by numbered sections and a full JSON example, so key correctness rules appear first. Some redundancy exists — the {$variable} syntax rule and mode guidance are repeated in both the description and the input-schema descriptions — but most sentences earn their place given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 22-parameter tool with deeply nested objects and no output schema, the description is remarkably complete: it covers purpose, execution model, every step type, selector fallbacks, edge cases/retry logic, and includes a runnable multi-action example. The notable gap is the return value/response format (no output schema exists and the description never states what the tool returns, e.g., task ID), which an agent might need to confirm creation success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds substantial meaning: Section 3 documents what each of the ~36 action types does (the schema only says 'The action type to perform'), and the guidelines prescribe the {$variable} templating syntax, workflow boundaries (no Timed Wait/Navigate first, no Get Content last), and selector strategy hierarchy. This materially improves the agent's ability to construct valid parameter values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states a specific verb and resource — 'Create a complete, fully-configured Figranium automation task' — and enumerates its scope (sequential action steps, state variables, stealth mechanisms, optional scheduling). Section 1 further distinguishes it from siblings by framing it for recurring/complex web workflows and noting tasks are stored permanently and can be executed later, which separates it from task_execute and schedule_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Section 1 gives explicit when-to-use context ('automate any recurring or complex web-based workflows... data extraction, form-filling, dashboard testing, visual monitoring') and the mode-selection guidance inside the IMPORTANT GUIDELINES block tells the agent which mode to choose and when scrape is acceptable. However, it never names alternative sibling tools (e.g., task_update, schedule_set) or states when NOT to use this tool, so exclusions are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execution_listA
Read-onlyIdempotent

List a summary of all past execution records.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

list_cabinetsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_deleteB
DestructiveIdempotent

Disable and remove the schedule configuration from a specific task.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe unique ID of the task whose schedule to delete.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_describeA
Read-onlyIdempotent

Validate and preview/describe a schedule configuration without saving it.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe unique ID of the task.
frequencyNoThe frequency mode. Used if scheduleMode is 'frequency'.
dayOfMonthNoDay of the month (1-31) if frequency is 'monthly'.
daysOfWeekNoArray of days of the week if frequency is 'weekly'.
scheduleHourNoHour of execution (0-23) if frequency is 'daily', 'weekly', or 'monthly'.
scheduleModeYesWhether to define the schedule using 'cron' or structured 'frequency' fields.
cronExpressionNoStandard 5-field cron expression. Used if scheduleMode is 'cron'.
scheduleMinuteNoMinute of execution (0-59) if frequency is 'daily', 'weekly', or 'monthly'.
intervalMinutesNoInterval in minutes if frequency is 'interval'.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_statusA
Read-onlyIdempotent

Get overall scheduler status and metadata for all schedules.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_statusA
Read-onlyIdempotent

Get the detailed schedule status, cron configuration, and next run time for a specific task.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe unique ID of the task to check.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-onlyIdempotent

List all tasks that have schedules configured (enabled or not).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_setB
Idempotent

Create or update a schedule for a specific task.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe unique ID of the task to configure.
enabledYesWhether the schedule is active.
frequencyNoThe frequency mode. Used if scheduleMode is 'frequency'.
dayOfMonthNoDay of the month (1-31) if frequency is 'monthly'.
daysOfWeekNoArray of days of the week if frequency is 'weekly'.
scheduleHourNoHour of execution (0-23) if frequency is 'daily', 'weekly', or 'monthly'.
scheduleModeYesWhether to define the schedule using 'cron' or structured 'frequency' fields.
cronExpressionNoStandard 5-field cron expression. Used if scheduleMode is 'cron'.
scheduleMinuteNoMinute of execution (0-59) if frequency is 'daily', 'weekly', or 'monthly'.
intervalMinutesNoInterval in minutes if frequency is 'interval'.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_deleteA
DestructiveIdempotent

Permanently delete a Figranium task by taskId.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe unique ID of the task to delete.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_executeA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe unique ID of the task to execute.
variablesNoKey-value pairs representing the execution variables (optional).

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-onlyIdempotent

List all task IDs, names, and descriptions from Figranium.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_updateA
Idempotent

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

  • taskId is 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, and schedule—send the complete value you want stored for that field, rather than only a nested fragment.

  • actions are an ordered replacement sequence. Use agent or headful mode for actions; scrape mode does not support them. Close every if, while, repeat, or foreach block with an end action.

  • A replacement sequence cannot start with Timed Wait or Navigate To: use task-level wait or url to establish the starting state. It also cannot end with Get Content: feed that value into a later action, or use extractionScript for final output.

  • 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_execute to validate an updated workflow and task_delete only 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" }.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoInitial URL to navigate to when the task starts. Expected type: string. Example: 'https://news.ycombinator.com'
modeNoExecution 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'
nameNoDescriptive name of the automation task. Expected type: string. Example: 'HackerNews Scraper'
waitNoStandard delay in seconds to wait after navigation and page loads to let dynamic scripts complete. Expected type: number. Example: 5
taskIdYesID of the existing task to modify. Get it from task_list. Required; must be a non-empty string. Example: 'task_101'.
actionsNoSequential list of browser actions/control flow steps to execute. Timed Wait and Navigate To cannot be the first action because task-level wait and url define the starting state; Get Content cannot be the final action because its result must feed a later action or extractionScript. Action blocks require 'agent' or 'headful' mode and are not supported in 'scrape' mode. Note: Variable references MUST use '{$variable_name}' syntax.
stealthNoConfigures realistic stealth, anti-bot, and human behavior simulation on the browser instance.
scheduleNoTask automatic execution schedule. Expected type: object.
selectorNoDefault CSS selector to wait for on the page load before starting actions. Expected type: string. Example: '.main-content'
variablesNoTask 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.
descriptionNoDetailed description of what the task automates. Expected type: string. Example: 'Logs in and extracts weekly leads'
humanTypingNoVary typing speeds and insert tiny delays to simulate organic human typing. Expected type: boolean. Example: true
includeHtmlNoWhether to include the raw page HTML in the execution response. Expected type: boolean. Example: false
translationNoOptional page translation for Agent and headful runs. It is disabled by default and is not available in Scrape mode.
rotateProxiesNoRotate through configured proxy IPs to prevent IP-based rate limiting. Expected type: boolean. Example: false
rotateViewportNoVary viewport resolutions randomly to simulate multiple desktop and mobile devices. Expected type: boolean. Example: true
disableRecordingNoDisable video/VNC recording of this task to save storage. Expected type: boolean. Example: true
extractionFormatNoTarget export format of any extracted data. Expected type: string enum. Example: 'json'json
extractionScriptNoPost-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)'
includeShadowDomNoWhether to parse and resolve target elements residing in Shadow DOMs. Expected type: boolean. Example: true
rotateUserAgentsNoRotate user agents across requests to avoid pattern blocking and fingerprinting. Expected type: boolean. Example: true
downloadCabinetIdNoCabinet used for intercepted downloads; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'
statelessExecutionNoIf set to true, clear browser cookies and session states between runs. Expected type: boolean. Example: false

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, which already declare idempotentHint=true and destructiveHint=false, the description adds substantial operational context: omitted fields are left unchanged, compound fields must be sent in full, action sequences have ordering restrictions, variable references must use `{$variable_name}` syntax, and the operation does not execute or delete. None of this contradicts 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-organized with clear headings—When to use, Required request shape, Important update behavior, and Examples. Each section carries distinct value, and the most important scoping information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 23 parameters and complex nested behaviors, the description is complete: it states the required shape, the optional-field semantics, the compound-field behavior, action ordering rules, variable syntax, idempotence, and routing to sibling tools. Combined with the exhaustive schema, an agent has what it needs to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter thoroughly; the baseline is 3. The description adds meaning beyond the schema by explaining the overall partial-update semantics, the compound-field replacement rule, the action-sequence constraints, and the variable templating requirement, which are not obvious from the individual property descriptions alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Update one or more fields on an existing, saved Figranium browser-automation task.' It clearly differentiates this tool from siblings by stating what it does not do—it does not run or delete a task—and by naming create_task, task_execute, and task_delete as related but distinct operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this after `task_list` identifies the task to modify, which is strong ordering guidance. It also gives clear exclusions: use `task_execute` to validate a workflow and `task_delete` only for permanent removal, and notes that an ID-only request is rejected because it would make no change.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

template_get
Read-onlyIdempotent

Retrieve the full template workflow and README by UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.5.2
    • Removedbrowser_open
    • Removedinspector_highlight
    • Addedtemplate_get
    • Addedtemplate_search
  2. 2 tool updatesv1.3.3
    • Changedcreate_task1 field changed
      • changedInput schema / properties / actions / description
        Previous 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."New value: +"Sequential list of browser actions/control flow steps to execute. Timed Wait and Navigate To cannot be the first action because task-level wait and url define the starting state; Get Content cannot be the final action because its result must feed a later action or extractionScript. Action blocks require 'agent' or 'headful' mode and are not supported in 'scrape' mode. Note: Variable references MUST use '{$variable_name}' syntax."
    • Changedtask_update1 field changed
      • changedInput schema / properties / actions / description
        Previous 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."New value: +"Sequential list of browser actions/control flow steps to execute. Timed Wait and Navigate To cannot be the first action because task-level wait and url define the starting state; Get Content cannot be the final action because its result must feed a later action or extractionScript. Action blocks require 'agent' or 'headful' mode and are not supported in 'scrape' mode. Note: Variable references MUST use '{$variable_name}' syntax."
  3. 1 tool updatev1.3.1
    • Changedtask_update5 fields changed
      • addedInput schema / anyOf
        Added 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"
        +    ]
        +  }
        +]
      • changedInput schema / description
        Previous 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."
      • addedInput schema / examples
        Added 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"
        +  }
        +]
      • changedInput schema / properties / taskId / description
        Previous 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'."
      • addedInput schema / properties / taskId / minLength
        Added value: +1
  4. 2 tool updatesv1.3.0
    • Changedcreate_task6 fields changed
      • addedInput schema / properties / actions / items / properties / clickType
        Added 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"
        +}
      • addedInput schema / properties / actions / items / properties / targetSelector
        Added value: +{
        +  "description": "Destination selector for 'drag_and_drop'. Required with a source 'selector'. Expected type: string. Example: '.done-column'",
        +  "type": "string"
        +}
      • changedInput schema / properties / actions / items / properties / type / enum
        Previous 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"
        +]
      • removedInput schema / properties / cabinetId
        Removed 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"
        -}
      • addedInput schema / properties / downloadCabinetId
        Added value: +{
        +  "description": "Cabinet used for intercepted downloads; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'",
        +  "type": "string"
        +}
      • addedInput schema / properties / translation
        Added 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"
        +}
    • Changedtask_update6 fields changed
      • addedInput schema / properties / actions / items / properties / clickType
        Added 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"
        +}
      • addedInput schema / properties / actions / items / properties / targetSelector
        Added value: +{
        +  "description": "Destination selector for 'drag_and_drop'. Required with a source 'selector'. Expected type: string. Example: '.done-column'",
        +  "type": "string"
        +}
      • changedInput schema / properties / actions / items / properties / type / enum
        Previous 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"
        +]
      • removedInput schema / properties / cabinetId
        Removed 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"
        -}
      • addedInput schema / properties / downloadCabinetId
        Added value: +{
        +  "description": "Cabinet used for intercepted downloads; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'",
        +  "type": "string"
        +}
      • addedInput schema / properties / translation
        Added 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"
        +}
  5. 2 tool updatesv1.2.3
    • Changedcreate_task4 fields changed
      • changedInput schema / properties / actions / items / properties / varName / description
        Previous 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."
      • changedInput schema / properties / extractionScript / description
        Previous 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)'"
      • changedInput schema / properties / variables / additionalProperties / description
        Previous 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."
      • changedInput schema / properties / variables / description
        Previous 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."
    • Changedtask_update4 fields changed
      • changedInput schema / properties / actions / items / properties / varName / description
        Previous 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."
      • changedInput schema / properties / extractionScript / description
        Previous 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)'"
      • changedInput schema / properties / variables / additionalProperties / description
        Previous 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."
      • changedInput schema / properties / variables / description
        Previous 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."
  6. 4 tool updatesv1.2.1
    • Addedcreate_cabinet
    • Changedcreate_task8 fields changed
      • changedInput schema / properties / actions / description
        Previous 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."
      • addedInput schema / properties / actions / items / properties / cabinetId
        Added value: +{
        +  "description": "Source Cabinet ID for an 'upload' action; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'",
        +  "type": "string"
        +}
      • addedInput schema / properties / actions / items / properties / captchaType
        Added 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"
        +}
      • addedInput schema / properties / actions / items / properties / markAsUploaded
        Added 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"
        +}
      • addedInput schema / properties / actions / items / properties / timeout
        Added 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"
        +}
      • changedInput schema / properties / actions / items / properties / type / enum
        Previous 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"
        +]
      • addedInput schema / properties / cabinetId
        Added 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"
        +}
      • changedInput schema / properties / mode / description
        Previous 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'"
    • Addedlist_cabinets
    • Changedtask_update8 fields changed
      • changedInput schema / properties / actions / description
        Previous 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."
      • addedInput schema / properties / actions / items / properties / cabinetId
        Added value: +{
        +  "description": "Source Cabinet ID for an 'upload' action; omitted uses the default Cabinet. Expected type: string. Example: 'cab_basic'",
        +  "type": "string"
        +}
      • addedInput schema / properties / actions / items / properties / captchaType
        Added 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"
        +}
      • addedInput schema / properties / actions / items / properties / markAsUploaded
        Added 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"
        +}
      • addedInput schema / properties / actions / items / properties / timeout
        Added 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"
        +}
      • changedInput schema / properties / actions / items / properties / type / enum
        Previous 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"
        +]
      • addedInput schema / properties / cabinetId
        Added 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"
        +}
      • changedInput schema / properties / mode / description
        Previous 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'"
  7. 5 tool updatesv1.1.1
    • Addedbrowser_open
    • Changedcreate_task5 fields changed
      • changedInput schema / properties / actions / description
        Previous 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."
      • changedInput schema / properties / actions / items / description
        Previous 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."
      • changedInput schema / properties / actions / items / properties / body / description
        Previous 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}\"}'"
      • changedInput schema / properties / actions / items / properties / headers / description
        Previous 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}\"}'"
      • changedInput schema / properties / actions / items / properties / value / description
        Previous 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'"
    • Addedinspector_highlight
    • Addedtask_delete
    • Addedtask_update
  8. 10 tool updatesv1.0.0
    • First observedcreate_task
    • First observedexecution_list
    • First observedschedule_delete
    • First observedschedule_describe
    • First observedschedule_get_all_status
    • First observedschedule_get_status
    • First observedschedule_list
    • First observedschedule_set
    • First observedtask_execute
    • First observedtask_list

TDQS

A3.7/5.0

Scored across 16 tools

Disambiguation4/5

Most tools target a distinct resource and action: task CRUD/execution, schedule management, cabinet listing/creation, and browser session control are clearly separated. The main ambiguity is between schedule_list and schedule_get_all_status, which both surface schedule-related information across all tasks and could be confused by an agent.

Naming Consistency3/5

Most tools follow a noun_verb pattern (task_update, schedule_delete, browser_open), but several break it with verb_noun names (create_task, create_cabinet, list_cabinets). The mixed conventions are still readable and predictable within each resource group, but the set is not uniformly patterned.

Tool Count4/5

At 16 tools, the count is slightly above the ideal range but justified by the server's broad scope spanning tasks, schedules, cabinets, browser sessions, and executions. A few schedule status tools could potentially be consolidated, but the overall footprint is reasonable.

Completeness4/5

The task lifecycle is well covered with create, update, delete, list, and execute, and schedule management covers set, delete, describe, list, and status. Minor gaps exist—no individual task detail retrieval, no execution detail endpoint, and no cabinet delete or browser close—but agents can work around these without major failures.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers