Skip to main content
Glama

WebRun Browser Automation

Create workflow

create_workflow

Create a new saved workflow. READINESS BAR: if you could not execute the prompt yourself as a human in a browser — which site, which records, which fields, delivered where, matched to each recipient how — it is not ready; first collect the missing business facts from the user (see the TASK INTERVIEW in the server instructions), then create. Requires title and promptTemplate — write the prompt as a browsing runbook following the Goal / Ground rules / Stages / Output contract in the promptTemplate field description. For tasks that must handle each new item exactly once (new messages, forward once, skip seen), memoryContract is REQUIRED — three plain-English fields addressed to the agent: groundRules, memoryInstruction and itemIdentity (see the field descriptions); the platform wires the tracking itself — never write memory or tracking steps into the prompt. Created in the connection's environment automatically — omit environmentId and never ask the user to choose one. Write the user's concrete values (names, URLs, numbers) directly into the prompt; use {{variables}} ONLY when the user explicitly wants a reusable template with per-run inputs. Everything else is optional and defaults sensibly — do not quiz the user about settings. A supplied schedule is stored as a setting only — the workflow does not run on a timer until deployed via create_agent. To run or TEST the workflow, use trigger_workflow ONLY — never browser_task or create_session.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
flowNoDashboard flow diagram: { trigger: {kind, phrase}, steps: [{ primary: {label, domain}, verb }] }.
modelNoModel profile key. Omit for the account default.
proxyNoProxy for runs. {source:"WebRun", country?} or {source:"custom", type:"http"|"socks", host, port, username?, password?}. Custom passwords are encrypted at rest and never returned. Social/messaging workflows (WhatsApp, Telegram, Instagram, Facebook, X, LinkedIn, TikTok): set country to the country the user is in right now — recommend it and confirm the country with them first; a mismatch is the usual cause of refused logins and sessions that log out repeatedly, and a scheduled workflow re-hits it every run, so keep the country stable once set.
titleYesWorkflow title (shown on the dashboard).
memoryNoThe agent's private notebook: shown to it at the start of every run, updated automatically after each run. Seed it ONLY with durable facts the next run must already know — the exact description of a target item (e.g. the specific picture to match), user preferences, known starting state — one short line per fact. Do NOT put task steps here (promptTemplate) or tracking rules here (memoryContract). Most workflows need no seed at all: the agent builds its own notebook as it runs.
skillsNoWorkflow-scoped skill entries (dashboard shape).
triggerNoHow the workflow is meant to be invoked (informational — see notes). Defaults to {type:'manual', source:'manual'}.
listTypeNoAdvanced — defaults automatically ('monitor' when memoryContract is supplied); leave unset.
scheduleNoSaved schedule setting. NOTE: record-only — the workflow does NOT run on a timer until deployed as a scheduled agent (dashboard or Telegram bot).
timezoneNoIANA timezone for runs of this workflow (e.g. "America/New_York").
departmentNoFree-text department label (e.g. "inventory").
outputTypeNoOutput contract: 'text' (default), 'structured' (JSON matching outputSchema), 'structured_csv' (rows for the outputSchema column names).
destinationNoResult destination chip: { type, sub, description }. Types seen: 'custom-api', 'slack', 'sheets', 'email', 'messaging', 'telegram', 'crm'.
startingUrlNoPage Chrome opens at the start of each run. Omit to let the prompt decide.
useCaseTagsNoCategorisation tags.
fileDeferredNoDashboard flag: file selection deferred to run time.
outputSchemaNoJSON Schema object (outputType "structured") or array of column-name strings (outputType "structured_csv").
reachOutModeNoProactive-chat policy for runs: 'off', 'guardrail_only', or 'full'. Omit (or pass null) to inherit the account default (MCP-initiated runs treat inherit as 'off').
wizardPresetNoDashboard wizard preset: { technology, useCases[], destination, destinationSub }.
environmentIdNoRarely needed — OMIT it: the connection's bound environment (or your only environment) is applied automatically. Pass only when the user explicitly names a different environment. Never ask the user to choose.
memoryEnabledNoPersist per-workflow agent memory across runs (default true).
publicDraftIdNoDashboard public-draft correlation id.
requiredFilesNoPer-run file attachments. Each row may name its own environmentId; ownership is enforced per-file at dispatch.
roiHourlyRateNoHourly rate for the ROI card.
triggerPhraseNoNatural-language phrase that invokes this workflow in chat.
memoryContractNoHow this workflow should behave and what it must remember between runs. REQUIRED whenever the task handles each thing once — new messages, forward once, skip anything already done. Write all three fields in plain English, addressed to the agent; the platform wires the tracking itself. Never write any of this into the prompt: the prompt says what to do, this says how to do it consistently. To explicitly disable tracking for a task that looks like it needs it, pass {mode:'none'}.
policyOptedOutNoOpt this workflow out of the environment's default policy.
promptTemplateYesThe task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as "not stated", never estimate; keep a running tally and restate it every turn ("captured C items · written R rows"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). When a stage delivers per-recipient (message/email each customer), state the MATCHING RULE in that stage — the identifier shared by the source record and the destination recipient (e.g. the customer name exactly as written in the source, matched against the contact name) — and the no-match branch: skip it and report it, never deliver to a similarly-named near-match. Write the user's CONCRETE values (group names, URLs, numbers) directly into the text; use {{variables}} ONLY when the user explicitly wants a reusable template whose inputs change per run. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never write memory bookkeeping into the prompt (no "check memory", "record in memory", "store in memory" steps): tracking is authored in memoryContract and WebRun applies it to every run automatically.
refineMessagesNoDashboard builder refinement thread rows: [{ role, content }].
variableValuesNoONLY for explicitly dynamic workflows: default values for {{variables}}, keyed by variable name. NOTE: applied only when triggering via MCP trigger_workflow (merged under caller-supplied variables); REST /trigger and bot triggers ignore this field.
compatibleToolsNoSites/tools the workflow uses: [{ name, loginUrl, domain, role }].
conciergeNotifyNoWhere the concierge announces results (e.g. 'Telegram', 'Slack', 'WhatsApp', 'Microsoft Teams', 'concierge').
workListEnabledNoAdvanced — set automatically when memoryContract is supplied; leave unset.
deployedPolicyIdNoPolicy id to run under (must be owned by you).
orchestrateFirstNoDiscovery mode: one run gathers the WHOLE work list up front, later runs claim one item each.
shortDescriptionNoOne-line summary shown in workflow lists.
roiMinutesPerTaskNoMinutes saved per run (dashboard ROI card).
templateVariablesNoONLY for explicitly dynamic workflows (the user asked for a reusable template): metadata for the {{variables}} used in promptTemplate (drives the dashboard fill-in UI). Omit entirely when the prompt carries concrete values.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYes
notesNoCaveats the caller should relay (e.g. the schedule is record-only)
titleYes
successYes
nextStepNoHow to run or test this workflow (always trigger_workflow)
workflowIdYes
environmentNo
memoryContractNoEcho of the stored tracking contract (the three authored fields) — absent when the workflow has none

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changed
    • changedInput schema / properties / proxy / description
      Previous value: -"Proxy for runs. {source:\"WebRun\", country?} or {source:\"custom\", type:\"http\"|\"socks\", host, port, username?, password?}. Custom passwords are encrypted at rest and never returned."New value: +"Proxy for runs. {source:\"WebRun\", country?} or {source:\"custom\", type:\"http\"|\"socks\", host, port, username?, password?}. Custom passwords are encrypted at rest and never returned. Social/messaging workflows (WhatsApp, Telegram, Instagram, Facebook, X, LinkedIn, TikTok): set country to the country the user is in right now — recommend it and confirm the country with them first; a mismatch is the usual cause of refused logins and sessions that log out repeatedly, and a scheduled workflow re-hits it every run, so keep the country stable once set."
  2. Changed7 schema fields changed
    • changedInput schema / properties / listType / description
      Previous value: -"Work-list traversal policy: 'static' (one sweep), 'dynamic' (list refreshes each cycle), 'monitor' (persistent parents + consume-once children)."New value: +"Advanced — defaults automatically ('monitor' when memoryContract is supplied); leave unset."
    • changedInput schema / properties / memoryContract / description
      Previous value: -"Tracking policy — AUTHOR THIS whenever the task must remember what it already handled (forward once, skip seen items, only new messages): { mode: 'dedupe', key: 'what uniquely identifies one handled item (e.g. group + sender + time + first words)', emit: 'the exact ledger line to record per handled item' }. WebRun injects it into the agent's memory on every run (check-before-act + record-after) — so NEVER restate these steps in promptTemplate. For watch-lists, ALSO set workListEnabled + listType 'monitor'. mode 'none' = no tracking."New value: +"How this workflow should behave and what it must remember between runs. REQUIRED whenever the task handles each thing once — new messages, forward once, skip anything already done. Write all three fields in plain English, addressed to the agent; the platform wires the tracking itself. Never write any of this into the prompt: the prompt says what to do, this says how to do it consistently. To explicitly disable tracking for a task that looks like it needs it, pass {mode:'none'}."
    • addedInput schema / properties / memoryContract / properties
      Added value: +{
      +  "groundRules": {
      +    "description": "Standing rules the agent follows on every turn of every run: what it must never do, what counts as proof a step actually succeeded, what to do when something looks ambiguous, and any pacing or volume limits. Short bullets.",
      +    "maxLength": 1500,
      +    "type": "string"
      +  },
      +  "itemIdentity": {
      +    "description": "What tells one item apart from another, and stays the same the next time the agent sees it. Use only details visible on screen — for example where it came from, who it is from, when it appeared, and its opening words — and say how to write it the same way every time.",
      +    "maxLength": 300,
      +    "type": "string"
      +  },
      +  "memoryInstruction": {
      +    "description": "When a single item counts as finished, and what happens to everything else. State plainly what must be true before an item is considered done, what to do when the agent cannot tell whether a past item was done, and what happens to items left over at the end of a run.",
      +    "maxLength": 1500,
      +    "type": "string"
      +  }
      +}
    • changedInput schema / properties / promptTemplate / description
      Previous value: -"The task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as \"not stated\", never estimate; keep a running tally and restate it every turn (\"captured C items · written R rows\"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). When a stage delivers per-recipient (message/email each customer), state the MATCHING RULE in that stage — the identifier shared by the source record and the destination recipient (e.g. the customer name exactly as written in the source, matched against the contact name) — and the no-match branch: skip it and report it, never deliver to a similarly-named near-match. Write the user's CONCRETE values (group names, URLs, numbers) directly into the text; use {{variables}} ONLY when the user explicitly wants a reusable template whose inputs change per run. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never write memory bookkeeping into the prompt (no \"check memory\", \"record in memory\", \"store in memory\" steps): tracking is authored in memoryContract (and the job-list flags) and WebRun injects it into every run automatically."New value: +"The task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as \"not stated\", never estimate; keep a running tally and restate it every turn (\"captured C items · written R rows\"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). When a stage delivers per-recipient (message/email each customer), state the MATCHING RULE in that stage — the identifier shared by the source record and the destination recipient (e.g. the customer name exactly as written in the source, matched against the contact name) — and the no-match branch: skip it and report it, never deliver to a similarly-named near-match. Write the user's CONCRETE values (group names, URLs, numbers) directly into the text; use {{variables}} ONLY when the user explicitly wants a reusable template whose inputs change per run. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never write memory bookkeeping into the prompt (no \"check memory\", \"record in memory\", \"store in memory\" steps): tracking is authored in memoryContract and WebRun applies it to every run automatically."
    • changedInput schema / properties / workListEnabled / description
      Previous value: -"Work-list mode: the agent works a page list one item per run, reporting each back. SET THIS (with listType 'monitor') for watch-and-handle-once tasks — 'forward each new message', 'reply to new comments' — the platform then tracks handled items itself."New value: +"Advanced — set automatically when memoryContract is supplied; leave unset."
    • addedOutput schema / properties / memoryContract
      Added value: +{
      +  "description": "Echo of the stored tracking contract (the three authored fields) — absent when the workflow has none",
      +  "properties": {
      +    "groundRules": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "itemIdentity": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "memoryInstruction": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / nextStep
      Added value: +{
      +  "description": "How to run or test this workflow (always trigger_workflow)",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / promptTemplate / description
      Previous value: -"The task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as \"not stated\", never estimate; keep a running tally and restate it every turn (\"captured C items · written R rows\"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). Write the user's CONCRETE values (group names, URLs, numbers) directly into the text; use {{variables}} ONLY when the user explicitly wants a reusable template whose inputs change per run. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never write memory bookkeeping into the prompt (no \"check memory\", \"record in memory\", \"store in memory\" steps): tracking is authored in memoryContract (and the job-list flags) and WebRun injects it into every run automatically."New value: +"The task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as \"not stated\", never estimate; keep a running tally and restate it every turn (\"captured C items · written R rows\"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). When a stage delivers per-recipient (message/email each customer), state the MATCHING RULE in that stage — the identifier shared by the source record and the destination recipient (e.g. the customer name exactly as written in the source, matched against the contact name) — and the no-match branch: skip it and report it, never deliver to a similarly-named near-match. Write the user's CONCRETE values (group names, URLs, numbers) directly into the text; use {{variables}} ONLY when the user explicitly wants a reusable template whose inputs change per run. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never write memory bookkeeping into the prompt (no \"check memory\", \"record in memory\", \"store in memory\" steps): tracking is authored in memoryContract (and the job-list flags) and WebRun injects it into every run automatically."
  4. Changed7 schema fields changed
    • changedInput schema / properties / environmentId / description
      Previous value: -"Environment to deploy the workflow into. Omit to use the connection's bound environment (or your only environment)."New value: +"Rarely needed — OMIT it: the connection's bound environment (or your only environment) is applied automatically. Pass only when the user explicitly names a different environment. Never ask the user to choose."
    • changedInput schema / properties / memory / description
      Previous value: -"Seed content for the workflow's long-term memory."New value: +"The agent's private notebook: shown to it at the start of every run, updated automatically after each run. Seed it ONLY with durable facts the next run must already know — the exact description of a target item (e.g. the specific picture to match), user preferences, known starting state — one short line per fact. Do NOT put task steps here (promptTemplate) or tracking rules here (memoryContract). Most workflows need no seed at all: the agent builds its own notebook as it runs."
    • changedInput schema / properties / memoryContract / description
      Previous value: -"Memory policy channel (NEVER folded into promptTemplate): { mode: 'none'|'dedupe', key, emit, listEngine{…} }."New value: +"Tracking policy — AUTHOR THIS whenever the task must remember what it already handled (forward once, skip seen items, only new messages): { mode: 'dedupe', key: 'what uniquely identifies one handled item (e.g. group + sender + time + first words)', emit: 'the exact ledger line to record per handled item' }. WebRun injects it into the agent's memory on every run (check-before-act + record-after) — so NEVER restate these steps in promptTemplate. For watch-lists, ALSO set workListEnabled + listType 'monitor'. mode 'none' = no tracking."
    • changedInput schema / properties / promptTemplate / description
      Previous value: -"The task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as \"not stated\", never estimate; keep a running tally and restate it every turn (\"captured C items · written R rows\"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). Use {{variables}} for per-run values. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never put memory/dedup instructions here; those belong in memoryContract (the policy channel)."New value: +"The task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as \"not stated\", never estimate; keep a running tally and restate it every turn (\"captured C items · written R rows\"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). Write the user's CONCRETE values (group names, URLs, numbers) directly into the text; use {{variables}} ONLY when the user explicitly wants a reusable template whose inputs change per run. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never write memory bookkeeping into the prompt (no \"check memory\", \"record in memory\", \"store in memory\" steps): tracking is authored in memoryContract (and the job-list flags) and WebRun injects it into every run automatically."
    • changedInput schema / properties / templateVariables / description
      Previous value: -"Metadata for the {{variables}} used in promptTemplate (drives the dashboard fill-in UI)."New value: +"ONLY for explicitly dynamic workflows (the user asked for a reusable template): metadata for the {{variables}} used in promptTemplate (drives the dashboard fill-in UI). Omit entirely when the prompt carries concrete values."
    • changedInput schema / properties / variableValues / description
      Previous value: -"Default values for {{variables}}, keyed by variable name. NOTE: applied only when triggering via MCP trigger_workflow (merged under caller-supplied variables); REST /trigger and bot triggers ignore this field."New value: +"ONLY for explicitly dynamic workflows: default values for {{variables}}, keyed by variable name. NOTE: applied only when triggering via MCP trigger_workflow (merged under caller-supplied variables); REST /trigger and bot triggers ignore this field."
    • changedInput schema / properties / workListEnabled / description
      Previous value: -"Work-list mode: the agent works a page list one item per run, reporting each back."New value: +"Work-list mode: the agent works a page list one item per run, reporting each back. SET THIS (with listType 'monitor') for watch-and-handle-once tasks — 'forward each new message', 'reply to new comments' — the platform then tracks handled items itself."
  5. Changed1 schema field changed
    • changedInput schema / properties / promptTemplate / description
      Previous value: -"The task the browser agent runs: the goal plus its stages, optionally with {{variable}} placeholders. PURE TASK ONLY — never put memory/dedup instructions here; those belong in memoryContract (the policy channel)."New value: +"The task the browser agent runs, written as a BROWSING RUNBOOK. Structure it as: `Goal:` — one sentence naming the outcome. `Ground rules (every stage, every turn):` — bullet invariants when the task needs them, e.g. work one item at a time — never batch; only record a figure you can read on screen this turn — if it is not shown record it as \"not stated\", never estimate; keep a running tally and restate it every turn (\"captured C items · written R rows\"). Then `Stage N — <Site name> (<https://url>)` — one section per website or phase, listing the concrete steps to take in the browser (open/navigate, click, read, capture, compare, flag) in the order a person would do them, each stage ending with `Done when: <verifiable completion condition>`. Finish with `Output —` stating exactly what to produce or deliver once the final tally is met, including what to say when there is no data (never fabricate a row). Use {{variables}} for per-run values. A short single-site task can be just a Goal plus its steps. PURE TASK ONLY — never put memory/dedup instructions here; those belong in memoryContract (the policy channel)."
  6. Added

TDQS

A4.9/5.0
Behavior5/5

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

Annotations provide minimal behavioral hints (all false), so the description must fully disclose behavior. It explains that environment is auto-applied, schedules are record-only (no timer until deployed), tracking is wired automatically, and variable values are only applied via MCP trigger. It also warns about proxy country concerns for social/messaging workflows. No contradictions exist.

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 each section earns its place given the tool's complexity (38 params). The essential decision point (readiness bar) is front-loaded, and later sections are clearly structured with labels like 'READINESS BAR' and 'To run or TEST.' Slight redundancy (repeating the {{variables}} guidance in promptTemplate and variableValues) but overall efficient for the stakes.

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?

The description covers the full lifecycle: prerequisites (collect facts), required fields, prompt authoring pattern, memory contract necessity, schedule semantics, deployment path (through create_agent), and testing route (trigger_workflow). It also gives guidance on optional parameters like proxy, skills, and variable handling. The output schema is provided separately, so return format is complete. Nothing critical is missing.

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?

Schema has 100% description coverage, but the tool description adds richness beyond them: for promptTemplate it gives the runbook structure (Goal/Ground rules/Stages/Output), for memoryContract it explains when required and how to write the three fields, for proxy it gives WebRun vs custom and country guidance, and for environmentId it instructs to omit. This is decisive, actionable parameter guidance.

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 tool creates a saved workflow, lists required fields, and frames the action with a readiness bar. It distinguishes from sibling tools by naming trigger_workflow (to run/test), create_agent (to deploy), and browser_task/session (to execute) as alternatives. This removes ambiguity about the tool's core function.

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?

Explicitly states 'To run or TEST the workflow, use trigger_workflow ONLY — never browser_task or create_session.' It also specifies when memoryContract is required ('for tasks that must handle each new item exactly once') and when to omit IDs (environmentId, schedule). The description consistently provides concrete conditions for choosing this tool over others.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: ad-hoc tasks (browser_task), persistent sessions (create_session/send_task), workflows (create/get/update/trigger), agents (create/list/pause/resume), and session control (pause/resume/stop/terminate). The descriptions explicitly disambiguate overlapping-looking tools like browser_task vs trigger_workflow, making accidental misselection unlikely.

Naming Consistency4/5

The vast majority follow a clear verb_noun pattern (create_workflow, list_agents, pause_session_task, trigger_workflow, etc.). Minor deviations exist: browser_task and guardrail_response are noun_noun, and screenshot is a single word, but these are understandable and do not disrupt the overall pattern.

Tool Count3/5

With 21 tools the set is on the heavy side, fitting the 16-25 borderline range. Each tool has a distinct purpose, but the count feels slightly inflated due to granular session/task control (pause, resume, stop, terminate) and separate workflow/agent management that could potentially be consolidated.

Completeness3/5

Workflows have create/read/update/list/trigger coverage, and sessions/tasks have robust lifecycle control, but there are notable gaps: no delete_workflow or delete_agent, and agents lack update functionality. While core automation flows are supported, lifecycle management is incomplete without deletion or editing of scheduled agents.

Resources