formbase (formbase.so)
Server Details
formbase.so collects and verifies information from customers for workflows and AI agents
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- formbaseso/formbase-mcp
- GitHub Stars
- 0
- Server Listing
- formbase MCP server
TDQS
Scored across 76 tools
Most tools have clearly distinct purposes, with detailed descriptions that distinguish similar inserts (e.g., rating vs. linear scale, table vs. matrix). However, the sheer number of editor_insert* variants and form_update/formSettings_update/formTheme_set boundaries create some selection risk for an agent, so not perfect.
Tools largely follow a consistent module_action pattern (form_create, form_get, editor_insertX, request_create). Minor deviations appear in compound module names that mix camelCase with snake_case (formSettings_get, formShareLink_create, translationDraft_get), but overall still predictable and readable.
76 tools is far beyond the manageable range; even with catalogs and skills for organization, the surface is extreme for an agent and risks context bloat and tool-selection burden. The count alone suggests a mismatch between surface size and practical usability.
The surface covers the domain very thoroughly: full form lifecycle, all major editor operations and question types, request management, translations, share links, themes, settings, analytics, documents, and workspace folders. No obvious critical gaps or dead ends are apparent.
Available Tools
76 toolsdocument_createCreate documentAInspect
Reserve an upload for one document a request hands to its recipient through the form's Documents block. Returns { id, uploadUrl, expiresAt, name, contentType, size }. Bytes never pass through this tool: PUT the raw file to uploadUrl (one hour) with the declared Content-Type, then pass { "documentId": id } in request_create's documents, which verifies it. One upload serves any number of requests. See load_skill("requests").
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name the recipient sees. | |
| size | Yes | Exact byte length. Max 26214400. | |
| formId | Yes | Form whose Documents block will show it; scopes the upload to that workspace. | |
| sha256 | No | Hex digest, verified against the upload when given. | |
| contentType | Yes | MIME type of the bytes you will upload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (write, non-destructive, closed-world). The description goes well beyond them: it discloses the return shape, states bytes never pass through the tool, documents the one-hour uploadUrl expiry, and describes downstream verification via request_create.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single tight paragraph, front-loaded with the purpose, then the return contract, then the required follow-up steps. No sentence is filler; even the load_skill pointer adds routing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description inlines the returned fields ({ id, uploadUrl, expiresAt, name, contentType, size }) and the complete two-step upload handoff, so an agent has everything needed to invoke and chain the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-field descriptions and constraints (max size, enum content types, sha256 pattern), so the schema already carries the parameter meaning. The description reinforces the workflow linkage (declared Content-Type, id reused as documentId) but adds no unique per-parameter detail, matching the baseline-3 rule.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource ('Reserve an upload for one document... through the form's Documents block'), clearly identifying the object and the mechanism (upload reservation, not the file transfer itself). It distinguishes itself from the request-side siblings by naming the follow-on tool request_create and the Documents block context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit end-to-end workflow: call this to reserve, PUT bytes to uploadUrl within one hour, then pass { documentId: id } into request_create's documents. It also notes 'one upload serves any number of requests' and points to load_skill("requests"), so the agent knows the surrounding process as well as the trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_deleteElementDelete elementADestructiveInspect
Delete an element from the form. Copy nodeId from a current editor_getDocument response — never guess. Cannot delete the last user-facing element; the submit button is auto-managed and not counted.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | Form ID | |
| nodeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered; the description adds genuinely new behavioral context — the last user-facing element cannot be deleted and the auto-managed submit button is excluded from the count. It omits error behavior for invalid nodeIds and whether deletion is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loading the action first and the sourcing constraint and deletion limit second. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with no output schema, the description covers the key agent decision points: where to get nodeId and the one deletion guardrail. It could say more about failure modes or response, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (formId has a description, nodeId has none), so the description must compensate — and it does, telling the agent exactly where nodeId comes from and warning against fabricating it. formId itself gets no additional detail, but that is a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete an element from the form') and clearly separates itself from the surrounding insert/update siblings by describing removal of an existing node. An agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition and workflow: obtain nodeId from a fresh editor_getDocument response rather than guessing. It does not explicitly name editor_updateElement as the alternative for modifying rather than removing, so the when-not side is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_formatTextFormat textAInspect
Apply or remove text formatting. Formats: bold, italic, underline, strikeThrough, code, highlight (colored background), link (hyperlink — wraps the matched substring). Use color param for highlight/underline color (yellow, blue, green, red).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Required when format="link". | |
| text | Yes | Exact text to find and format. | |
| color | No | Default: yellow. For highlight or underline. | |
| action | No | apply | |
| formId | Yes | Form ID | |
| format | Yes | ||
| nodeId | Yes | ||
| occurrence | No | 1-based, when text appears multiple times. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds useful scope (link wraps matched substring; color applies to highlight/underline) but does not explain auth needs, match-failure behavior, or what removal changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the operation, then compactly lists formats and color constraints. Every clause earns its place; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description covers formats and some parameter meaning. It remains incomplete on node targeting, occurrence semantics, and link URL requirements, though annotations cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 63%, and the description clarifies the action apply/remove and color scope beyond the enum. However, it omits nodeId, occurrence behavior, and the link URL requirement, with some of those details already present only in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (apply/remove) and resource (text formatting), then enumerates the exact supported formats. This lets an agent distinguish it from editor_insert* and editor_updateElement siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through 'apply or remove' and the format list, but gives no explicit when-to-use, prerequisites, or alternative-tool routing. An agent can infer the context, but guidance is not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_getDocumentGet documentARead-onlyInspect
Read the form document as a TOON-serialized tree. Returns content + an idRoles map labelling every node id with its logic role (condition source, show/hide target, option, etc.) — consult before authoring logic. Use before any editor_insert*/update/replace/delete to discover nodeIds. Read-only. See load_skill("toon-format") for the schema.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | ||
| version | No | draft |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so 'Read-only' adds little, but the description goes beyond them by describing the return structure (content plus an idRoles map with role labels) and pointing to load_skill("toon-format") for the payload schema, which is valuable since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences that front-load the core purpose and then layer usage and payload guidance. Only the redundant 'Read-only' clause fails to earn its place against the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema read tool this covers purpose, ordering constraints, and the shape of the result with a pointer to skill documentation. It falls short only on parameter semantics, which both schema and description leave bare.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions either parameter: no explanation of what formId identifies, nor that version selects draft vs published (an enum with a default). The heavy lifting the schema cannot do is left undone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the form document as a TOON-serialized tree') and describes the returned payload (content + an idRoles map labelling node ids by logic role). This clearly distinguishes it from siblings like form_get or the many editor_insert* authoring tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit timing and ordering: 'consult before authoring logic' and 'Use before any editor_insert*/update/replace/delete to discover nodeIds.' The agent knows both why and when to call this ahead of the mutation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertCalculatedFieldInsert calculated fieldAInspect
Insert a calculated field for scoring, counters, and computed runtime values. Hidden from respondents. Use with calculateValue action in logic rules to accumulate or compute values. Example: Create a "Total Score" field and add points via logic rules. For URL-seeded metadata, use editor_insertHiddenField instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the calculated field (e.g., "Total Score", "cart_total") | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| formId | Yes | Form ID to insert into | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| fieldType | No | Type of the calculated value | number |
| initialValue | No | Initial value (default based on fieldType) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, non-destructive, closed-world mutation, so the bar is lowered. The description adds genuinely new behavioral context: the field is hidden from respondents and is designed to be driven by calculateValue logic rules, which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tightly packed sentences: purpose first, then visibility, then the driving action, then an example, then the sibling alternative. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter mutation tool with no output schema, the description covers purpose, intended workflow, and the key sibling boundary. It omits what the call returns (e.g. the created node/field ID), which an agent inserting-then-chaining would benefit from, but otherwise nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters thoroughly (including chaining via $prev and position/after incompatibility). The description adds a naming example and the fieldType-in-practice hint, but does not meaningfully extend parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Insert a calculated field') plus the concrete use cases (scoring, counters, computed runtime values) make the tool's role unmistakable. It explicitly distinguishes itself from the sibling editor_insertHiddenField, so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use it (with the calculateValue action in logic rules), gives a worked example ('Total Score' field accumulating points), and names the alternative for URL-seeded metadata. This is explicit when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertCheckboxQuestionInsert checkbox questionAInspect
Insert a checkbox question for multi-choice selection. Requires 1+ options. Use when user can pick multiple.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| options | Yes | Checkbox options (minimum 1, non-empty, unique) | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds no behavioral context beyond the schema — 'Requires 1+ options' merely restates the existing minItems:1 constraint, and nothing is said about insertion ordering, mutation side effects, or interaction with 'after'/'position'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the core purpose front-loaded followed immediately by the key gating rule. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter insertion tool with positional complexity (after vs position, parentId, default required=true), the description is thin, but the fully-covered schema carries that burden and there is no output schema to explain. It is adequate but leaves the ordering/mutation semantics entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 8 parameters are already documented in the schema (including the tricky after-vs-position distinction and $prev chaining). The description only echoes the options requirement, adding no meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (insert a checkbox question) and its selection semantics (multi-choice, user can pick multiple). This implicitly distinguishes it from the many sibling question-insertion tools (radio, select, picture-choice), though it never names the closest alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when user can pick multiple' gives a clear selection criterion that routes the agent away from single-select siblings. It stops short of an explicit exclusion (e.g. 'use insertRadioQuestion when only one answer is allowed'), so it's clear context rather than a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertContactQuestionInsert contact questionCInspect
Insert a contact question for email, phone, or URL. Choose contactType based on what information you need.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. | |
| contactType | Yes | Type of contact field | |
| placeholder | No | Placeholder text | |
| defaultValue | No | Literal default seeded on open; respondent can edit or clear it. Not with defaultValueFieldRef. | |
| defaultValueFieldRef | No | Pre-fill the input with a hidden or calculated field value at fill time. The respondent can still edit it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it as a non-destructive, non-read-only, closed-world mutation, so safety is covered. The description adds no behavioral context beyond that — nothing about insertion side effects, required permissions, idempotency, or what happens when placement params conflict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The second sentence is thin but still orients the agent toward the required contactType decision, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with nested objects and no output schema, the description is minimal but the schema compensates fully with rich per-parameter docs. Nothing critical is missing, but the description does not enrich the picture beyond purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema itself already documents all 11 parameters, including the nuanced after/position/parentId placement rules and defaultValue vs defaultValueFieldRef exclusion. The description adds only the contactType choice hint, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (insert) and resource (contact question) plus its scope (email, phone, or URL), which separates it from the many other editor_insert*Question siblings. It is clear what the tool creates, though it does not explicitly name which sibling to use instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is 'Choose contactType based on what information you need,' which is really a parameter hint rather than a when-to-use statement. Nothing tells the agent when to pick this over editor_insertTextQuestion or other question-type tools, and no prerequisites or ordering constraints are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertDateQuestionInsert date questionCInspect
Insert a date picker question for date selection.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the mutation/safety profile is covered. The description adds nothing beyond that: no note on whether the insert is reversible, what happens to ordering, or that required defaults to true — all of which live only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is appropriately sized, though it is arguably too terse given the crowded insert-tool family it belongs to.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so return values need not be explained, and the schema covers all parameters. What is missing is context about how this question type differs from the many other question-insertion siblings, which is the key disambiguation an agent needs in this toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all 7 parameters (including the subtle after/position/parentId placement semantics) are documented in the schema itself. The description contributes no additional parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb+resource ('Insert a date picker question'), so an agent can identify the operation. However, it offers no differentiation against close siblings like editor_insertTimeQuestion or editor_insertScheduleAppointmentQuestion, leaving the boundary between date/time/schedule ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites (e.g. needing an existing formId), and no routing to alternative insert tools. The usage context is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertDecisionQuestionInsert decision questionAInspect
Insert the decision question (approve / decline / request changes) that sets a request's outcome. A plain radio never sets an outcome.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | No | Default: "Do you approve?" | |
| formId | Yes | Form ID to insert into | |
| labels | No | Option labels in the form language | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered structurally. The description adds a genuinely non-obvious behavioral fact beyond the annotations: this element is what actually drives a request's outcome, unlike a plain radio. It does not mention anything about placement conflicts or side effects on existing nodes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose front-loaded and the sibling disambiguation as the second beat. Nothing could be removed without losing signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter insertion tool with nested object params, no output schema, and rich schema-level documentation, the description covers the essential conceptual gap (why this question type exists vs. a radio) while the schema carries parameter detail. It is nearly complete; only explicit placement/prerequisite guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 8 parameters (including after, position, parentId, labels) are already documented in the schema, including the useful '$prev' chaining note and the 'usually wrong' append warning. The description adds no parameter-level meaning of its own, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Insert') and a precise resource ('the decision question') and immediately defines the resource's semantics (approve / decline / request changes) and its effect ('sets a request's outcome'). It also explicitly distinguishes itself from the nearest sibling (a plain radio) which is exactly the ambiguity an agent would face in this large insert_* family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'A plain radio never sets an outcome' functions as an implicit when-to-use rule, steering the agent away from editor_insertRadioQuestion when an outcome-setting control is needed. It is clear context but stops short of an explicit 'use this instead of X when Y' statement or any prerequisite about form state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertDocumentsBlockInsert documents blockAInspect
Insert a Documents block: a download list of files (PDF, images) the owner hands to the respondent. Collects no answer; files are added in the editor, not here.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Block title above the list | |
| formId | Yes | Form ID to insert into | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description need not restate them. It adds genuinely useful behavior beyond the annotations: the block 'collects no answer' and files are added elsewhere, preventing a misinterpretation of the write operation. It stops short of covering insert semantics like chaining/ordering, hence 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and resource, with zero filler. The 'not here' caveat earns its place by preventing a wrong assumption about file loading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, annotations carrying the safety profile, and a fully documented parameter schema, the description covers the non-obvious essentials: what the block is and what it does not do. A brief note on insertion ordering would round it out, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the tricky interactions (after vs. position, $prev chaining, parentId scoping). The description adds no parameter-level detail and none is needed. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb+resource ('Insert a Documents block') and immediately defines the resource: 'a download list of files (PDF, images) the owner hands to the respondent.' The clause 'Collects no answer' distinguishes it from sibling tools like editor_insertFileQuestion, so an agent can tell them apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear scope boundary — 'files are added in the editor, not here' — telling the agent that this tool only places the block and does not populate it. It also conveys the use-case (a non-answering download list) versus answering question blocks. However, it does not explicitly name the alternative tool or state exclusion conditions, so a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertEmbeddedInsert embeddedAInspect
Insert embedded content such as a YouTube video, Google Maps location, or iframe embed. Use a real source URL the user provided — never invent or guess one; if you do not have it, ask the user for the link instead of inserting.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| formId | Yes | Form ID to insert into | |
| source | Yes | YouTube URL/video ID, Google Maps location query, or a single iframe embed snippet. | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| provider | Yes | Embedded provider. Use youtube for videos, google-maps for maps, or iframe for third-party embeds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds a meaningful non-schema behavioral constraint (never guess a source; ask the user), which prevents a whole class of bad calls, though it says nothing about ordering conflicts or error behavior on a bad URL.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding: purpose first, then the critical constraint. Nothing repeats the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no output schema, the description covers purpose and the key input-integrity rule, and the schema carries full parameter detail. It stops short of noting anything about the result of insertion or failure handling, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the after/parentId/position interplay and provider semantics, so the baseline is 3. The description's provider examples ('youtube for videos, google-maps for maps, iframe for third-party embeds') largely restate the enum descriptions already in the schema, adding little beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Insert') plus resource ('embedded content') and enumerated subtypes (YouTube video, Google Maps location, iframe embed). An agent can distinguish this from sibling inserters like editor_insertImage or editor_insertDocumentsBlock without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a strong operative rule — use a real user-provided source URL and ask the user rather than fabricating one. That is clear when-to-use guidance for the main failure mode, though it names no alternative sibling tools (e.g. editor_insertImage) for adjacent cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertFileQuestionInsert file questionCInspect
Insert a file upload question. Configure accepted file types and size limits.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| accept | No | Accepted file types, comma-separated. Extensions ".pdf,.jpg" or MIME types "image/*". | |
| formId | Yes | Form ID to insert into | |
| maxSize | No | Maximum file size in bytes (must be > 0) | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| maxFiles | No | Maximum number of files | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations disclose the write-but-non-destructive, non-open-world profile, so safety is partly covered. The description adds nothing beyond restating the purpose and naming configurable options that the schema already documents; it says nothing about insertion ordering effects, required defaults, or what happens on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The second sentence is largely redundant with schema properties, which is the only minor waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no output schema and rich sibling competition, the description covers the 'what' but not the 'how/when' — insertion ordering, chaining rules, and required-field defaults all live only in the schema. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 10 parameters including the non-obvious 'after'/$prev chaining and 'position' semantics. The description's mention of accepted file types and size limits merely echoes schema fields, adding no extra meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Insert a file upload question') that is immediately distinguishable from other insert tools by name. However, it offers no differentiation from the many sibling question-insertion tools (insertCheckboxQuestion, insertTextQuestion, etc.) beyond the resource noun itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus other question types, no prerequisites (e.g., needing a formId), and no mention of the positioning/chaining behavior implied by the 'after' and 'position' params. The agent must infer everything from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertHeaderInsert headerAInspect
Insert a heading element. Use level 1-4 for different sizes (1 = largest). The header level is fixed at insert time — editor_updateElement cannot change it later (supported props: isHidden, required, titleIsHidden).
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| level | No | Header level (1-4) | |
| formId | Yes | Form ID to insert into | |
| content | Yes | Header text (plain text — pass raw characters like "&" and "<", not HTML entities like "&") | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, non-destructive, closed-world write. The description adds genuinely new behavioral context beyond that: the header level is immutable after insert and editor_updateElement can only change isHidden, required, and titleIsHidden. That immutability constraint is exactly the kind of trait annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler. Purpose comes first, then the level scale, then the immutability caveat — a well front-loaded ordering that an agent can act on immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter write tool with no output schema, the description covers the purpose, the level semantics, and the key post-insert constraint. It says nothing about what is returned (e.g., the new node ID) which matters for chaining with $prev/after, but the schema's 'Use $prev to chain' note largely compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by clarifying that level 1 = largest and that 1-4 map to sizes. It also contextualizes which props updateElement supports later, tying back to isHidden/required/titleIsHidden semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Insert a heading element'), which cleanly separates it from siblings like editor_insertParagraph or editor_insertList. It is clear about what is produced, though it never explicitly contrasts itself with the closest sibling (paragraph/rich-text insertion), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: a reader infers this is for headings of level 1-4 versus body text elsewhere. There is no explicit when-to-use/when-not guidance or named alternative for the 'insert text block' decision, but it does give useful context on the level scale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertHiddenFieldInsert hidden fieldBInspect
Insert a hidden metadata field that can be seeded from URL params and submitted with the form. Use for recipient IDs, campaign tags, attribution data, or personalized text values that should be referenceable in content, input defaults (defaultValueFieldRef), logic conditions, and calculateValue field refs.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| formId | Yes | Form ID to insert into | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| fieldType | No | Type of metadata value stored in the hidden field | text |
| paramName | Yes | URL query parameter name to read from. Must be a valid query key (alphanumeric + underscore, starting with a letter or underscore). Example: "campaign", "utm_source". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, confirming a non-destructive write confined to the form. The description adds useful behavioral context — the field is seeded from URL params and submitted with the form, and is referenceable in defaultValueFieldRef, logic conditions, and calculateValue refs. It doesn't cover ordering side effects (after vs position), idempotency, or what happens to existing fields. With annotations present the bar is lower, so a 3 is fair.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and then the intended use cases. It is appropriately sized for the tool and has no filler. The second sentence is dense but each element (URL params, defaultValueFieldRef, logic conditions, calculateValue) is meaningful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema, the description covers purpose and the referenceable-value behavior, but omits the insertion-position nuance (after vs position cannot be combined) which is critical to correct invocation. The sibling differentiation is also absent, leaving an agent to choose between editor_insertVariable, editor_insertCalculatedField, and this tool without explicit guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters already carry descriptions, including the positional 'after'/'position' semantics and the paramName pattern. The description adds no additional parameter detail beyond this. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('insert') and resource ('hidden metadata field'), and goes beyond by naming use cases (URL param seeding, form submission). It doesn't explicitly differentiate from siblings like editor_insertVariable or editor_insertCalculatedField, which have overlapping roles for referenceable values, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a purpose and example use cases ('recipient IDs, campaign tags, attribution data') but does not state when to prefer this over editor_insertVariable or editor_insertCalculatedField, which are the closest functional siblings. An agent still has to infer the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertImageInsert imageAInspect
Insert an image element. Use an image the user uploaded or a URL the user explicitly provided — never invent or guess one (no stock, placeholder, or Unsplash links). If you have no real image, ask the user to upload one or paste a URL instead of inserting.
| Name | Required | Description | Default |
|---|---|---|---|
| alt | No | Alt text for accessibility | |
| src | Yes | Image URL (http(s) or data:image) | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| align | No | Image alignment | |
| width | No | Image width in pixels | |
| formId | Yes | Form ID to insert into | |
| caption | No | Image caption | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| storageId | No | Storage ID for uploaded images |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive, non-open-world write, so safety is partly covered. The description adds a substantive rule beyond the annotations — never fabricate stock/placeholder/Unsplash URLs and instead prompt the user — which genuinely shapes agent behavior. It does not mention permissions or insertion side effects, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action followed by the sourcing constraint. The second and third sentences overlap somewhat (avoid inventing URLs / ask the user for a real image), so it is slightly more verbose than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter insert tool with no output schema, the description covers purpose and the critical behavioral guard, while the schema covers all parameters. Nothing essential is missing, though positioning/return expectations are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 11 parameters, and the schema itself carries strong semantics (e.g., 'after' noting that omission is 'usually wrong', 'position' enum semantics). The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Insert an image element'), so an agent immediately knows the operation. It does not explicitly contrast itself with nearby siblings like editor_insertPictureChoiceQuestion or editor_insertEmbedded, but the resource is distinct enough that confusion is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear preconditions for use ('a user uploaded' image or 'a URL the user explicitly provided') and an explicit negative case (no real image → ask the user to upload or paste a URL). It stops short of naming alternative tools, but the when-to-use guidance is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertLinearScaleQuestionInsert linear scale questionBInspect
Insert a linear scale question (1-5, 1-10, etc.). Use for sentiment, agreement scales.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Maximum scale value (default 5) | |
| min | No | Minimum scale value (default 1) | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| maxLabel | No | Label for maximum value | |
| minLabel | No | Label for minimum value | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive, non-open-world write, so the safety profile is covered. The description adds nothing behavioral beyond that — no note about insertion ordering, required placement, or what happens on insert — so it contributes almost no context the annotations don't supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the core purpose is front-loaded before the use-case hint. Nothing wastes the agent's context budget.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter insertion tool with no output schema, the annotations and rich schema cover the mechanics, and the description is technically sufficient to call it. It is nevertheless thin on the one thing that matters here: disambiguating this tool from the many other insert*Question siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all 11 parameters (min, max, after, position, parentId, isHidden, labels) are documented inline in the schema itself. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Insert a linear scale question') and gives concrete range examples (1-5, 1-10), which is more than a restatement of the title. However, it never distinguishes itself from the very similar sibling editor_insertRatingQuestion or editor_insertNumberQuestion, so an agent must guess between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for sentiment, agreement scales' implies a context but gives no when-not and no comparison to the near-identical rating/number question tools in the sibling list. The guidance is only implicitly useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertListInsert listAInspect
Insert a list element. Use variant "ordered" for numbered lists, "unordered" for bullet lists. items is a native string array. Example: {variant:"unordered", items:["First point","Second point"]}.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| items | Yes | List items | |
| formId | Yes | Form ID to insert into | |
| variant | Yes | List type | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, covering the safety profile. The description adds no behavioral context beyond that (no mention of mutation effects, placement side effects, or auth needs), so it does not exceed the annotated baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then variant guidance and a compact example. Little waste; the "native string array" note is slightly redundant with the schema type declaration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema description coverage and no output schema, the description covers what the schema does not (variant meaning, example). Placement semantics (`after`/`position`/`parentId`) live in the schema and are not echoed, which is acceptable given full coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description meaningfully expands the terse schema enum for `variant` ("ordered" = numbered, "unordered" = bullets) and clarifies `items` is a native string array with a concrete example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Insert a list element") and clarifies the two variants. It does not explicitly distinguish itself from the many sibling insert tools (insertParagraph, insertRadioQuestion, etc.), so an agent must infer the list-vs-other-element choice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to drive the `variant` enum but gives no explicit when-to-use guidance, prerequisites, or alternatives among the large family of editor_insert* tools. Usage is only implied by the word "list".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertLogicInsert logicAInspect
Insert one logic element containing exactly one conditional rule. Insert separate logic elements for additional rules. When a rule shows a question (show action), also set isHidden:true on that question so it is hidden by default — otherwise it stays visible in the editor baseline. See load_skill("logic-rules").
| Name | Required | Description | Default |
|---|---|---|---|
| rule | Yes | Single conditional rule. Insert another logic block for each additional rule. | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| formId | Yes | Form ID to insert into |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the write/readOnly/destructive profile; the description adds non-obvious behavior — that a 'show' action leaves the target visible in the editor baseline unless isHidden:true is also set, and that chaining/multiple rules require separate inserts. That is meaningful operational context beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then constraint, then the side-effect gotcha, then a pointer. Every sentence carries an instruction or warning; the wording is dense but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deeply nested, high-complexity insert tool with no output schema, the description covers the critical gotchas (one rule per element, isHidden side-effect) and defers detail to load_skill. It omits any mention of the placement/`after` chaining behavior, which the agent must get from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents parameters in depth; baseline would be 3. The description goes beyond it by tying the 'show' action semantics to a required isHidden mutation on the target, which the schema alone does not connect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Insert one logic element containing exactly one conditional rule'), and the 'exactly one rule' scope is a real distinguishing constraint. It stops short of naming or contrasting the adjacent siblings editor_setLogic / editor_testLogic, so an agent still infers which of the logic tools to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage rules: one rule per element, insert separate elements for additional rules, and the show-action pairing with isHidden. It also routes to load_skill("logic-rules") for depth. No explicit when-not or direct contrast with setLogic, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertMatrixQuestionInsert matrix questionAInspect
Insert a matrix/grid question. Use when rating multiple items on the same scale. Requires rows and columns as native string arrays (never a JSON string). Example: {title:"Rate our service", rows:["Speed","Quality"], columns:["Poor","OK","Great"]}.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | Row labels | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| columns | Yes | Column labels | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnly=false, destructive=false, openWorld=false), so the agent knows this is a non-destructive create. The description adds a real behavioral gotcha beyond annotations: rows/columns must be native string arrays and never a JSON string. It does not mention permissions or insertion side effects, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose, then usage, then the param constraint and a compact example. Every sentence earns its place and the example is illustrative rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-param creation tool with no output schema and safety covered by annotations, the description gives purpose, usage, and a concrete example. It omits the ordering/chaining semantics (after, position, parentId), but those are documented in the schema, so it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description exceeds it by illustrating the shape of the key params (title/rows/columns) and flagging the native-array-vs-JSON-string pitfall. It leaves the ordering params (after, position, parentId) to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Insert a matrix/grid question') and clarifies the matrix/grid concept that distinguishes it from the ~25 sibling editor_insertXQuestion tools. An agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context ('Use when rating multiple items on the same scale'), which separates it from a plain rating question. However, it names no explicit alternative or exclusion (e.g., vs editor_insertRatingQuestion or editor_insertLinearScaleQuestion) for the borderline grid-vs-scale case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertNumberQuestionInsert number questionCInspect
Insert a number question for numeric input. Supports min/max bounds and step increments.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Maximum value | |
| min | No | Minimum value | |
| step | No | Step increment (must be > 0) | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. | |
| placeholder | No | Placeholder text | |
| defaultValue | No | Literal default seeded on open; respondent can edit or clear it. Not with defaultValueFieldRef. | |
| defaultValueFieldRef | No | Pre-fill the input with a hidden or calculated field value at fill time. The respondent can still edit it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds no behavioral context beyond the annotations – nothing about insertion ordering (after/position), the default required=true, or what happens to existing nodes. It essentially repeats feature names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action. No wasted text, though it is thin enough that it doesn't earn a 5 for information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with nested objects and no output schema, the description is minimal. Because schema coverage is 100%, the parameters themselves are well documented, so the definition is adequate but does not cover the behavioral complexity of insertion ordering and defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 13 parameters, including the tricky insertion-ordering semantics of 'after' and 'position'. The description's mention of min/max/step is redundant with the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Insert a number question') and clarifies the input domain ('for numeric input'), which distinguishes it from the many sibling insert*Question tools. It's clear but doesn't explicitly contrast against alternatives like text or rating questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not guidance is given. With dozens of sibling question-insertion tools, the agent gets no help deciding between this and insertTextQuestion, insertRatingQuestion, etc. 'Supports min/max bounds and step increments' describes features, not selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertPageDividerInsert page dividerAInspect
Insert a page divider to split the form into multiple pages. For a post-submit thank-you page, ALWAYS pass isThankYouPage: true; otherwise it is a normal pre-submit page. A page divider is a flat break marker, NOT a container: it holds only its name label. The new page's content is the sibling nodes that FOLLOW the divider at the document root — add each header/paragraph/question with a separate insert using after (chain via $prev), never by passing parentId = the divider. A submit-button is automatically prepended to mark the end of the previous page; the form retains its trailing submit-button for the final page, so multi-page forms have one submit-button per page (this is expected, not duplication). Pass after = id of the last content node of the page being closed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Page name/label | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| formId | Yes | Form ID to insert into | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| isThankYouPage | No | Set true for a thank-you page that is shown only after a successful submission. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations covering the safety profile (readOnlyHint=false, destructiveHint=false), the description adds substantial non-obvious behavior: a submit-button is automatically prepended, the form retains its trailing submit-button, and multi-page forms having one submit-button per page is expected rather than duplication. It also clarifies the divider is not a container and only holds a name label.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by critical usage constraints and behavioral gotchas in a logical sequence. Despite being longer than a one-liner, every sentence conveys a distinct instruction or warning relevant to correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the 100% schema coverage, and the absence of an output schema, the description is complete enough. It covers the key structural and sequencing gotchas an agent needs without needing to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description still adds meaningful semantic constraints beyond the schema: isThankYouPage must be true for thank-you pages, parentId must not be set to the divider, and after should reference the last content node of the page being closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Insert a page divider'), explains the resulting structure ('split the form into multiple pages'), and distinguishes the divider from content-insertion siblings by clarifying it is a flat break marker, not a container. An agent can identify the tool's role without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance ('For a post-submit thank-you page, ALWAYS pass isThankYouPage: true'), explains how to add page content (separate inserts using after, chaining via $prev), and names the wrong approach to avoid ('never by passing parentId = the divider'). It also specifies after = id of the last content node.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertParagraphInsert paragraphCInspect
Insert a paragraph element for descriptive text.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| formId | Yes | Form ID to insert into | |
| content | Yes | Paragraph text (plain text — pass raw characters like "&" and "<", not HTML entities like "&") | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the mutation/safety profile is covered. The description adds nothing beyond the safety hints — no mention of required formId scope, ordering effects, or interaction with logic rules (e.g. isHidden being a show-rule target).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is front-loaded and wastes no words. But it is under-specified rather than genuinely concise — there is almost no information to compress, so brevity here is thinness, not efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with six parameters and rich insertion-position semantics (after vs position vs parentId), the description is too thin. No output schema exists, and the description does not compensate by explaining placement behavior, chaining, or what a paragraph element represents in the form.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (after, formId, content, isHidden, parentId, position) are already documented with useful detail, including the $prev chaining and HTML-entity warning. The description adds no parameter meaning, which is the expected baseline when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource ('Insert a paragraph element') and adds a hint of purpose ('for descriptive text'). However, among ~35 insert_* siblings it makes no attempt to distinguish itself from near-neighbors like editor_insertHeader or editor_insertList beyond the generic 'descriptive text' phrase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the many other insert tools, nor when not to. The schema notes that omitting `after` 'appends to end (usually wrong)', but that caveat lives in the schema, not the description, and no alternative routing is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertPaymentQuestionInsert payment questionAInspect
Insert a payment question. Use when the form must collect a payment at submit time (tickets, fees, orders). Charging requires a Stripe connection on the workspace — the element inserts without one but cannot process payments until connected. amount is a number, e.g. {amount:25, currency:"usd"}.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| amount | No | Payment amount in the major unit (e.g. 19.99 USD) | |
| formId | Yes | Form ID to insert into | |
| currency | No | Currency code, 3-letter ISO-4217 (e.g. USD, EUR, JPY). Lowercase accepted; stored uppercase. | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, destructive=false), and the description adds genuinely useful behavioral context: the element can be inserted without a Stripe connection but will not process payments until connected. It does not describe the return value or insertion failure modes, but with annotations present this is solid added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose, then usage, then the key constraint and example. No filler and nothing misplaced.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter insert tool with full schema coverage and no output schema, the description covers purpose, trigger, the critical Stripe dependency, and a syntax example. Only a note on what the tool returns or on sibling routing would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all nine parameters, including amount units and currency format. The description's example ({amount:25, currency:"usd"}) is a helpful convenience but largely restates what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Insert a payment question') and immediately scopes it with the scenario ('collect a payment at submit time'). It is clearly distinguishable from the many sibling editor_insert*Question tools by naming the exact element type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Use when the form must collect a payment at submit time') and concrete examples (tickets, fees, orders), plus the Stripe prerequisite. It stops short of stating when NOT to use it or naming a specific alternative tool, so it falls just below the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertPictureChoiceQuestionInsert picture choice questionAInspect
Insert a picture choice question. Use when choices are inherently visual (products, designs, photos). Example: {title:"Pick a style", images:[{label:"Modern", src:"https://…"}]}. Use images the user uploaded or URLs they provided — never invent or guess image URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| images | Yes | Picture choices with images | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| multiple | No | Allow multiple selections | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, destructive=false, openWorld=false), so the bar is lower. The description still adds real behavioral value beyond them: a hard anti-hallucination rule about image URLs and a structural example showing the expected payload shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences: purpose, selection criterion, then a compact example plus the critical sourcing caveat. Every sentence earns its place and the selection condition is front-loaded before the example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter insertion tool with full schema coverage and no output schema, the description supplies what the structured fields don't: when to pick this question type, the payload example, and the image-sourcing rule. It is adequate, though it could note the after/position chaining intent that the schema only hints at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters (including after/position chaining rules and storageId) are already documented; the baseline of 3 applies. The inline example adds marginal shape clarity for the images array but no syntax detail the schema does not already carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Insert a picture choice question') and immediately scopes it against the large family of sibling question-insertion tools by declaring the condition that selects this one: 'when choices are inherently visual (products, designs, photos).' An agent can distinguish it from editor_insertRadioQuestion or editor_insertImage without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear positive selection criteria (visual choices) and an explicit sourcing constraint ('use images the user uploaded or URLs they provided — never invent or guess image URLs'). It does not name alternative siblings or state when *not* to use it, so it falls short of the 5-level explicit routing seen in the calibration example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertRadioQuestionInsert radio questionAInspect
Insert a radio button question for single-choice selection. Requires 2+ options. Use when user must pick exactly one.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| options | Yes | Radio options (minimum 2, non-empty, unique) | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnly false, destructive false, closed-world), so the bar is lower. The description restates the 2+ option constraint, which the schema already enforces via minItems, and says nothing about placement behavior, error handling, or what happens to existing elements. It neither contradicts nor enriches the annotations meaningfully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three brief sentences, front-loaded with the action and followed by the constraint and selection condition. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter insert tool with no output schema, the description is adequate on what it inserts but silent on the placement story (after vs. position vs. parentId) that dominates the schema and is easy to misuse. The schema covers it, but the prose does not help the agent navigate the tool's main complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all eight parameters including the subtle after/position/parentId placement semantics are already documented in the schema. The description adds no parameter detail beyond duplicating the options minimum, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Insert) plus resource (radio button question) and adds the differentiating semantic: single-choice selection. This cleanly separates it from siblings like editor_insertCheckboxQuestion and editor_insertSelectQuestion without requiring the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when user must pick exactly one' gives a clear selection condition and implicitly rules out multi-select siblings. It stops short of naming an explicit alternative to route to, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertRankingQuestionInsert ranking questionAInspect
Insert a ranking question. Use when the respondent must order items by preference (drag to rank). Requires 2+ options as a native string array. Example: {title:"Rank these features", options:["Speed","Price","Design"]}.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| options | Yes | Items to rank (minimum 2, non-empty, unique) | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool is a non-read-only, non-destructive mutation. The description adds the drag-to-rank interaction and the 'requires 2+ options' constraint, but the option constraint is already enforced by the schema, and no additional behavioral traits such as insert side effects, chaining behavior, or placement defaults are disclosed beyond what structured fields provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by usage context and a compact example. Every sentence earns its place and there is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an insert tool with eight parameters, full schema description coverage, and no output schema, the description provides enough context to select the tool and understand its core requirement. It could be slightly more complete by mentioning placement behavior at a high level, but that detail is fully available in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters already have documented meanings. The description includes an example using title and options, which is mildly helpful, but it does not add substantial semantic detail beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Insert a ranking question') and immediately clarifies the distinguishing use case: ordering items by preference via drag-to-rank. This is enough to separate it from sibling question-insertion tools such as rating, radio, or select questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear condition for use: 'Use when the respondent must order items by preference.' However, it does not name alternatives or state when not to use this tool, so it falls short of the full when/when-not/alternatives pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertRatingQuestionInsert rating questionBInspect
Insert a star rating question. Use for satisfaction scores, reviews.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| maxStars | No | Maximum stars (1-10, default 5) | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the mutation/safety profile is covered. The description adds no behavioral context beyond that - nothing about placement behavior, chaining, or what happens to sibling nodes - so it does little to enrich the annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero filler. The core action leads and the usage hint follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters and no output schema, the description is thin relative to the tool's complexity - especially the non-trivial insertion-positioning options the schema documents. The annotations and full schema coverage carry most of the load, but a sentence on placement or required context would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters are already documented (including placement semantics for after/parentId/position and the isHidden/show-rule note). The description adds no parameter detail, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Insert a star rating question'), clearly distinguishing it from sibling question types like insertLinearScaleQuestion or insertNumberQuestion. It does not explicitly name those siblings, but the resource specificity is enough for an agent to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for satisfaction scores, reviews' gives a use-case cue that implies when this question type is appropriate. However, it names no alternatives and gives no when-not guidance, leaving the agent to infer the boundary against rating-style siblings such as linear scale or number.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertRepeatingGroupInsert repeating groupAInspect
Insert a repeating group: a labeled block of member fields the respondent can add multiple instances of (e.g. "Who is coming?" repeated per guest, each with Name + Phone). Provide the group name and 1+ member fields — a group is auto-deleted if it has no fields, so it must be born with at least one. Member types: text, number, date, time, email, phone, url, radio, checkbox, select, switch, rating (choice types need options). Add other/complex member types AFTER creation with the normal editor_insert*Question tools, passing parentId = the group id. Both the whole-group id (renders every instance inline, e.g. "Alice - 111, Bob - 222") and each member field id can be @-mentioned in body text, emails, and PDFs. Returns members — one { nodeId, title, inputId, options } per member field, in order — so logic and updates can target them without editor_getDocument.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Group label shown above the block, e.g. "Guests" or "Who is coming?". | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| fields | Yes | Member fields repeated together per instance. At least one — an empty group is auto-deleted. | |
| formId | Yes | Form ID to insert into | |
| addButtonLabel | No | Label for the "add another" button. Default: "Add". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the write/non-destructive/openWorld profile, so the description carries the rest: the auto-deletion of empty groups, the @-mention behavior for whole-group and member ids, and the exact return payload. This is substantial beyond annotations, though permission/auth context is not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but fully front-loaded: the definition comes first, then the constraint, then member types, then the sibling routing, then the return shape. Every sentence conveys operational information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-trivial creation tool with no output schema, the description supplies the return structure (members with nodeId/title/inputId/options), the deletion edge case, and downstream id usage, so an agent has everything needed to call and chain it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds practical meaning: fields must be ≥1, choice types need options, and the group and member ids are addressable in body/email/PDF. It explains why parameters matter, not just what they are.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (insert a repeating group) and immediately distinguishes it from siblings by defining the concept with a concrete example. It also names the sibling family (editor_insert*Question) that handles the cases this tool does not, so an agent can disambiguate without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use this for member types text/number/date/etc. at creation, and add other/complex member types AFTER creation via editor_insert*Question with parentId = the group id. The 'must be born with at least one field or it is auto-deleted' rule gives a clear precondition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertRowInsert rowAInspect
Insert a row layout element with 1-6 columns for a side-by-side layout. Returns columnIds left to right — pass one as parentId (position: "last") to the insert that fills it.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| formId | Yes | Form ID to insert into | |
| columns | Yes | Number of columns (1-6) | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-destructive, non-open-world write, so safety is covered; the description adds genuinely new behavioral context by disclosing the return shape ('columnIds left to right') and the intended chaining mechanism, which matters because there is no output schema. It stops short of saying what happens to existing siblings or the form layout on insert.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the core purpose front-loaded and the follow-up workflow second. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema, the description covers what is created and what is returned plus how to consume it, which is close to complete. It could add a note on ordering pitfalls or whether the row must be inserted into a specific parent, but the gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes beyond it by tying the returned columnIds to the parentId and position parameters, explaining the relationship between inputs and outputs rather than merely naming fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Insert a row layout element with 1-6 columns') and clarifies the intent ('side-by-side layout'), which cleanly separates it from siblings like editor_insertTable or editor_insertList. An agent knows what this creates without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes the follow-up pattern (use a returned columnId as parentId with position 'last' to fill the row), which implies a workflow, but never states when to use this tool versus alternatives such as editor_insertTable or editor_insertRepeatingGroup, nor any prerequisites. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertScheduleAppointmentQuestionInsert schedule appointment questionAInspect
Insert a Schedule appointment question backed by Cal.com. Use for bookings or appointments; do not substitute separate date and time questions. The creator connects Cal.com and selects an event type afterward.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. | |
| availabilityWindowDays | No | How many future days respondents may book. Default: 30. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a non-read-only, non-destructive, non-open-world write, so the safety profile is already carried. The description adds real workflow context beyond that: the creator must connect Cal.com and select an event type afterward, implying a multi-step dependency. It doesn't address auth, rate limits, or reversibility, but the annotations cover the safety bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and the tool's niche, then a routing caution. No repetition of schema content and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with full schema coverage and a done-through annotations safety profile, the description supplies the missing piece: what this question type is for, its Cal.com dependency, and the alternative to avoid. Return values aren't needed (no output schema). Minor gap: guidance on the after/position insertion parameters is left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters, including the tricky after/position/parentId insertion semantics. The description adds no parameter-level detail, so baseline 3 applies rather than a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Insert) and a specific resource (Schedule appointment question), and names the backing service (Cal.com). It distinguishes the tool from its many insert_* siblings by describing the exact question type and how it differs from date/time questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit when-to-use ('Use for bookings or appointments') and a when-not-to-use with an alternative ('do not substitute separate date and time questions'). It also tells the agent what happens next (creator connects Cal.com). It doesn't cover insertion-positioning tradeoffs (after vs position) that the schema leaves implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertSelectQuestionInsert select questionBInspect
Insert a dropdown select question. Requires 2+ options. Use for single or multi-choice from a list.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| options | Yes | Dropdown options (minimum 2, non-empty, unique) | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| multiple | No | Allow multiple selections | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. | |
| placeholder | No | Placeholder text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, openWorld=false, covering the safety profile. The description adds only the 2+ option constraint, which the schema also enforces, and says nothing about placement behavior (after/position/parentId interactions) or what a failed insert affects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with zero filler; the constraint and usage hint follow immediately after the purpose statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 10 parameters and no output schema, the description is thin: safety is covered by annotations and parameters by the schema, but ordering/parenting semantics and the effect of insertion are left entirely to the schema, which is adequate but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 10 parameters, so the schema already carries the semantics (including the chaining behavior of 'after' and 'position'). The description adds no parameter-level detail, which is the expected 3 baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Insert a dropdown select question') and adds the key constraint (2+ options). It does not explicitly distinguish this from close siblings like editor_insertRadioQuestion or editor_insertCheckboxQuestion, so an agent still has to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for single or multi-choice from a list' gives implied usage context, but there is no when-not guidance (e.g. prefer radio for few visible options, checkbox for multi-select) despite many near-identical insert siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertSignatureQuestionInsert signature questionCInspect
Insert a signature pad question for collecting handwritten signatures.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-readOnly, non-destructive, closed-world insert. The description adds no behavioral context beyond that — no note about default placement, no auth or permission requirements, and no indication of what the mutation returns or how insertion ordering behaves. For a write tool it does not pull its weight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the key noun phrase front-loaded and no filler. It is well-formed, though at one clause it offers no structure for scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters, a mutation-style operation with no output schema, and a dense sibling set, the description is minimal but the rich schema carries most of the load. It is adequate to invoke correctly, but an agent gets no help on selection or on insertion-order semantics that the schema only partially hints at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (including the non-obvious `after`, `position`, and `isHidden`) are documented in the schema itself. The description contributes no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Insert) and a specific resource (signature pad question for handwritten signatures), which clearly distinguishes it from the other ~30 editor_insert*Question siblings. It stops short of explicitly contrasting with alternatives like editor_insertTextQuestion, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus other question types, nor any mention of prerequisites (form must exist, region must be editable) or when-not-to-use. The agent must infer that this is chosen whenever a signature field is wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertSwitchQuestionInsert switch questionBInspect
Insert a toggle switch question for yes/no or on/off responses.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| label | No | Switch label text | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context beyond the question type — it does not mention that insertion mutates the form, how ordering/after-chaining behaves, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description is minimal but the schema fully documents placement semantics, chaining, and required fields. What is missing is usage context — which question type to choose — leaving the definition adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (8 of 8 parameters documented, including the $prev chaining hint and the position/after exclusivity), so the schema already carries parameter meaning. The description adds nothing about any parameter, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('Insert a toggle switch question') and scopes it to yes/no or on/off responses, which distinguishes it from the many other editor_insert*Question siblings. It does not explicitly name a confused alternative (e.g. checkbox or radio), so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given: nothing says when a toggle switch is preferred over editor_insertCheckboxQuestion, editor_insertRadioQuestion, or the other question types. Usage is only implied by the tool name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertTableInsert tableAInspect
Insert a static content table (text cells the form author fills in) — NOT a question; for rating grids respondents answer, use editor_insertMatrixQuestion. rows and cols are numbers, never strings. Example: {rows:3, cols:2, hasHeader:true}.
| Name | Required | Description | Default |
|---|---|---|---|
| cols | Yes | Number of columns (1-10) | |
| rows | Yes | Number of rows (1-20) | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| formId | Yes | Form ID to insert into | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| hasHeader | No | Whether first row is a header |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds substantive content-level context beyond that: this inserts a static display table rather than an interactive question, which changes how downstream authoring treats the node.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the discriminating fact (static table vs question), followed by a type warning and one example. No filler, and the most failure-prone detail (wrong insert type) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param mutation tool with no output schema and full schema coverage, the description covers what an agent most needs: what it inserts, what it is not, and the row/col types. Placement behavior (after/position/parentId) is left entirely to the schema, which is acceptable but leaves a small gap for a tool whose default append is noted as 'usually wrong'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a useful type guardrail ('rows and cols are numbers, never strings') plus a concrete example ({rows:3, cols:2, hasHeader:true}). It says nothing about after/parentId/position semantics, leaving those to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Insert a static content table') and immediately delimits it against the closest sibling by naming editor_insertMatrixQuestion. The parenthetical explaining that cells are author-filled text (not respondent input) makes the distinction unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives a when-not-to-use rule ('NOT a question; for rating grids respondents answer, use editor_insertMatrixQuestion'), which is genuine routing guidance. It stops short of covering placement/prerequisite context (parentId, position, formId), which lives only in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertTextQuestionInsert text questionBInspect
Insert a text question for short or long text responses. Use for names, comments, descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Maximum character length | |
| min | No | Minimum character length | |
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. | |
| multiline | No | Allow multiline input (textarea) | |
| placeholder | No | Placeholder text | |
| defaultValue | No | Literal default seeded on open; respondent can edit or clear it. Not with defaultValueFieldRef. | |
| defaultValueFieldRef | No | Pre-fill the input with a hidden or calculated field value at fill time. The respondent can still edit it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, and the description is consistent with that (insert = creation, not destruction). However, the description adds no behavioral context beyond the annotation profile - nothing about positioning behavior, chaining via after, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the core action front-loaded and zero filler. It is arguably too sparse for a 13-parameter tool, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter creation tool with a nested object and no output schema, the description is minimal, though the fully documented schema carries most of the load. It omits the required formId/title expectation and insertion-positioning context that would help an agent call it correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter is documented in the schema, including the nuanced after/position/defaultValueFieldRef semantics. Baseline 3 applies since the description contributes no additional parameter meaning beyond the vague 'short or long text' hint at min/max.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Insert a text question') and scopes it to 'short or long text responses', which lets an agent distinguish it from the many sibling question-insertion tools. It does not name any sibling explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for names, comments, descriptions' gives implied usage context for choosing a text question over other question types, but there is no when-not guidance and no reference to alternatives like insertNumberQuestion or insertSelectQuestion. Adequate but thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertTimeQuestionInsert time questionCInspect
Insert a time picker question for time selection.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | NodeId to insert after. Use $prev to chain. Omitting appends to end (usually wrong). | |
| title | Yes | Question title | |
| formId | Yes | Form ID to insert into | |
| isHidden | No | Start hidden (the target of a `show` rule). | |
| parentId | No | Parent node ID to insert into (e.g., column1) | |
| position | No | Position among siblings: inside parentId when given, else at the top level ('first' = top of the form, e.g. a title). Not combinable with after. | |
| required | No | Whether question is required. Default: true. Pass false to make the field optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe, non-destructive, closed-world write profile, so the description only needs to add mutation-specific context. It instead says nothing about insertion behavior, the significance of the `after`/`position` interaction, or what the default append does — context the schema hints at but the description never reinforces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste and the core action front-loaded. It is efficient but so terse that it borders on under-specification rather than optimal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter insertion tool sitting among dozens of sibling inserters, the description omits sibling disambiguation, placement behavior, and defaults. It relies entirely on schema text to carry completeness, which leaves the agent without routing cues.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters, including the nuanced after/position/parentId placement semantics, are already documented in the schema. The description adds no parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Insert) and resource (a time picker question), which is clear. However, it does not differentiate from near-identical siblings such as editor_insertDateQuestion or editor_insertScheduleAppointmentQuestion, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose a time question over a date question, schedule appointment question, or number question, nor any mention of prerequisites like an existing formId. The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_insertVariableInsert variableAInspect
Insert a variable reference inline to display a field value in text (answer piping). Works with hidden fields, calculated fields, and question input fields. Use in paragraphs and headers to show dynamic values like recipient names, scores, totals, or piped answers.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | Form ID | |
| nodeId | Yes | ID of the text node to insert the variable reference into (e.g., "p1", "h1") | |
| offset | Yes | Character position to insert at. Use -1 to append at end. Each existing inline element (variable, link) counts as ONE position, not its display label length. Prefer 0 / -1 when the target paragraph already has inlines. | |
| fieldId | Yes | ID of the field to reference — can be a hidden field (e.g., "hf1"), a calculated field (e.g., "cf1"), or a question input field (e.g., "ti1") for answer piping | |
| fieldName | Yes | Display name for the variable reference |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the mutation-but-not-destructive profile is covered. The description adds the field-type compatibility (hidden, calculated, question inputs) but nothing about what insertion changes, offset edge cases, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core action front-loaded and the usage examples last. Every sentence contributes; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-required-param mutation tool with a fully documented schema and no output schema, the description covers purpose, field compatibility, and usage sites well. It is only missing return/error behavior, which is minor given the schema depth.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the tricky offset semantics and examples for nodeId/fieldId, so the schema carries the load. The description repeats the field-type constraint (hidden/calculated/question) but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (insert) and resource (variable reference inline), and clarifies the intent is answer piping. It implicitly separates itself from siblings like editor_insertHiddenField or editor_insertCalculatedField by saying it references existing fields rather than creating them, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use in paragraphs and headers to show dynamic values like recipient names, scores, totals, or piped answers" gives clear contextual guidance for when to reach for this tool. There is no explicit when-not or named alternative, but the use case is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_setLogicSet logicAInspect
Overwrite the single conditional rule on a logic element identified by nodeId. Insert separate logic elements for additional rules; delete the element to remove its rule. Referenced question, page, and field IDs are validated. Read the document first with editor_getDocument to get valid IDs. When a rule shows a question, also set isHidden:true on that question so it is hidden by default. See load_skill("logic-rules").
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | Form ID | |
| nodeId | Yes | nodeId of the logic element whose rule is being overwritten (from editor_getDocument). | |
| logicRule | Yes | Single replacement rule. Insert another logic block for each additional rule. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (not read-only, not destructive, not open-world). Beyond that, the description discloses that the operation is an overwrite (so an existing rule is replaced), that referenced question/page/field IDs are validated, and that a rule targeting a question requires a companion isHidden change. That is meaningful behavioral context the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the mutation and its target, then consequences, prerequisites, and a skill pointer. Every sentence carries distinct information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a very complex nested schema, no output schema, and annotations supplying the safety profile, the description covers overwrite semantics, ID validation, the prerequisite read, and the isHidden companion step. It does not mention error/failure behavior or return value, but with no output schema that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the deeply nested logicRule structure is thoroughly documented in the schema itself (operators, action types, fieldRef vs literal, nesting depth cap). The description adds only that logicRule is a 'single replacement rule' — useful framing but not new parameter syntax. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource+scope: 'Overwrite the single conditional rule on a logic element identified by nodeId.' The word 'single' and the overwrite framing distinguish it cleanly from the sibling editor_insertLogic, which the description names implicitly by telling the agent to insert separate elements for additional rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: insert separate logic elements for extra rules, delete the element to remove a rule, read the document first with editor_getDocument for valid IDs, and set isHidden:true on questions referenced by a rule. It also points to load_skill("logic-rules") for deeper guidance. Nothing about when to use vs. not use is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_testLogicTest logicARead-onlyInspect
Simulate logic rules against sample answers and return visibility/required/calculated results. Read-only. Uses the same engine as the published form runtime.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | ||
| answers | No | Map of fieldId → answer value (any JSON-serializable shape). Keys are question/input/hidden/calculated field IDs from editor_getDocument. Values follow the per-field type — strings for text, numbers for number, booleans for switch, arrays for checkbox/ranking, etc. For a payment input, true simulates a completed payment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the 'Read-only' sentence largely repeats structured data. The one genuinely additive trait is runtime fidelity ('same engine as the published form runtime'), but nothing is said about error behavior or whether anything is persisted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and output, with no filler. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the necessary work of naming the three result categories (visibility/required/calculated), which is enough for an agent to understand the return. It stops short of describing the response shape or error handling, but the core need is met.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: the 'answers' property is richly documented while 'formId' has no description anywhere. The phrase 'against sample answers' loosely maps to the answers parameter but adds no detail beyond the schema, and formId is left entirely undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Simulate) and resource (logic rules), and states exactly what comes back: visibility/required/calculated results. This clearly separates it from siblings like editor_setLogic and editor_insertLogic, which define logic rather than test it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for testing logic rules but never states when to reach for it versus editor_setLogic or editor_insertLogic, or any preconditions (e.g. logic must already exist). 'Uses the same engine as the published form runtime' is fidelity context, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
editor_updateElementUpdate elementAInspect
Edit one element identified by nodeId — replace its text, change its props, and/or reposition it in a single call. Call editor_getDocument first and copy nodeId from it — never guess or reuse an ID from an earlier conversation. content: replace the entire text of a paragraph/header/list-item/table-cell, etc. (whole-element replace, not a substring or document-wide replace; not valid on input/option shells). properties (partial — send only what changes): isHidden, isThankYouPage (page only — marks the post-submit thank-you page), required, titleIsHidden, label (renames an option, question-title, or question), maxStars (rating-input), min/max/minLabel/maxLabel (linear-scale-input), placeholder / defaultValue (text, email, phone, url, number — defaultValue null clears). moveTo: reposition instead of recreating — e.g. moveTo:{parentId:<columnId>,position:"last"} to move it into a column for a side-by-side layout, or moveTo:{after:<nodeId>} to place it right after another element. To set conditional logic rules on a logic element, use editor_setLogic instead.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | Form ID | |
| moveTo | No | Reposition (keeps id/content). | |
| nodeId | Yes | ||
| content | No | Replace the whole text of a paragraph/header/list-item/cell. Not a substring; not for input/option shells (rename a title via properties.label). | |
| properties | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, non-destructive, closed-world, so the safety bar is partly met. The description adds real behavioral context beyond them: whole-element replacement semantics ('not a substring or document-wide replace'), 'not valid on input/option shells', that properties are partial, and that moveTo preserves id/content. It does not address reversibility or permission requirements, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the required-call precondition, then grouped by content/properties/moveTo. The properties enumeration is dense but justified by 60% schema coverage; the block is long but each clause carries a node-type constraint or example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, nested-object mutation tool with no output schema, the description covers purpose, precondition, per-field validity, moveTo usage examples, and the sibling to use for logic. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the description must compensate and it largely does: it documents the two undescribed fields (isHidden, titleIsHidden) and adds cross-type validity (maxStars on rating-input, min/max/minLabel/maxLabel on linear-scale, defaultValue null clears). Much of the rest duplicates schema descriptions, capping it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (edit one element by nodeId) and enumerates the three editable facets (text, props, position). It clearly distinguishes itself from the insert_* siblings and from editor_formatText/editor_setLogic, which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Call editor_getDocument first and copy nodeId... never guess or reuse an ID from an earlier conversation') and routes one case to an alternative ('To set conditional logic rules... use editor_setLogic instead'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fields_listList fieldsARead-onlyInspect
List the field keys a request can address on a published form — the keys, value types, option keys and whether each belongs in prefill (visible questions) or context (hidden fields). Read-only. Call this before request_create instead of guessing keys from question titles. Returns { items, next }; each item carries a usage line and, for option questions, options: [{ key, label }] (prefill takes the key, never the label); a matrix lists rows and columns the same way. Reads the form's current published version, so re-read it after form_publish.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | Published form to read the addressable field keys of. Get it from form_list or form_create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the read-only safety profile, and the description adds real behavioral context beyond them: it reads the currently published version only, must be re-read after publish, returns { items, next }, and each item's key-vs-label rule for prefill is stated explicitly. This goes well past what structured fields convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose first, then the routing instruction, then the return shape. Every clause carries information (usage line, options key-not-label, matrix rows/columns) and none is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by describing the return envelope and item shape, including the edge case of option questions and matrices. An agent has everything needed to call and consume it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter (formId) with 100% schema description coverage that already tells the agent where to get the id. The description's detail about prefill/context and option keys concerns the returned fields rather than the input parameter, so it adds little meaning to the parameter itself; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the field keys a request can address on a published form') plus the distinguishing scope (addressable keys, value types, option keys, prefill vs context). It is clearly separable from siblings like form_get or request_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('Call this before request_create instead of guessing keys from question titles') and a concrete re-use trigger ('re-read it after form_publish'). No alternatives are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formAnalytics_getGet form analyticsARead-onlyInspect
Get form analytics: views, submissions, completion rate, bounce rate, and device / browser / country / traffic-source breakdowns. Read-only. Use form_list to find formId first. Rate metrics (completionRate, engagementRate, bounceRate) return as numbers (0–100); counts are integers. Returns { formId, period, metrics, breakdown, totalEvents }. totalEvents is the raw analytics event row count (before deduplication into unique visitors). When from/to both omitted, response returns period: { from: null, to: null } (all time). Constraint: from <= to when both supplied. Analytics are a Pro feature: if the workspace owner is not on Pro, this returns UPGRADE_REQUIRED rather than data, including for history recorded while they were.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of date range as Unix ms timestamp. Must be >= `from` when both set. | |
| from | No | Start of date range as Unix ms timestamp. Must be <= `to` when both set. | |
| device | No | Filter by device type (default: all) | |
| formId | Yes | Form ID to get analytics for | |
| country | No | Filter by country code (e.g., "US", "DE", "TR") | |
| includeEvents | No | Include sanitized analytics events for custom analysis (no visitor IDs) | |
| trafficSource | No | Filter by traffic source (e.g., "Direct", "Google", referrer domain) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, it discloses the Pro-account prerequisite and failure mode (UPGRADE_REQUIRED, including historical data), the all-time period behavior when dates are omitted, the semantics of totalEvents as pre-deduplication raw counts, and the unit ranges of rate metrics. That is substantial behavioral context the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and return summary, then layers constraints and edge cases. Dense but each sentence (units, all-time default, upgrade gating) carries information an agent needs; it is somewhat long but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description supplies the response shape ({ formId, period, metrics, breakdown, totalEvents }), the meaning of totalEvents, and the upgrade error path. For a read-only analytics tool with 7 params this is complete enough to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: it explains that omitting both from/to yields period { from: null, to: null } (all time), states that rate metrics are 0–100 and counts are integers, and clarifies totalEvents. These are non-obvious semantics not derivable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Get form analytics') and enumerates the exact metrics and breakdown dimensions returned. It names the sibling form_list as the way to obtain formId, so an agent can distinguish it from other form_* tools immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to form_list to find formId before calling, and flags the Pro-feature gating that returns UPGRADE_REQUIRED. It stops short of naming when-not-to-use alternatives, so it is clear context without full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_createCreate formAInspect
Create a new form in a workspace. Returns the form and a previewUrl the user can open to watch live edits. After create, call editor_getDocument to see the empty document, then chain the per-variant editor_insert* tools (e.g. editor_insertHeader, editor_insertParagraph, editor_insertTextQuestion) with after: "$prev" to add header/paragraph/question nodes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| folderId | No | ||
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it is a write (readOnlyHint=false) but non-destructive and not open-world. Beyond that, the description discloses the return payload (the form plus a previewUrl for live edits) and the required downstream tool chain, which is meaningful since no output schema exists. It omits permission/auth requirements and duplicate-name behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in the first sentence, then adds return info and the follow-on workflow. Three sentences, each with a distinct job, though the enumerated insert-tool examples are mildly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, describing the return value and the editing workflow is a real contribution, but with 0% parameter coverage the description leaves folderId and name semantics undocumented, and says nothing about failure modes or prerequisites. Adequate but with clear gaps for a 3-parameter creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters. The description only indirectly implies workspace scope ('in a workspace') and never mentions name constraints or the optional folderId at all, so the agent gets no semantics for folder targeting or naming rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new form in a workspace'), which cleanly separates it from form_update, form_get, and the unrelated document_create sibling. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit workflow guidance: after creation call editor_getDocument, then chain editor_insert* tools with after: "$prev". It does not compare against alternatives like document_create or explain when a form is preferable to a document, so it is slightly short of full when/why-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_deleteDelete formADestructiveInspect
Move a form to trash (soft delete). Active share links are revoked so their public URLs stop serving — restoring the form does NOT re-enable revoked links; mint new ones with formShareLink_create. Restorable with form_restore.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the destructiveHint annotation: it specifies soft deletion, revocation of active share links, that restoring does not re-enable revoked links, and that new links must be minted with formShareLink_create. This is rich operational disclosure for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the primary action and soft-delete nature appear first, followed by important side effects and the restore path. Every clause carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and the simple one-parameter input, the description covers the critical behavioral outcomes an agent needs: soft deletion, link revocation irreversibility, and restore/link alternatives. It is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the unexplained formId parameter, but it does not describe the expected format, source, or constraints of formId. It only implies that a form is targeted, which the parameter name already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Move a form to trash (soft delete).' It clearly distinguishes this soft-delete operation from permanent deletion and from sibling tools like form_restore and formShareLink_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool by stating the action and consequences, and it names related alternatives: form_restore for restoration and formShareLink_create for new links. However, it lacks an explicit when-not/alternative comparison against tools such as form_unpublish.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_getGet formBRead-onlyInspect
Get details for a form by ID. Includes a previewUrl the user can open to watch live edits (works for draft and published forms).
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false. The description adds useful return behavior: a previewUrl for live edits and support for both draft and published forms, though auth/error behavior is not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and then a key return detail. Every sentence earns its place with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with rich safety annotations, the description is adequate but incomplete: it omits parameter source and any detail about returned fields beyond previewUrl. The absence of an output schema means more return context would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter formId has no description. The description only says 'by ID,' which does not explain what identifier is expected or where to obtain it, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get), resource (form details), and scoping (by ID). However, 'details' is broad and does not explicitly distinguish it from sibling retrieval tools like formSettings_get or formTheme_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are provided. The note that it works for draft and published forms is contextual, but the agent must infer that this retrieves general form details rather than settings, themes, analytics, or lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_listList formsARead-onlyInspect
List forms in a workspace with optional folder filter and fuzzy name query. folderId=null for root-level only, omit for all. Pass query to filter by name (fuzzy) — search results are capped at limit with a truthful hasMore flag, but cannot be paginated further (tighten the query if hasMore is true). Cursor pagination available on the unfiltered list path.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1–100, default 20). | |
| query | No | Fuzzy name match. Omit to return all forms in scope. | |
| cursor | No | Opaque cursor from a prior response's `nextCursor`. Omit to start at page 1. | |
| folderId | No | null for root-level only, omit for all. | |
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false), so the bar is lower; the description still adds real behavior — search results are capped at `limit` with a truthful `hasMore` flag and cannot be paginated further. It stops short of describing the response shape or default ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, no filler, and the scoping/pagination constraints are front-loaded before the search caveat. Every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does mention hasMore and nextCursor, but it never enumerates what a form record contains or the default sort order. Adequate for a filtered list tool, with a small remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline is already 3, but the description adds genuine semantics: the null-vs-omit distinction for folderId, the fuzzy nature of `query` and its pagination limitation, and that `cursor` applies only to the unfiltered path. This is meaning beyond the field-level schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List forms in a workspace') plus scope modifiers (folder filter, fuzzy name query), so the agent can distinguish it from form_get or formSubmission_list. It does not explicitly name a sibling alternative, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete routing rules: folderId=null for root-level only vs omit for all, pass `query` to search, and notes cursor pagination is only available on the unfiltered list path. It even tells the agent what to do when hasMore is true (tighten the query), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_publishPublish formAInspect
Publish a form to make it live. Idempotent — already-published forms return success, and unpublished forms get republished from the last snapshot. Drafts publish from current content. Forms with content blocks but no question elements publish with a warning. Forms with no editor content cannot be published — call editor_insertHeader or editor_insertTextQuestion first. Next: formShareLink_create.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare this is a non-read-only, non-destructive, closed-world mutation, so the description carries the interesting burden and delivers: idempotency guarantees, snapshot-vs-draft republish semantics, and the warning emitted for content-blocks-without-questions. It stops short of stating permission requirements or what the call actually returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then edge cases and the next step follow in compact clauses with minimal waste. The dash-separated enumeration of idempotency rules is dense but each clause conveys a distinct behavior an agent needs, so little could be cut without losing signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with no output schema, the description covers the failure path, the idempotency contract, and the intended follow-up call. It omits anything about required auth or the shape of the success response, which is a minor residual gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required formId parameter, so nothing documents its format or provenance. The description implies a form is targeted but never says how to obtain a formId (e.g. from form_list or form_create), leaving a small gap that the self-explanatory name only partly covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource in the first clause ('Publish a form to make it live'), which cleanly separates it from siblings like form_unpublish, form_create, and form_update. It also names the follow-up tool (formShareLink_create) and the prerequisite editors, so the agent can place it in the workflow without reading other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-it-fails conditions: drafts publish from current content, republishing pulls the last snapshot, and forms with no editor content cannot be published until editor_insertHeader or editor_insertTextQuestion is called. It also routes the agent forward to formShareLink_create, covering both prerequisites and next steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_restoreRestore formAInspect
Restore a form from trash. Omit folderId to restore to its original folder; pass null for workspace root; pass a folderId string for a specific folder.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | ||
| folderId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-destructive, closed-world mutation, and the description goes beyond them by explaining exactly where the restored resource lands. It omits failure behavior (e.g. what happens if the form is not in trash) and any permission requirements, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core action front-loaded and the parameter details following in the order an agent needs them. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema and no nested objects, the description supplies everything required to invoke it correctly. Only the absence of error/prerequisite behavior keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the burden falls on the description, and it delivers: the omitted-vs-null-vs-string distinction for folderId is a tri-state semantic that the schema's type: [string, null] cannot express. formId is left unexplained, though its meaning is self-evident from the tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Restore a form') and adds scope ('from trash'), which lets an agent distinguish it from form_delete and form_update without opening a schema. No ambiguity about what the tool achieves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The destination-resolution sentence gives operational context (omit vs null vs string), but there is no explicit when-to-use or when-not guidance and no named alternative such as the sibling form_delete that presumably puts a form in the trash. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formSettings_getGet form settingsARead-onlyInspect
Get form settings including notification email config, respondent emails, the active email domain, verified email domains available for a custom From address, and Stripe payment connection status. Returns { settings, isDefault, availableEmailDomains, defaultFromAddress, payment }.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | Form ID to get settings for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by enumerating the returned settings surface, which is meaningful since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero waste; the return payload shape is front-loaded in the second sentence and can be scanned instantly. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a single trivial parameter, the description compensates by enumerating the returned object keys ({ settings, isDefault, availableEmailDomains, defaultFromAddress, payment }), giving the agent full expectation of the response. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (formId) with 100% schema description coverage, so the schema fully documents it. The description adds no format or sourcing guidance for the formId beyond what the schema says. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (form settings) and enumerates exactly which settings groups are returned: notification email config, respondent emails, active/verified email domains, and Stripe payment status. This distinguishes it from formSettings_update and form_get at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and the read-only framing, but the description never states when to call this versus form_get or formSettings_update, nor any prerequisites such as requiring a published form. Adequate but with clear routing gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formSettings_updateUpdate form settingsAInspect
Update form settings. Only provide fields to change. Use this for form BEHAVIOR — email notifications, scheduling/limits, redirects. For the form's name/folder/cover/logo use form_update; for colors/fonts/visual theme use formTheme_set; for questions and content use the editor_* tools.
Three independent email flows: self-notification (form owner/team on submit), respondent notification (confirmation to respondent), respondent reminder (when respondent abandons mid-form, Pro tier). Each is gated by its own *Enabled flag and accepts a custom subject + body. Respondent-targeted flows require *To to point at an email-input field ID (find via editor_getDocument).
Localization: customizing a respondent confirmation/reminder subject or body makes it translatable — the keys appear in translationDraft_get immediately (no form publish needed); localize via translationDraft_get → translationDraft_update. Self-notification (owner) emails are NOT translatable; write them directly in the target language here.
Custom From domain: pass emailDomainId from formSettings_get → availableEmailDomains; null resets to noreply@formbase.so.
{{variable}} placeholders for subjects/bodies: {{email.formName}} - Form name {{email.submittedAt}} - Submission date/time {{email.submissionId}} - Submission ID {{email.submissionType}} - "New", "Updated", or "Partial" {{metadata.formId}} - Form ID {{metadata.authorizedEmail}} - Respondent email (if auth enabled) {{metadata.pin4}} - 4-digit PIN per submission {{metadata.pin6}} - 6-digit PIN per submission {{metadata.code4}} - 4-char code per submission {{metadata.code6}} - 6-char code per submission Plus any answer by its field key: {{}} (the key fields_list shows and requests, callbacks and submissions use; the input node id from form_get questions[].id also works). Keys read back as {{}}.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | Form ID to update settings for | |
| language | No | BCP-47 language tag (e.g. "en", "en-US", "pt-BR"). Defaults to "en". | |
| maxEdits | No | Max post-submit edits allowed per submission (requires editAfterSubmit). 0 = unlimited; max 3. | |
| password | No | Form access password (≥4 chars). Setting a string implies passwordEnabled:true. Pass null to clear the gate (sets passwordEnabled:false). | |
| redirectUrl | No | http(s) URL respondents land on after submission. null or empty string clears. Mutually exclusive with allowAnotherResponse:true. | |
| showBranding | No | Show formbase branding on the form. | |
| emailDomainId | No | Verified email domain ID for custom From address. Read availableEmailDomains from formSettings_get for valid IDs. null resets to default. | |
| reminderSteps | No | Reminder schedule as idle offsets from the respondent's last activity, e.g. ["1d","3d","1w"]. Max 5 steps, sorted and deduped on save; [] = no automatic reminders. Applies to both abandoned public-link responses and requests. | |
| captchaEnabled | No | Enable Turnstile bot protection. | |
| editAfterSubmit | No | Allow respondents to edit a submission after sending. | |
| passwordEnabled | No | Gate form with a password. Auto-set to true when `password` is provided. Setting true requires a stored password. | |
| draftRetentionDays | No | Days to keep abandoned drafts (0–36500). null reverts to runtime default. | |
| notificationEmails | No | Email addresses receiving submission notifications. At most 10; duplicates are collapsed case-insensitively. | |
| notifyOnSubmission | No | Email form owner/team on new submissions. | |
| redirectQueryParams | No | Map form field values as query parameters on the redirect URL. Each entry maps a URL param name to a field ID. | |
| allowAnotherResponse | No | After submitting, loop respondents back to a fresh empty form. Mutually exclusive with a non-empty redirectUrl. | |
| pdfGenerationEnabled | No | Attach submission PDF to self-notification emails. | |
| respondentReminderTo | No | Field ID of an email-type question. Set to null to clear. | |
| requireAuthentication | No | Require respondents to be logged in. | |
| respondentReminderBody | No | Custom body for the reminder email. Plain text with optional {{variable}} placeholders; newlines become paragraphs. | |
| selfNotificationSubject | No | Custom subject for self-notification emails. Plain text with optional {{variable}} placeholders. | |
| submissionRetentionDays | No | Days to keep submissions (0–36500). null reverts to runtime default. Setting a value also clears any fixed deletion date configured in the form builder (the two retention modes are mutually exclusive). Business plan. | |
| respondentNotificationTo | No | Field ID of an email-type question. Respondent email is extracted from their answer to this field. Set to null to clear. | |
| showViewSubmissionButton | No | Show "View Submission" button in self-notification emails. | |
| respondentReminderEnabled | No | Enable reminder email to respondents who started but did not complete the form. Pro tier. | |
| respondentReminderSubject | No | Custom subject for the reminder email. Plain text with optional {{variable}} placeholders. | |
| selfNotificationEmailBody | No | Custom body for self-notification emails. Plain text with optional {{variable}} placeholders; newlines become paragraphs. | |
| respondentNotificationBody | No | Custom body for respondent confirmation email. Plain text with optional {{variable}} placeholders; newlines become paragraphs. | |
| maxSubmissionsPerRespondent | No | Max submissions one respondent may make via "Submit another response" (requires allowAnotherResponse). 0 = unlimited; max 1000. Hard-enforced for signed-in respondents; client-gated for anonymous. | |
| respondentReminderIdleWindow | No | Single-step form of `reminderSteps`, kept for forms authored before multi-step schedules. Ignored when `reminderSteps` is set. | |
| respondentNotificationEnabled | No | Enable confirmation email sent to the respondent after submission. | |
| respondentNotificationSubject | No | Custom subject for respondent confirmation email. Plain text with optional {{variable}} placeholders. | |
| respondentNotificationPdfEnabled | No | Attach submission PDF to respondent confirmation email. | |
| respondentReminderRequiredFieldIds | No | Minimum fields a respondent must have answered for the reminder to fire. Each item is a field ID from editor_getDocument. Empty array = remind any partial response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the safe-mutation annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false): it discloses tier gating (Pro tier reminder, Business plan retention), localization side effects (subject/body edits become translatable immediately, self-notification is not translatable), mutual exclusions (redirectUrl vs allowAnotherResponse), and that submissionRetentionDays clears a builder-configured fixed deletion date.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the routing sentence, then progressively finer detail; every block (email flows, localization, placeholders) is load-bearing for a 34-parameter tool. It is long, and some parameter-level facts duplicate the schema descriptions, but there is no padding prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 34-param mutation tool with no output schema, the description covers the cross-parameter interactions an agent cannot infer (flow gating, mutual exclusions, tier requirements, where to obtain IDs). Return-value behavior is the only omission and is low-stakes for a settings update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema lacks: the three independent email flows and their gating flags, the requirement that *To point at an email-input field ID, and most importantly the full {{variable}} placeholder vocabulary including answer-by-field-key resolution. A few lines (e.g. emailDomainId null reset) merely restate schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Update form settings') and immediately scopes it to form BEHAVIOR, explicitly naming the sibling tools that handle the excluded concerns (form_update, formTheme_set, editor_*). An agent can select this tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing rules: this tool for behavior, form_update for name/folder/cover/logo, formTheme_set for visual theme, editor_* for questions and content. It also states cross-tool prerequisites (emailDomainId from formSettings_get, field IDs from editor_getDocument, localization via translationDraft_get/update).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formSubmission_listList submissionsARead-onlyInspect
List submissions for a form (paginated). Read-only. Call form_list for formId first. Each item carries answers keyed by field key — a choice is its option key, a matrix { row_key: column_key }, a repeating group [{ member_key: value }] — and display, the same keys as readable text. This is the shape request_get and every webhook or callback use; call fields_list for the keys' titles and option labels. translationLanguage optionally attaches a stored AI translation under item.translation.display (same keys); item.answers and item.display always stay the original. Returns { formId, formName, items, nextCursor, hasMore, canPaginate } — canPaginate is true only when another page is fetchable via nextCursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1–100, default 20). | |
| cursor | No | Opaque cursor from a prior response's `nextCursor`. Omit to start at page 1. | |
| formId | Yes | ||
| includeDrafts | No | ||
| translationLanguage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint=false, and the description is consistent ('Read-only') while adding substantial context: pagination behavior, canPaginate semantics tied to nextCursor, the answers/display keying convention, and that translationLanguage never alters item.answers or item.display. This goes well beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and read-only status, then the payload conventions, the translation caveat, and the return shape. The middle sentence enumerating choice/matrix/repeating-group shapes is dense but each clause carries distinct information an agent needs; minor tightening is possible but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 5 params at 40% coverage, the description carries the load well: it enumerates the full return object (formId, formName, items, nextCursor, hasMore, canPaginate) and the nested answers shape. The only real gap is includeDrafts, which is left completely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40% (limit and cursor documented; formId, includeDrafts, translationLanguage bare). The description compensates meaningfully for translationLanguage (stored AI translation at item.translation.display, originals unchanged) and cursor/nextCursor round-tripping via canPaginate, but includeDrafts is never explained. Partial but strong compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List submissions for a form') plus scope (paginated, read-only), and distinguishes itself from form_list and fields_list by naming both as prerequisites for other data. An agent can tell what this returns and what it does not without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: call form_list first for formId, call fields_list for key titles and option labels, and notes this is the same shape used by request_get and webhooks. There is no explicit when-not guidance or a stated alternative for listing submissions, but the ordering and companion-tool guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formTheme_getGet form themeARead-onlyInspect
Get the theme for one color mode of a form. Returns theme (the form's custom theme or null when none set), defaultTheme (neutral baseline matching the schema; for a first apply, call formTheme_set with merge:false and supply all 7 sections (foundation, input, choice, rating, button, question, feedback); for subsequent tweaks, use merge:true to patch only changed fields), and hasTheme (whether a custom theme exists).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Color-mode theme to operate on. Light and dark themes are stored independently. | |
| formId | Yes | The form ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is known. The description adds useful behavioral detail by naming the returned fields (`theme`, `defaultTheme`, `hasTheme`) and explaining the null case when no custom theme is set. It does not cover errors or permissions, but that is minor for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the single sentence becomes a run-on with deeply nested parentheses that embed lengthy instructions for `formTheme_set`. Those setter details are only tangentially related to this getter, making the description less focused and harder to scan than it should be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description carries the burden of explaining return values: it covers `theme`, `defaultTheme`, and `hasTheme`, including the null case. It is largely complete for a read-only getter, though it does not describe the internal shape of the theme object or error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both `formId` and `mode`, including the enum values light and dark. The description mentions 'one color mode' but adds no syntax, format, or constraint beyond what the schema provides. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource: 'Get the theme for one color mode of a form.' This clearly distinguishes the read operation from the sibling setter formTheme_set, which is also referenced for context. An agent can identify the scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by explaining that `defaultTheme` is for a first apply and that `formTheme_set` should be used with merge:false or merge:true. However, it never explicitly states when to call formTheme_get versus alternatives or what conditions trigger its use. The workflow hints are more about the setter than about this getter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
formTheme_setSet form themeAInspect
Set, patch, or reset a form's theme for one color mode. Light and dark themes are stored independently — call twice for full coverage. Use load_skill("form-themes") for the preset catalog, full schema, and design guidelines.
Prefer a built-in preset over hand-building hex — pass preset and skip theme:
preset: "<id>"→ apply a named preset (e.g. "dracula"). The preset's mode must matchmode; mismatches are rejected with the valid ids. See load_skill("form-themes") for the catalog.
Otherwise supply theme directly (omit preset):
theme: null→ reset (mergeignored).theme: <partial>+merge: true(default) → patch existing theme; omitted sections/fields preserved.theme: <full 7-section object>+merge: false→ replace entirely.
Pass exactly one of preset or theme. Sections: foundation (page bg/text/font/radius), input, choice (normal + selected), rating, button, question (title/desc/asterisk), feedback (error). Colors hex (#rrggbb).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Color-mode theme to operate on. Light and dark themes are stored independently. | |
| merge | No | When true (default), `theme` is treated as a patch over the existing theme. When false, `theme` replaces entirely and must contain all 7 sections. Ignored when `theme` is null (reset) or when `preset` is used. | |
| theme | No | Full theme object (for replace) OR partial (for patch). Pass `null` to reset to default. Sizes are pixels. Use load_skill("form-themes") for design guidelines. | |
| formId | Yes | The form ID | |
| preset | No | Built-in preset id for this mode (e.g. "dracula"). Mutually exclusive with `theme`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses mutation-specific behavior that annotations cannot convey: light and dark are stored independently requiring two calls, preset/mode mismatch is rejected with valid ids returned, theme:null resets and ignores merge, and merge:false demands a full 7-section object. These are precise operational semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by tightly scoped bulleted rules; each bullet covers a distinct dispatch decision (preset, reset, patch, replace) with no redundancy. Length is justified by the number of mutually exclusive modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no output schema and rich structured annotations, the description covers everything an agent needs: mode independence, exclusivity rules, reset/patch/replace semantics, and a pointer to load_skill for the preset catalog and design guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds genuine meaning: the mutual exclusivity of preset and theme, the default-true behavior of merge, and the semantics of theme:null vs partial vs full. It also enumerates the seven sections and their contents, which the schema only implies structurally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a precise verb set (set/patch/reset), the exact resource (a form's theme), and the scope (one color mode), and distinguishes itself from the sibling formTheme_get by describing mutation rather than retrieval. An agent can act on it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditional routing: prefer a preset and skip theme, pass exactly one of preset or theme, and use load_skill("form-themes") for the catalog. It does not, however, name when to choose this tool over adjacent tools (e.g. formTheme_get for reading), so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_unpublishUnpublish formADestructiveInspect
Unpublish a form so respondents can no longer access it. Reversible via form_publish.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds the real behavioral payload: the effect on respondents and, importantly, that the action is reversible via form_publish, which meaningfully tempers the destructive hint and tells the agent rollback exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, effect stated first, reversibility second. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter state-change tool with no output schema, the description covers effect, audience impact and rollback path. It stops short of stating what identifier is needed or whether authorization/ownership is required, but the core decision inputs are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One parameter (formId) with 0% schema description coverage and no explanation in the description of what formId is or where it comes from. The parameter is guessable from the name, but the description contributes nothing beyond the schema here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Unpublish') plus resource ('a form') plus the observable effect ('respondents can no longer access it'). It also names the inverse sibling form_publish, so an agent can place it precisely in the publish/unpublish pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (take a form offline) and points at form_publish for the reverse operation, but never states when to choose this over adjacent tools like form_delete or form_restore. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_updateUpdate formAInspect
Update form metadata or appearance. Does not update form content (use editor tools). null clears folderId/emoji. cover and logo are OBJECTS keyed by a discriminated type — never a bare string. cover = {type:"image",url,offsetY?} | {type:"color",color} | {type:"none"}; logo = {type:"icon",name} | {type:"image",url} | {type:"none"}. Set an image only from a durable http(s) or data:image URL the user explicitly provided. AI chat file-attachment proxy URLs are temporary and must never be stored in form fields. Examples: cover:{type:"image",url:"https://…",offsetY:50}; cover:{type:"color",color:"#0ea5e9"}; logo:{type:"none"}.
| Name | Required | Description | Default |
|---|---|---|---|
| logo | No | Set or remove the form logo. Discriminated by `type`. Per-variant fields validated server-side: type=icon requires name; type=image requires url; type=none takes no other fields. For type=image, never invent or guess a URL — use a URL the user provided or an uploaded image; if you have neither, ask the user instead. | |
| name | No | ||
| cover | No | Set or remove the form cover. Discriminated by `type`. Per-variant fields validated server-side: type=color requires color; type=image requires url; type=none takes no other fields. For type=image, never invent or guess a URL (no stock, placeholder, or Unsplash links) — use a URL the user provided or an uploaded image; if you have neither, ask the user instead. | |
| emoji | No | ||
| formId | Yes | ||
| folderId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is already covered. The description adds genuinely useful non-annotation behavior — that null actively clears folderId/emoji, and that temporary AI chat attachment-proxy URLs must never be persisted — but says nothing about permissions or what the call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the content exclusion, then rules, then compact inline examples. The discriminated-union explanation and the never-store-temporary-URL rule partially restate the schema descriptions, which is minor redundancy rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and complex nested parameters, the description covers the essentials: scope, clearing semantics, and URL-safety constraints. Remaining gaps (permission requirements, whether the updated form is echoed back) are modest and partly mitigated by the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% and the tool has 6 params including two nested discriminated objects, so the description must compensate. It does: it spells out that cover/logo are objects keyed by type (never bare strings), enumerates each variant shape, and states the null-clearing semantics for folderId/emoji. It overlaps the schema's own per-variant descriptions rather than adding entirely new detail, and name/formId go unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (update form metadata/appearance) and immediately scopes it against the sibling family that handles content: 'Does not update form content (use editor tools).' An agent can distinguish this from editor_* tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not with a named alternative (editor tools for content), plus the 'null clears folderId/emoji' rule that tells the agent how to remove values. It does not, however, differentiate this from overlapping siblings like formSettings_update or formTheme_set, which also touch form-level configuration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_skillLoad skillARead-onlyInspect
Load a domain-knowledge skill — themes, settings, analytics, logic-rules, editing-flows, question-types, etc. Returns markdown reference content. Use when the task touches a domain whose conventions or constraints are not obvious from the surrounding tools. For loading additional MCP tool catalogs (deferred tools by bundle name) use load_tools instead.
Available skills:
toon-format: TOON format reference for reading and parsing form document structure
question-types: All question types with parameters, validation, and when to use each
logic-rules: Conditional logic conditions, actions, patterns, and examples
editing-flows: Editing workflows, node chaining, batch operations, and best practices
form-best-practices: Form design best practices for question design, ordering, and type selection.
analytics: Form analytics interpretation, metrics, and actionable insights
form-settings: Form configuration options, security, notifications, email customization, and data retention
form-themes: Form visual theming system — schema, constraints, design guidelines, and examples
requests: Requests: asking named people to fill a form — field keys, prefill shapes, delivery, callbacks, polling
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the otherwise-unavailable fact that the payload is markdown reference content rather than structured data, which matters for how an agent consumes it. It does not discuss caching or idempotency, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and routing rule are front-loaded in the first two sentences, before the value list. The skill list is long but is essential reference data rather than filler; a minor trimming of trailing period inconsistencies would tighten it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one enum parameter and no output schema, the description covers purpose, trigger, alternative, return type, and every valid argument. There is no obvious question an agent would need answered before calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the enum carries no per-value docs, yet the description enumerates all nine valid values with a one-line scope for each (e.g. 'logic-rules: Conditional logic conditions, actions, patterns, and examples'). This fully compensates for the schema's silence and is the decisive factor in selecting the right value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Load a domain-knowledge skill'), names the enumerated types, and states the return medium ('Returns markdown reference content'). It explicitly contrasts itself with the sibling load_tools, which is a different kind of loading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use when the task touches a domain whose conventions or constraints are not obvious from the surrounding tools') and an explicit routing rule away ('For loading additional MCP tool catalogs ... use `load_tools` instead'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_toolsLoad toolsARead-onlyInspect
Load a tool catalog: returns its intro text, usage patterns, and each tool's full JSON input schema as markdown. On surfaces that scope active tools by context this also activates the catalog's tools (elsewhere they are already callable and this just adds the enriched context — workflows, field semantics, constraints — beyond the bare schema). Prefer loading the relevant catalog before using a capability over guessing a tool name or argument shape. For domain knowledge (themes, settings, logic semantics) use load_skill instead.
Available catalogs:
form-data: Aggregate form analytics (views, completions, drop-off). Individual submission rows: formSubmission_list.
form-appearance: Visual styling: per-mode themes (light + dark). Cover/logo via form_update.
form-behavior: Behavior settings: notification emails, completion redirect, password, retention, language, payment.
form-sharing: Share-link CRUD + custom-domain attach/detach. Required after form_publish for respondent URL.
form-translations: Multilingual draft → publish workflow for form copy.
form-lifecycle: Form lifecycle ops beyond publish: unpublish, restore-from-trash.
workspace-management: Workspace inspect + folder CRUD beyond core list verbs.
request-lifecycle: Requests: discover field keys, create, read, list, cancel, remind, replay the callback, upload a document.
editor-actions: Editor actions beyond getDocument/updateElement/deleteElement: format text, set logic, simulate logic.
editor-inserts: Less-common element inserts beyond the core set: time/switch/file/signature/matrix/ranking/payment/schedule-appointment/picture-choice questions, embedded/table/list content, row/repeating-group layout, calculated/hidden fields, logic + variable.
| Name | Required | Description | Default |
|---|---|---|---|
| catalog | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond that: surface-dependent activation of the catalog's tools, and that the return is enriched context (workflows, field semantics, constraints) rather than bare schema. It stops short of stating whether loads are idempotent or whether catalogs can conflict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, and the catalog bullets each carry routing information that cannot be inferred. The mid-sentence parenthetical about context-scoped surfaces is dense and slightly awkward, and the description is long, but no line is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one enum parameter and no output schema, everything an agent needs is present: what is loaded, what the return looks like, when to prefer it, and a per-value map of the enum. Nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the only parameter is an enum, so the schema alone gives no basis for choosing a value. The description compensates fully: each of the ten enum values is annotated with what it contains and which sibling tools it relates to, turning an opaque enum into a decidable routing choice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource ('Load a tool catalog') and immediately states the payload ('intro text, usage patterns, and each tool's full JSON input schema as markdown'). It also explicitly distinguishes itself from the adjacent sibling load_skill, so an agent can tell them apart without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit directive ('Prefer loading the relevant catalog before using a capability over guessing a tool name or argument shape') plus an explicit exclusion routing to load_skill for domain knowledge. The ten catalog bullets function as a when-to-use map, telling the agent which catalog covers which capability area.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_cancelCancel requestADestructiveInspect
Cancel a pending request: its link stops working immediately and a request.canceled callback fires if one was configured. Permanent — a canceled request never reopens; ask again with request_create. Only pending requests can be canceled. Returns the request plus next.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Why it was withdrawn. Stored on the request and echoed in the request.canceled callback. | |
| requestId | Yes | Request ID, copied from a request_create or request_list response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description goes well beyond them: it discloses the immediate side effect on the link, the conditional callback firing, and the irreversibility ('never reopens'). For a mutation tool this is exactly the extra context an agent needs before committing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the effect and consequence, then permanence, then precondition and return. No filler and nothing that restates the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what comes back (the request plus `next`), and it covers side effects, irreversibility, and preconditions. Nothing material for correct invocation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with only two parameters, both fully documented in the schema, so the description legitimately cedes that ground. It adds only a return-value note ('Returns the request plus `next`') rather than parameter syntax, which matches the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cancel) and resource (pending request) and immediately specifies the observable consequence: the link stops working and a request.canceled callback fires. This is far more precise than the bare name/title and clearly distinguishes it from request_create/request_remind in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Only pending requests can be canceled') and routes the agent to a follow-up alternative ('ask again with request_create'). What is missing is guidance on the sibling tools for non-pending requests (request_get/request_list) and any note that a reason is optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_createCreate requestAInspect
Create a request: one assignment of a published form to one named recipient, with its own link, prefilled answers, expiry and optional callback. Use it when you need answers from a specific person and want to know whether they answered; for a link anyone may fill, use formShareLink_create. Call fields_list(formId) first — prefill/context/readonly take field keys. Returns { id, status, url, deliveryStatus, expiresAt, next }. Track with request_get, withdraw with request_cancel. See load_skill("requests").
| Name | Required | Description | Default |
|---|---|---|---|
| test | No | Dry run. No invitation or reminder email whatever delivery says; the link still opens and can be completed; the callback fires with "test": true; the request is hidden from the Requests page and analytics by default and its submission counts nowhere (no quota, no exports, no integrations). | |
| formId | Yes | Published form to send. Call fields_list(formId) first for its keys. | |
| context | No | Values for HIDDEN fields, keyed by field key: { "crm_id": "A-42" }. Only hidden-field keys (fields_list context: true); use metadata for others. Recipient cannot edit them, but sees mentioned ones. | |
| prefill | No | Starting answers for visible questions, keyed by field key. Shapes: string, number, "2026-03-01", "09:30", option KEY not label (see fields_list options), string[] of option keys (checkbox/ranking/picture-choice), { "row_key": "column_key" } (matrix), [{ "member_key": value }] (repeating group). | |
| delivery | No | "none" (default) returns the link for you to deliver; "email" sends the invitation (needs recipient.email, Pro+). | |
| domainId | No | Mint the link on this custom domain; formShareLink_list returns the ids as availableCustomDomains. | |
| language | No | Published language tag the form opens in and the invitation is written in, e.g. "fr". Omit for the form default. The recipient can switch to any published language. | |
| metadata | No | Opaque JSON echoed on request_get and in the callback. | |
| readonly | No | Field keys the recipient may not edit. Each must also be in prefill. | |
| documents | No | Files for this one recipient, added below the block’s authored documents. See document_create. | |
| expiresAt | No | Epoch ms when the link dies. Default 30 days, max 365. | |
| recipient | No | Who this is for, e.g. { "email": "ada@acme.com", "name": "Ada" }. | |
| reminders | No | Idle-time offsets, e.g. ["2d","5d"] (max 5, units m/h/d). Omit to inherit the form schedule, [] for none. Needs recipient.email (Pro+). | |
| externalId | No | Your own id; request_list filters on it. | |
| callbackUrl | No | Public https endpoint POSTed on completion, expiry and cancellation, signed with X-formbase-Signature. Private and loopback addresses are refused. | |
| idempotencyKey | No | Retry-safe key, workspace-scoped for 30 days. Same key + same body returns the original request; a different body is a conflict. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is already covered. The description adds the lifecycle shape (returns id/status/url/deliveryStatus/expiresAt/next) and the follow-on toolset for tracking and withdrawal, which is useful context beyond annotations. It doesn't cover rate limits or permissions, but for a create tool the annotation set is adequate and the description extends it meaningfully.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the definition and the usage condition, then routes to the alternative and prerequisites. It is a touch dense, packing the return shape and three follow-on tools into the final two sentences, but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter create tool with no output schema, the description supplies the conceptual model (what a request is), the return envelope, the prerequisite (fields_list), the alternative (formShareLink_create) and the follow-on tools (request_get, request_cancel). What remains missing is contact-level detail on how it interacts with request_remind and callback lifecycle, but the schema covers per-field semantics and the description is sufficient to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the schema carries the per-parameter burden. The description nevertheless adds framework-level direction: 'prefill/context/readonly take field keys,' which ties three parameters together conceptually and points to fields_list as the prerequisite for resolving them. That is real added value over the schema, though the bulk of parameter semantics lives in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb + resource and defines what a request actually is ('one assignment of a published form to one named recipient, with its own link, prefilled answers, expiry and optional callback'). It also distinguishes the resource from the sibling formShareLink_create by stating the difference in intent (know whether they answered vs. a link anyone may fill).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the when: 'Use it when you need answers from a specific person and want to know whether they answered.' It names the alternative (formShareLink_create) and the condition that selects it, plus a prerequisite (fields_list(formId) first) and follow-on tools (request_get to track, request_cancel to withdraw).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_getGet requestARead-onlyInspect
Get one request: status, recipient, prefill/context, its link, the derived timeline, and — once completed — answers keyed by field key plus display in readable text (a signature answer is shortened to a marker; a file answer carries its download url). Read-only. Returns the request plus next, which says whether to keep polling or read the answers. Find ids with request_list.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | Request ID, copied from a request_create or request_list response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnly, non-destructive, non-open-world). The description goes well beyond that, disclosing return-shape quirks: answers keyed by field key, `display` in readable text, signature answers truncated to a marker, file answers carrying a download `url`, and the `next` polling signal. This is exactly the extra context annotations cannot supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and return contents, then tacks on the read-only note and the id-lookup pointer. Dense but every clause carries information; only the mid-sentence em-dash parentheticals make it slightly awkward to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing returns and does so thoroughly, including the `next` control field and the special cases for signature and file answers. An agent has everything needed to call and consume this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is fully described in the schema ('Request ID, copied from a request_create or request_list response'). The description only reiterates id discovery via request_list, so it adds little beyond the schema — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get one request') and enumerates exactly what is returned — status, recipient, prefill/context, link, timeline, answers, display. It explicitly routes the agent to request_list for id lookup, distinguishing it from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: read-only, use request_list to find ids, and consume the `next` field to decide whether to keep polling or read answers. It stops short of stating when NOT to use it or naming all alternatives, but the operating conditions are well specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_listList requestsARead-onlyInspect
List requests for one form or a whole workspace, newest first, optionally filtered by status, outcome or externalId; test requests only with includeTest. Read-only. Returns compact rows plus { nextCursor, hasMore, canPaginate } — prefill, context, metadata, answers and the timeline come from request_get. Pass either formId or workspaceId.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1–100, default 25). | |
| cursor | No | Opaque cursor from a prior response's `nextCursor`. Omit to start at page 1. | |
| formId | No | Scope to one form. Pass this or workspaceId. | |
| status | No | Only requests in this state. | |
| outcome | No | Only completed requests with this verdict. | |
| externalId | No | Your own id, as passed to request_create. Combines with status and outcome. | |
| includeTest | No | Also return requests created with test: true (hidden by default). | |
| workspaceId | No | Scope to a whole workspace (workspace_list returns the ids). Pass this or formId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, and the description's 'Read-only' is consistent with them. It goes further by describing the compact row payload plus { nextCursor, hasMore, canPaginate } and the default hiding of test requests, which are behaviors not covered by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense but front-loaded clause chain: scope and ordering first, then filters, then return shape, then the alternative tool. Every clause carries information, though the semicolon-heavy packing makes it slightly harder to scan than a two-sentence split would.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully discloses the return envelope (compact rows plus nextCursor/hasMore/canPaginate) and points to request_get for full detail. Combined with 100% schema coverage, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents filters, enums, limits, and the 'pass this or formId' rules. The description restates filtering (status, outcome, externalId) and the includeTest behavior but adds no syntax or format detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List requests') plus the scoping options ('one form or a whole workspace'), the sort order ('newest first'), and what it deliberately omits. It also distinguishes itself from siblings by routing detail-seeking callers to request_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection context: pass either formId or workspaceId, use includeTest to surface test requests, and use request_get when prefill/context/metadata/answers/timeline are needed. No explicit when-not guidance beyond that, but the alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_remindRemind requestAInspect
Send a reminder email to the recipient of a pending request now, outside its schedule. Needs recipient.email and Pro+. Capped at 8 reminders per request and one manual send per 10 minutes. Returns the request plus next.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | Request ID, copied from a request_create or request_list response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: auth requirements (recipient.email and Pro+), rate limits (8 per request, one manual send per 10 minutes), and the return shape. Annotations only cover the safety profile, so this fills the real behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action, then prerequisites, then limits and return. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Though there is no output schema, the description notes the return ('the request plus `next`'), and constraints and prerequisites are all stated. An agent has everything needed to invoke it correctly and anticipate failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and requestId is fully documented there, so the description need not re-explain it. The mention of 'recipient.email' adds an implicit dependency but is a prerequisite rather than param syntax, so baseline 3 holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (send a reminder email) and resource (the recipient of a pending request) with a clear scope modifier ('now, outside its schedule'). This distinguishes it functionally from request_replayCallback and request_cancel, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'outside its schedule' tells the agent when this tool applies versus waiting for a scheduled reminder, and the constraints imply a manual override use case. No alternative tool is named, but the triggering condition is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_replayCallbackReplay request callbackAInspect
Re-queue the terminal callback of a finished request — the escape hatch for a receiver that was down past the retry budget. Terminal requests only (completed, expired, canceled) and only when callbackUrl was set. Returns { dispatchId, eventId, next }; the replay carries the ORIGINAL event id, so the receiver must dedupe on it.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | Request ID, copied from a request_create or request_list response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is not read-only, not destructive, and closed-world; the description adds materially more — it discloses the return shape ({ dispatchId, eventId, next }) and the critical semantic that the replay carries the ORIGINAL event id, requiring receiver-side dedupe. It omits auth requirements and idempotency/rate-limit nuance, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the action and the constraint, then the return contract. Every clause earns its place; nothing is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, non-destructive mutation with no output schema, the description supplies the preconditions, the return payload shape, and the dedupe hazard the caller must handle. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented in the schema, so the baseline is 3. The description's only added constraint on requestId validity ('terminal requests only') is already credited under usage, leaving little new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Re-queue the terminal callback of a finished request', with the reason ('the escape hatch for a receiver that was down past the retry budget'). This is clearly distinguishable from siblings like request_cancel, request_remind, request_create, and request_get without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions and exclusions: terminal requests only (completed, expired, canceled) and only when callbackUrl was set. It does not name alternative tools for the non-terminal case (e.g., request_remind or request_cancel), so it falls just short of a full when/when-not/alternatives treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translationDraft_getGet translation draftARead-onlyInspect
Read the resolved translation draft for one (form, language) pair. Returns every source key with its current status:
missing: no translation stored
outdated: source changed since translation was written, or the source/translation mentions a field that no longer exists (a {{variable}} naming an unknown id)
current: translation matches current source
suggested: staged by translationDraft_update and not yet accepted by a person in the editor — every write from this tool lands here and stays here after publish, so judge completeness by missing/outdated being 0, not by current
Keys cover form questions/content (block_<id>.*) AND customized respondent notification emails — confirmation + reminder subject/body as email.confirmation.* / email.reminder.*. Those emails are translatable content here, not just a formSettings field; translate them through this tool, never by overwriting the source via formSettings_update. An email.* key only appears once the author has customized that email's text (default-template emails have no key yet); this is independent of publish state — the form does NOT need to be published for the key to appear.
Self-notification emails (the owner/team selfNotification* fields) are NOT translatable and never produce a key — they have a single recipient, so author them directly in the desired language via formSettings_update rather than looking for them here.
Pass status to filter to one bucket — useful for "show me all missing" prompts. Source fragments and stored values are JSON-stringified Descendant[].
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | ||
| status | No | ||
| language | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive), yet the description adds substantial non-obvious behavior: the four status buckets and their meanings, that every update write lands and stays in 'suggested' after publish, and the email.* key lifecycle (appears only once customized, independent of publish state). This is exactly the context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then structured as a status list plus targeted notes on email keys. It is long, but each paragraph carries distinct behavioral facts (status semantics, email key rules, selfNotification exclusion) rather than padding, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no schema parameter descriptions, so the description must explain both the return shape (keys with status, JSON-stringified Descendant[]) and the key naming scheme (block_<id>.*, email.confirmation.*, email.reminder.*). It does exactly that, leaving no gap an agent needs to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It defines all four status enum values in detail and explains the filtering intent, which is the semantically hardest parameter. formId and language are left to their schema types/patterns, but the most important ambiguity is resolved richly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Read the resolved translation draft for one (form, language) pair.' It clearly distinguishes itself from sibling translationDraft_update and translationDraft_publish by describing a read of resolved state, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditional usage ('Pass status to filter to one bucket — useful for "show me all missing" prompts') and a when-not with alternative ('Self-notification emails ... author them directly ... via formSettings_update rather than looking for them here'). It also warns against a misuse path (never overwrite source via formSettings_update).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translationDraft_publishPublish translation draftAInspect
Snapshot a language's draft into the public bundle so respondents see the latest text. Idempotent. Empty drafts unpublish the language (removed from publishedLanguages — respondents stop seeing it in the picker).
Returns { publishedKeyCount, alreadyCurrent } — alreadyCurrent: true means the published bundle already matched the draft (no-op republish), so callers can skip "publish OK" UX and tell the user nothing changed.
Call after translationDraft_update once the author has reviewed. No separate "unpublish" tool — clear the draft and republish.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | ||
| language | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say this is a non-read-only, non-destructive, closed-world mutation. The description adds what the annotations cannot: idempotency, the destructive side effect (empty draft removes the language from publishedLanguages and respondents lose it in the picker), the exact return shape, and the meaning of alreadyCurrent so callers can suppress false 'publish OK' UX.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence is load-bearing: purpose, idempotency, destructive edge case, return contract, and call ordering, with the core action front-loaded. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by documenting the returned `{ publishedKeyCount, alreadyCurrent }` object and its interpretation. The only remaining gap is that neither parameter's meaning is fully spelled out for a zero-coverage schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description must carry the load. It implicitly defines `language` as the draft language being published and ties an empty value to unpublish behavior, but `formId` is never mentioned and no format expectations are stated beyond what the regex already encodes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a precise verb and resource — 'Snapshot a language's draft into the public bundle' — which is clearly distinguishable from translationDraft_update (edit the draft) and form_publish (publish the whole form). The scope (one language, within a form) is stated, not implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call after translationDraft_update once the author has reviewed' gives an explicit sequencing rule, and 'No separate unpublish tool — clear the draft and republish' tells the agent how to reach the inverse operation. It stops short of contrasting with the sibling form_publish, so an agent could still wonder which publish applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translationDraft_updateUpdate translation draftAInspect
Upsert one or more translation entries across one or more languages in a single atomic mutation. Pass a one-item array for a single-key edit. Pre-validates every entry against the source manifest — a single bad key/value rolls back the whole batch.
The language row is auto-created on first write — no separate "add language" call needed, so this is how you translate into a language the form does not have yet. Works from any page.
Writes land as suggestions in the per-language draft: the author reviews them on the translations page (accept/decline) and then publishes. Respondents keep seeing the existing published translations throughout. Do not change the form's source language or edit form content as a substitute for translating.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | ||
| entries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only covering safety flags (non-readonly, non-destructive, closed-world), the description carries the real behavioral load: writes are staged as suggestions the author must accept/decline before publish, respondents keep seeing the published version, the language row is auto-created, and a single bad entry rolls back the whole batch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and its atomicity guarantee, then the suggestion/publish consequence, then a guardrail. Dense and mostly economical, though the bolding and three-paragraph layout is slightly heavier than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A complex batch mutation with no output schema, no annotations beyond safety flags, and a nested array parameter — the description covers atomicity, validation/rollback, side effects, staging model, and auto-creation of languages, which is everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema coverage is reported as 0%, so the description must compensate: it explains that entries is a batch of key/language/value objects, that a one-item array performs a single-key edit, and that upsert semantics apply (new keys/languages allowed). It does not explain formId or the sourceHash staleness workflow, which the nested schema documents instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Upsert one or more translation entries across one or more languages in a single atomic mutation") and clarifies it covers both single-key edits and bulk language writes. Clearly separable from translationDraft_get and translationDraft_publish without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance: "this is how you translate into a language the form does not have yet", "Works from any page", "Pass a one-item array for a single-key edit". It also states an exclusion ("Do not change the form's source language or edit form content as a substitute for translating"), leaving little inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translationLanguage_deleteDelete translation languageADestructiveInspect
Delete a language and all stored translations for it. Permanent. Re-add by calling translationDraft_update with an entry for it; prior translations are not recoverable.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes | ||
| language | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the lower bar applies. The description still earns credit by adding that the deletion is 'Permanent' and that 'prior translations are not recoverable', which goes beyond what the hints convey, though it omits permission/auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its consequence, then the recovery path. No filler and nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema the description needn't explain returns, and it covers irreversibility plus how to recover. The gap is the undocumented formId/language semantics, but the core behavioral picture for a destructive tool is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters are required, so the description carries the load. It references 'language' only obliquely and never explains 'formId' (the scoping identifier) or that the language field expects a BCP-47 style tag per the regex pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete') plus resource ('a language') plus the blast radius ('and all stored translations for it'), which no sibling does. An agent can distinguish it from translationLanguage_list and translationDraft_update/publish without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a remediation path ('Re-add by calling translationDraft_update') which is genuinely useful workflow guidance, but never states when to delete versus leaving a language in place or which preconditions must hold. Usage is implied rather than framed as a decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translationLanguage_listList translation languagesARead-onlyInspect
List the languages a form has translation rows for, each with completion stats (current / outdated / missing / suggested). Returns the standard list envelope ({ items, nextCursor, hasMore }) — language sets are bounded per form, so cursor is always null. Use before translationDraft_get to know which languages to read.
| Name | Required | Description | Default |
|---|---|---|---|
| formId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/destructive=false, so safety is covered. The description adds genuinely useful behavior beyond the schema: the response envelope shape, the fact that cursor is always null because language sets are bounded, and the stats breakdown. It does not discuss auth or errors, but adds real operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences: purpose, return shape, then usage. No filler; each sentence adds information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the envelope contract and the always-null cursor caveat, and pairs it with a routing instruction to translationDraft_get. For a single-param list tool this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One required param (formId) with 0% schema description coverage, so the description carries the burden. It scopes the result to 'a form' which implies formId's meaning, but never documents the parameter's expected format or source. Adequate but not compensating for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the languages a form has translation rows for') plus the returned per-language payload (completion stats). This is clearly distinct from the translationDraft_* siblings, which read/write actual draft content rather than enumerate languages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing guidance: 'Use before translationDraft_get to know which languages to read,' naming the sibling it precedes. It does not state when NOT to use it or contrast with translationLanguage_delete, but the forward-routing is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspaceFolder_createCreate folderAInspect
Create a folder in a workspace. Prerequisite: call workspaceFolder_list to find existing folders (and any valid parentId for nesting); omit parentId for a root-level folder. Idempotent on case-insensitive name match at the same parent: a duplicate returns the existing folder with alreadyExisted: true. Returns { id, name, workspaceId, parentId, createdAt, alreadyExisted }. Next: form_create with this folder.id as folderId to drop a new form into it, or workspaceFolder_create again to nest deeper.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| parentId | No | ||
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, destructive=false, openWorld=false), and the description adds substantial behavioral context beyond them: idempotency on case-insensitive name match returning alreadyExisted=true, and the exact return shape. This is exactly the kind of trait annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence is load-bearing: scope, prerequisite, root-level rule, idempotency, return shape, next step. Front-loaded with purpose and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return object inline and covers the mutation's idempotency and nesting semantics. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the burden, and it does for parentId ('omit for root-level', valid parent comes from list) and name (case-insensitive matching). workspaceId is left unexplained, a minor gap given how self-evident it is.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource ('Create a folder in a workspace') and is immediately distinguishable from siblings workspaceFolder_list/update/delete. An agent knows exactly what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite (call workspaceFolder_list to find parents), the root-level condition (omit parentId), and the follow-on step (form_create with folder.id, or nest deeper). When-to-use and sequencing are fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspaceFolder_deleteDelete folderADestructiveInspect
Permanently delete a folder, all nested subfolders, and every form within (including trashed). Cannot be undone. Returns the IDs destroyed in the cascade as { deletedFolderIds, deletedFormIds } so callers can show a removal summary or update their cache without a follow-up list call.
| Name | Required | Description | Default |
|---|---|---|---|
| folderId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds genuinely non-obvious behavior: the deletion is recursive across subfolders, sweeps up trashed items, is irreversible, and returns the destroyed IDs. None of that is recoverable from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, and the destructive cascade is front-loaded. The final sentence on return shape is long but earns its place because no output schema exists to convey it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no output schema, the description covers scope, reversibility, and return payload well. It omits any permission or authorization prerequisite, which is the only meaningful gap for an irreversible operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single required folderId has no schema documentation. The description implies the subject is the folder being deleted but never states that folderId identifies it, its format, or whether a path is accepted. Adequate but thin given the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (folder) and goes further by defining the exact cascade scope: nested subfolders, all forms within, including trashed. This distinguishes it from sibling form_delete and workspaceFolder_update, which cannot remove folder trees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the irreversible cascade semantics, which tells an agent this is the heavy-weight deletion path. However, it never names an alternative (e.g. form_delete for single forms, workspaceFolder_update for renaming) or states prerequisites, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspaceFolder_listList foldersARead-onlyInspect
List folders in a workspace (paginated). Read-only. Prerequisite: call workspace_list for workspaceId. Returns { items: [{id, name, workspaceId, parentId, createdAt}], nextCursor, hasMore }. Next: workspaceFolder_create to add a subfolder, workspaceFolder_update to rename/move, or form_list with this folderId to drill in.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (1–100, default 20). | |
| cursor | No | Opaque cursor from a prior response's `nextCursor`. Omit to start at page 1. | |
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/destructiveHint already declared, the description still adds pagination behavior and, importantly, the full response envelope ({items, nextCursor, hasMore}) in the absence of an output schema. 'Read-only' is redundant with annotations, but the pagination and return-shape disclosure is genuine added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight paragraph, front-loaded with purpose and pagination, then prerequisite, return shape, and next-steps. Every clause carries distinct information; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers the response shape, paging contract, prerequisite, and adjacent tools, leaving no material gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; limit and cursor are already self-documented, but workspaceId has no schema description, and the description supplies its provenance ('call workspace_list for workspaceId'). That fills the gap rather than merely restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List folders in a workspace') plus a scoping qualifier (paginated), which cleanly separates it from workspace_list, workspaceFolder_create, and workspaceFolder_update in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the prerequisite ('call workspace_list for workspaceId') and routes the agent forward to three concrete alternatives with the conditions that select each (add a subfolder, rename/move, drill in with folderId). Both when-to-use and what-comes-next are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspaceFolder_updateUpdate folderAInspect
Update a folder name and/or move it to a different parent. Pass at least one of name or parentId. parentId: null = move to workspace root, omit = leave parent unchanged. Prerequisite: call workspaceFolder_list for folderId and any target parentId. Returns the updated folder { id, name, workspaceId, parentId, createdAt }.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| folderId | Yes | ||
| parentId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is partly covered. The description adds the return payload shape and the no-op semantics of omitting parentId, but does not address permission requirements or failure/conflict behavior for a move operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the action and its constraint, then prerequisites, then the return shape. Dense but every sentence adds usable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no output schema and no annotation-level detail on returns, the description supplies the return fields explicitly, the prerequisite lookup, and the parameter constraints. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden and does so well: it explains the required 'at least one of' constraint and the crucial parentId distinction (null = workspace root, omit = unchanged), which the schema cannot convey. Only minor details like name length limits are omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Update a folder name and/or move it to a different parent'), covering both mutation modes. This cleanly distinguishes it from siblings workspaceFolder_create, workspaceFolder_delete, and workspaceFolder_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit precondition ('Pass at least one of name or parentId') and names a required prerequisite call ('call workspaceFolder_list for folderId and any target parentId'). It does not name alternatives, but the operation is unambiguous enough that no sibling routing is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workspace_listList workspacesARead-onlyInspect
List workspaces the user can access (owned or member). Read-only. Next: workspaceFolder_list / form_list to drill into a workspace. Returns { items: [{id, name, createdAt, role}], nextCursor, hasMore }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so 'Read-only' adds no new safety info. However, since there is no output schema, the inline return shape ({ items: [{id, name, createdAt, role}], nextCursor, hasMore }) genuinely discloses behavior the agent could not otherwise see, including pagination via nextCursor/hasMore.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero waste; the scope qualifier leads, then the routing hint, then the return shape. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with no output schema, the description covers the access scope, the safety profile, the follow-up tools, and the return structure. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline a 4 applies. The description correctly implies no input filtering, matching the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List), resource (workspaces), and scope qualifier (the user can access, owned or member). An agent can distinguish this from workspaceFolder_list and form_list without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear onward routing ('Next: workspaceFolder_list / form_list to drill into a workspace'), telling the agent what to do after listing. It does not state explicit when-not-to-use conditions, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
76 tool updates
- First observed
document_create - First observed
editor_deleteElement - First observed
editor_formatText - First observed
editor_getDocument - First observed
editor_insertCalculatedField - First observed
editor_insertCheckboxQuestion - First observed
editor_insertContactQuestion - First observed
editor_insertDateQuestion - First observed
editor_insertDecisionQuestion - First observed
editor_insertDocumentsBlock - First observed
editor_insertEmbedded - First observed
editor_insertFileQuestion - First observed
editor_insertHeader - First observed
editor_insertHiddenField - First observed
editor_insertImage - First observed
editor_insertLinearScaleQuestion - First observed
editor_insertList - First observed
editor_insertLogic - First observed
editor_insertMatrixQuestion - First observed
editor_insertNumberQuestion - First observed
editor_insertPageDivider - First observed
editor_insertParagraph - First observed
editor_insertPaymentQuestion - First observed
editor_insertPictureChoiceQuestion - First observed
editor_insertRadioQuestion - First observed
editor_insertRankingQuestion - First observed
editor_insertRatingQuestion - First observed
editor_insertRepeatingGroup - First observed
editor_insertRow - First observed
editor_insertScheduleAppointmentQuestion - First observed
editor_insertSelectQuestion - First observed
editor_insertSignatureQuestion - First observed
editor_insertSwitchQuestion - First observed
editor_insertTable - First observed
editor_insertTextQuestion - First observed
editor_insertTimeQuestion - First observed
editor_insertVariable - First observed
editor_setLogic - First observed
editor_testLogic - First observed
editor_updateElement - First observed
fields_list - First observed
form_create - First observed
form_delete - First observed
form_get - First observed
form_list - First observed
form_publish - First observed
form_restore - First observed
form_unpublish - First observed
form_update - First observed
formAnalytics_get - First observed
formSettings_get - First observed
formSettings_update - First observed
formShareLink_create - First observed
formShareLink_list - First observed
formShareLink_update - First observed
formSubmission_list - First observed
formTheme_get - First observed
formTheme_set - First observed
load_skill - First observed
load_tools - First observed
request_cancel - First observed
request_create - First observed
request_get - First observed
request_list - First observed
request_remind - First observed
request_replayCallback - First observed
translationDraft_get - First observed
translationDraft_publish - First observed
translationDraft_update - First observed
translationLanguage_delete - First observed
translationLanguage_list - First observed
workspace_list - First observed
workspaceFolder_create - First observed
workspaceFolder_delete - First observed
workspaceFolder_list - First observed
workspaceFolder_update
Publisher details
- Operator
- Formbase AS · Publisher source
- Operator website
- https://formbase.so
- Vendor relationship
- First-party
- Documentation
- https://docs.formbase.so/guides/ai-agents/connect/
- Trust center
- Not available
- Restrictions
- Not applicable
Related MCP Connectors
AI-native form builder: create, publish & read responses from Claude, ChatGPT & MCP.
Connect AI assistants to Dashform — build and manage AI-powered forms, funnels, quizzes.
Formify turns document paperwork into something you can just ask for. Describe the agreement you need and it is built as a real, fillable PDF — text fields, checkboxes, dropdowns and signature space placed where a signing client actually expects them. Send it for electronic signature to one person or several, in a set order or all at once, by email or SMS, and preview exactly where every field landed before anyone is contacted. Prove who signed. Swedish BankID, an ID document scan, a live face check, or a company registration lookup for KYC and AML — including the option to capture an ID document's data without storing the image at all. Attach an AI assistant to the document itself. The recipient can ask it what a clause means and it highlights the passage it is answering about, reads it aloud if they prefer, and answers in English, Swedish or Spanish. They never have to paste your contract into another chatbot to understand it. Then track it. See who signed, who only opened it, and who never looked. Remind only the people who have not signed. Fix a mistyped email, hand someone a link in person, revoke a send, or download the completed document. Built for small businesses — agencies, property managers, trades, clinics and tour operators — where the person winning the client is also the person chasing the signature.
- mcpOAuthcom.formester
Give AI agents access to form submissions — read, search, update, and process file attachments.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to build and operate production-ready forms, quizzes, surveys, and workflows, including creation, publishing, submission management, and integration with webhooks and analytics.MIT
- FlicenseNot gradedqualityDmaintenanceEnables intelligent form data collection for mediation/dispute resolution services through conversational AI. Supports structured information gathering, real-time validation, and database storage with integration for Cursor, Dify, and other LLM platforms.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to request human approvals with customizable forms, webhooks, and team features.55 npmMIT
- AlicenseNot gradedqualityDmaintenanceForm builder and response collector for AI agents. Reads are free, writes require Veyra commit mode.7 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.