Skip to main content
Glama

Server Details

Build, publish and read scored forms and quizzes where the score picks the next screen.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Tool DescriptionsA

Average 4.5/5 across 10 of 10 tools scored. Lowest: 3.9/5.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct resource-action pair: forms, responses, analytics, and publishing state. There is no meaningful overlap between list/get/create/update/publish/unpublish for forms or list/get/export for responses.

Naming Consistency5/5

The only superficially similar pair, foxform_get_form vs foxform_get_form_analytics, differ clearly in output and purpose.

Tool Count5/5

The only superficially similar pair, foxform_get_form vs foxform_get_form_analytics, differ clearly in output and purpose.

Completeness4/5

The only superficially similar pair, foxform_get_form vs foxform_get_form_analytics, differ clearly in output and purpose.

Available Tools

10 tools
foxform_create_formCreate a FoxForm formAInspect

Create a new form, including per-screen conditional logic. Requires a WRITE-scoped API key.

Args:

  • title (string): form title (required)

  • description (string, optional)

  • theme (string, optional): one of midnight|ocean|sunset|forest|lavender|minimal (default sunset = Ember)

  • questions (array, optional): array of screen objects ({ id, type, title, required, variableName?, choices?, logic?, ... }); omit to start empty

  • thank_you_message (string, optional)

Returns: { form } with the created form (including its id and slug). The form starts as a draft — call foxform_publish_form to make it live.

Screen fields are validated: unknown fields are REJECTED instead of being stored and ignored, and branching rules are cross-checked against the screen ids in the same payload.

CONDITIONAL LOGIC (branching), per screen — stored in questions[].logic:

logic.conditionalNavigationV2 = { enabled: true, groups: [ // groups are OR-joined; FIRST matching group wins { id: "grp-1", conditions: [ // conditions inside a group are AND-joined { id: "cond-1", left: "{{quer_testar}}", operator: "equal_to", right: "Ainda não" } ], then: { type: "specific_screen", targetScreenId: "s-motivos" } } ] }

  • then.type: 'next_screen' | 'previous_screen' | 'specific_screen' (needs targetScreenId = another screen's id) | 'end_form'. Add then.url (+ optional openNewTab) to redirect to an external URL instead.

  • operator: 'equal_to' | 'not_equal_to' | 'greater_than' | 'greater_or_equal_than' | 'less_than' | 'less_or_equal_than' | 'contains'.

  • left/right are EXPRESSION strings: a literal ("10", "Ainda não"), a variable ("{{score}}", "{{minha_var}}" = the screen's variableName), or arithmetic ("calc({{peso}}/(({{altura}}/100)*({{altura}}/100)))").

  • Comparing an ANSWER: use left: "{{<variableName of the deciding screen>}}" and right = the option's label OR its value (both match).

  • {{score}} is the running sum of points on the options picked so far (choices[].points, images[].points) — that is how score-based branching works.

  • A navigation group with no conditions NEVER matches. enabled: false stores the rules but disables them.

  • Screen-level conditional display uses the same group shape: logic.display = { enabled: true, groups: [...], showAfterSeconds?: n } (then is ignored — THEN means "show").

  • Other logic keys: logic.autoAdvance = { enabled, delaySeconds? }, logic.navigationBehavior = { onButtonClick?, onAutoAdvance?, targetScreenId? }.

  • logic.conditionalNavigation (legacy, pre-DEVF-161) is still read and migrated on load — don't author new rules with it.

Unknown fields are REJECTED (they used to be stored and silently ignored): logic as an array, or rules/branching/conditions/goto/jump/nextScreen anywhere, are not read by any renderer.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoTheme key (default sunset/Ember)
titleYesForm title
questionsNoScreen objects; omit for an empty form. Conditional logic goes in each screen's `logic` (see the tool description).
descriptionNoOptional description
thank_you_messageNo
Behavior5/5

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

Beyond the annotations, the description discloses write-key requirements, draft creation, strict unknown-field rejection, cross-validation of branching rules, and legacy conditionalNavigation migration. None of this contradicts the annotations, and it gives the agent important behavioral expectations.

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

Conciseness4/5

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

The opening is front-loaded and the organization is clear (Args, Returns, conditional logic). It is long, but the conditional-logic complexity justifies most of the length; a small amount of redundancy around unknown-field rejection keeps it from a 5.

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

Completeness5/5

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

For a create tool with no output schema and a complex nested questions payload, the description is complete: it covers return shape, draft/publish flow, validation behavior, logic syntax, operators, score variables, and legacy migration. An agent has enough to construct a valid request.

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

Parameters5/5

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

Even though schema coverage is 80%, the description adds substantial meaning: theme enum values with a default, the screen object shape, and a full conditional-logic syntax with operators, expression forms, and examples. The schema only says questions are screen objects, so this detail is valuable.

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

Purpose5/5

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

The description opens with 'Create a new form' and specifies the distinguishing capability: per-screen conditional logic. This clearly separates it from foxform_update_form, foxform_publish_form, and the read/list siblings.

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

Usage Guidelines4/5

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

It states a WRITE-scoped API key is required and notes that the created form starts as a draft, directing the agent to call foxform_publish_form to make it live. It does not explicitly contrast with foxform_update_form, but 'new form' plus sibling names make the selection clear.

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

foxform_export_responsesExport responses as CSVA
Read-onlyIdempotent
Inspect

Export all responses for a form as CSV text (one row per response, columns = questions). Large exports are truncated — use foxform_list_responses with pagination for very large datasets.

Args:

  • form_id (string)

Returns: raw CSV text.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesForm ID
Behavior4/5

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

The annotations already cover read-only, idempotent, non-destructive behavior. The description adds valuable behavioral context beyond that: truncation of large exports, the CSV format, and the row/column structure of the returned text, 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.

Conciseness4/5

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

The description is compact and front-loaded with the core purpose and the important truncation caveat. The only minor redundancy is the Args block echoing what the schema already documents, but it does not meaningfully hurt readability.

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

Completeness5/5

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

For a single-parameter read-only export with no output schema, the description is complete: it states what is returned, the format, the high-level structure, and the truncation behavior with a fallback alternative. No critical information needed to invoke the tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with form_id fully described as a required string in the input schema. The description merely repeats 'form_id (string)' in the Args section and does not add new semantic meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description explicitly states the action: export all responses for a form as CSV text, and clarifies the output shape (one row per response, columns = questions). This clearly differentiates it from sibling tools like foxform_list_responses by framing the result as a single CSV export.

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

Usage Guidelines5/5

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

It explicitly names the alternative tool and the condition for choosing it: 'Large exports are truncated — use foxform_list_responses with pagination for very large datasets.' This tells the agent when not to use this tool and what to use instead.

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

foxform_get_formGet a FoxForm formA
Read-onlyIdempotent
Inspect

Fetch a single form by ID, including its full question list, per-screen conditional logic and settings.

Args:

  • form_id (string): the form's ID (from foxform_list_forms)

  • response_format ('markdown' | 'json')

Returns the full form object (id, title, description, slug, status, theme, questions[], thank_you_message, timestamps). Each screen in questions[] carries its own logic (branching / conditional display) and, for choice screens, choices[]/images[] with their points and value. The markdown output summarises every rule; use response_format 'json' to get the exact stored objects (that's the shape foxform_update_form expects back).

CONDITIONAL LOGIC (branching), per screen — stored in questions[].logic:

logic.conditionalNavigationV2 = { enabled: true, groups: [ // groups are OR-joined; FIRST matching group wins { id: "grp-1", conditions: [ // conditions inside a group are AND-joined { id: "cond-1", left: "{{quer_testar}}", operator: "equal_to", right: "Ainda não" } ], then: { type: "specific_screen", targetScreenId: "s-motivos" } } ] }

  • then.type: 'next_screen' | 'previous_screen' | 'specific_screen' (needs targetScreenId = another screen's id) | 'end_form'. Add then.url (+ optional openNewTab) to redirect to an external URL instead.

  • operator: 'equal_to' | 'not_equal_to' | 'greater_than' | 'greater_or_equal_than' | 'less_than' | 'less_or_equal_than' | 'contains'.

  • left/right are EXPRESSION strings: a literal ("10", "Ainda não"), a variable ("{{score}}", "{{minha_var}}" = the screen's variableName), or arithmetic ("calc({{peso}}/(({{altura}}/100)*({{altura}}/100)))").

  • Comparing an ANSWER: use left: "{{<variableName of the deciding screen>}}" and right = the option's label OR its value (both match).

  • {{score}} is the running sum of points on the options picked so far (choices[].points, images[].points) — that is how score-based branching works.

  • A navigation group with no conditions NEVER matches. enabled: false stores the rules but disables them.

  • Screen-level conditional display uses the same group shape: logic.display = { enabled: true, groups: [...], showAfterSeconds?: n } (then is ignored — THEN means "show").

  • Other logic keys: logic.autoAdvance = { enabled, delaySeconds? }, logic.navigationBehavior = { onButtonClick?, onAutoAdvance?, targetScreenId? }.

  • logic.conditionalNavigation (legacy, pre-DEVF-161) is still read and migrated on load — don't author new rules with it.

Unknown fields are REJECTED (they used to be stored and silently ignored): logic as an array, or rules/branching/conditions/goto/jump/nextScreen anywhere, are not read by any renderer.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesForm ID
response_formatNoOutput format: 'markdown' (human-readable) or 'json' (machine-readable)markdown
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, etc.), the description discloses substantial behavioral details: the full return object structure, conditional logic semantics, how score-based branching works, legacy conditionalNavigation migration, and the fact that unknown fields are rejected. It also explains edge cases like disabled groups and groups with no conditions. This is far more transparency than the annotations alone provide.

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

Conciseness4/5

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

The description is long, but it earns its length by covering complex conditional logic in detail, which is needed since there is no output schema. It is front-loaded with a clear summary, then parameters, return shape, and logic details. Some wording could be tightened, but the structured sections make it navigable and the depth is justified.

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

Completeness5/5

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

For a tool with no output schema, the description is exceptionally complete: it covers parameters, return object fields, per-screen logic structure, operators, expression syntax, score-based branching, display rules, legacy migration, and error behavior for unknown fields. An agent has everything needed to invoke the tool correctly and interpret its output.

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

Parameters5/5

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

Although the schema already covers both parameters 100%, the description adds crucial meaning: form_id's origin ('from foxform_list_forms') and the practical distinction between response formats ('markdown' summarizes every rule; 'json' provides exact stored objects that foxform_update_form expects). This helps an agent choose the correct format and understand the contract between get and update operations.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Fetch a single form by ID, including its full question list, per-screen conditional logic and settings.' This clearly distinguishes it from sibling tools like list_forms (which lists forms), get_form_analytics, and export_responses. The scope is unambiguous and immediately actionable.

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

Usage Guidelines4/5

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

The description provides clear usage context: form_id is specified to come from foxform_list_forms, implying a workflow where listing forms precedes fetching details. It also explains that response_format 'json' returns the exact shape that foxform_update_form expects, guiding when a particular format is useful. It does not explicitly state when not to use this tool or name alternative tools for different scenarios, but the guidance is sufficient.

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

foxform_get_form_analyticsGet form analyticsA
Read-onlyIdempotent
Inspect

Aggregated analytics for a form: overview KPIs (total responses, form views, response rate, avg response time), the responses-over-time timeline, and per-question stats.

Args:

  • form_id (string)

  • response_format ('markdown' | 'json')

Returns: { overview, timeline: [{date,count}], questions: [...], response_time_distribution?, views_timeline? }. Note: form_views / response_rate are null until the form has tracked views (forward-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesForm ID
response_formatNoOutput format: 'markdown' (human-readable) or 'json' (machine-readable)markdown
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive. The description adds meaningful beyond-annotations context: form_views and response_rate are null until views are tracked (forward-only), and optional fields response_time_distribution and views_timeline are disclosed. No contradiction.

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

Conciseness4/5

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

The description opens with a substantive purpose sentence, then provides a compact return shape and a useful edge-case note. The Args block is somewhat redundant with the schema but is short and scannable, so it does not significantly hurt structure.

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

Completeness4/5

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

For a read-only analytics tool with strong annotations and full schema coverage, the description gives the return shape and an important data-scarcity edge case. It could clarify what per-question stats contain or timeline granularity, but nothing essential is missing.

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

Parameters3/5

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

The input schema provides 100% coverage with descriptions for both parameters and a default for response_format. The description's Args block only restates form_id and response_format without adding extra meaning, so the schema carries the semantic burden.

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

Purpose5/5

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

States a specific verb ('get') and resource ('form analytics'), and enumerates the exact content: overview KPIs, responses-over-time timeline, and per-question stats. This clearly differentiates it from siblings like foxform_get_form or foxform_list_responses.

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

Usage Guidelines3/5

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

No explicit when-to-use or alternative routing is provided. The word 'Aggregated' and the KPI list imply use when summary analytics are needed rather than raw responses, but an agent is not told to prefer this over foxform_export_responses or foxform_list_responses in any scenario.

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

foxform_get_responseGet a single responseA
Read-onlyIdempotent
Inspect

Fetch one response by its ID (from foxform_list_responses).

Args:

  • response_id (string)

  • response_format ('markdown' | 'json')

Returns the full response object (id, form_id, answers, submitted_at, metadata).

ParametersJSON Schema
NameRequiredDescriptionDefault
response_idYesResponse ID
response_formatNoOutput format: 'markdown' (human-readable) or 'json' (machine-readable)markdown
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail by listing the returned full response object fields and the markdown/json format choice, which goes beyond the structured annotations.

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

Conciseness4/5

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

The description is compact and front-loaded with the core purpose, followed by a brief Args/Returns structure. The Args list largely duplicates schema content, but it is short and does not detract much from readability.

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

Completeness4/5

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

For a simple single-response fetch tool, the description covers the source of the ID, supported output formats, and the return object shape, which compensates for the lack of an output schema. It omits error behavior for missing IDs, but annotations and the tool's simplicity lower the burden.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description restates the two parameters and format options but does not materially add semantic detail beyond what the schema already provides, except for noting the response_id comes from foxform_list_responses.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Fetch one response by its ID (from foxform_list_responses).' It clearly identifies the tool as a single-item fetch operation and differentiates it from list/export tools by emphasizing exactly one response is returned.

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

Usage Guidelines4/5

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

The phrase 'from foxform_list_responses' gives clear context that a response_id should come from that sibling tool, and the focus on 'one response' implies this is for targeted retrieval rather than bulk listing or export. It does not explicitly name alternatives or exclusion conditions, so it stops short of a 5.

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

foxform_list_formsList FoxForm formsA
Read-onlyIdempotent
Inspect

List the forms owned by the authenticated FoxForm account, newest first.

Args:

  • page (number): 1-based page number (default 1)

  • limit (number): page size, 1-100 (default 20)

  • response_format ('markdown' | 'json'): output format (default markdown)

Returns: { total, page, limit, count, forms: [{ id, title, status, slug, questions_count, updated_at }] } Use this first to discover form IDs, then call foxform_get_form / foxform_get_form_analytics.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number
limitNoPage size (1-100)
response_formatNoOutput format: 'markdown' (human-readable) or 'json' (machine-readable)markdown
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful context beyond annotations: account ownership, newest-first ordering, and the exact return shape including total, page, limit, count, and form fields. Since there is no output schema, the return structure is valuable.

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

Conciseness5/5

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

The description is tightly structured: purpose sentence, parameter list, return shape, and usage guidance. Every section earns its place, and the most important information is front-loaded.

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

Completeness5/5

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

For a low-complexity list tool with no required parameters and no output schema, the description covers ownership, ordering, pagination defaults, response format options, return structure, and recommended follow-up tools. An agent has enough to call it correctly without further inference.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already fully documented with defaults, ranges, and enum values. The description restates the parameters but does not add meaningful semantic information beyond what the schema provides.

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

Purpose5/5

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

The description states a specific verb and resource: 'List the forms owned by the authenticated FoxForm account, newest first.' It explicitly positions itself as the discovery entry point for form IDs, distinguishing it from sibling getter and analytics tools.

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

Usage Guidelines5/5

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

The description provides explicit routing guidance: 'Use this first to discover form IDs, then call foxform_get_form / foxform_get_form_analytics.' This tells the agent when to use this tool and which siblings to invoke afterward.

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

foxform_list_responsesList form responsesA
Read-onlyIdempotent
Inspect

List submitted responses for a form, newest first.

Args:

  • form_id (string): the form's ID

  • page (number): 1-based page (default 1)

  • limit (number): page size, 1-100 (default 20)

  • response_format ('markdown' | 'json')

Returns: { total, page, limit, count, responses: [{ id, submitted_at, answers }] }. For aggregate metrics use foxform_get_form_analytics; for a full dump use foxform_export_responses.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
form_idYesForm ID
response_formatNoOutput format: 'markdown' (human-readable) or 'json' (machine-readable)markdown
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds behavioral details beyond annotations: 'newest first' ordering, return structure ({ total, page, limit, count, responses: [...] }), and pagination semantics. This is meaningful additional transparency without repeating annotation content.

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

Conciseness5/5

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

The description is compact and well-structured: a one-sentence purpose, a clear args block, a returns line, and a routing note. Every sentence adds value—no fluff or redundancy. The most critical scoping (newest first, alternatives) is front-loaded.

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

Completeness5/5

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

For a paginated list tool with no output schema, the description covers everything an agent needs: parameter meanings, default/constraint values, return shape, ordering, and alternatives. Combined with comprehensive annotations, nothing is missing for correct invocation.

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

Parameters5/5

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

Schema description coverage is 50% (only form_id and response_format have descriptions). The description fully compensates by explaining all four parameters: form_id (the form's ID), page (1-based, default 1), limit (page size 1-100, default 20), and response_format ('markdown'|'json'). It adds clarity beyond the schema, especially for page and limit which lack schema descriptions.

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

Purpose5/5

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

The description states a specific action ('List submitted responses'), a clear resource ('for a form'), and an ordering ('newest first'). It clearly distinguishes from siblings like foxform_get_response (single response), foxform_export_responses (full dump), and foxform_get_form_analytics (aggregate metrics) without ambiguity.

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

Usage Guidelines5/5

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

Explicitly names alternatives and when to use them: 'For aggregate metrics use foxform_get_form_analytics; for a full dump use foxform_export_responses.' This provides direct guidance on when not to use this tool, 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.

foxform_publish_formPublish a formA
Idempotent
Inspect

Publish a form so it's live at its public URL and can accept responses. Requires a WRITE-scoped API key.

Args:

  • form_id (string)

Returns: { form } with status 'published'. (May fail with a plan-limit error on Free accounts.)

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesForm ID
Behavior5/5

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

Beyond the annotations, the description discloses the authentication requirement, the expected return shape with status 'published', and a plausible failure mode (plan-limit error on Free accounts). This is useful operational context that annotations alone 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.

Conciseness5/5

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

The description is compact and front-loaded with the core purpose, followed by essential operational details in a clear order: auth, argument, return, failure. Every sentence contributes useful information without redundancy.

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

Completeness5/5

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

For a single-parameter tool with no output schema, the description is complete: it explains purpose, prerequisites, return shape, and a known error condition. There is nothing an agent needs to invoke this tool correctly that is missing.

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

Parameters3/5

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

Schema coverage is 100% and the 'form_id' parameter is already described simply as 'Form ID'. The description repeats the parameter name and type but adds no extra meaning beyond what the schema provides, which aligns with the baseline score of 3.

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

Purpose5/5

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

The description uses a specific verb ('publish'), names the resource ('form'), and states the concrete outcome: live at its public URL and accepting responses. This clearly distinguishes it from sibling foxform_unpublish_form and other form-management tools.

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

Usage Guidelines4/5

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

The description clearly implies when to use the tool: to make a form live and accept responses. It also adds a prerequisite (WRITE-scoped API key). It doesn't explicitly discuss exclusions or alternatives, but the sibling set makes the role obvious enough that this is a minor gap.

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

foxform_unpublish_formUnpublish a formA
Idempotent
Inspect

Unpublish a form (takes it offline; stops accepting responses). Requires a WRITE-scoped API key.

Args:

  • form_id (string)

Returns: a confirmation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
form_idYesForm ID
Behavior4/5

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

Annotations already indicate non-read-only, non-destructive, idempotent, and open-world behavior. The description adds valuable context beyond these: the exact effect (stops accepting responses) and the authentication requirement (WRITE scope). It does not contradict annotations and discloses the state-change consequence clearly.

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

Conciseness5/5

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

The description is compact and front-loaded, with the action and consequence in the first sentence. The Args and Returns sections are clearly separated, and every sentence earns its place. No fluff or redundancy.

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

Completeness5/5

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

For a single-parameter tool with no output schema, the description covers all essential aspects: the purpose, the effect on the resource, the auth requirement, and the return format. There are no gaps that would prevent an agent from invoking it correctly.

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

Parameters3/5

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

Schema coverage is 100% (form_id is described as 'Form ID'), so the schema already documents the parameter. The description only repeats the parameter name and type without adding further semantic detail, such as format or examples. This meets the baseline for high schema coverage but adds no extra value.

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

Purpose5/5

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

The description states a clear verb-object pair ('Unpublish a form') and elaborates the effect ('takes it offline; stops accepting responses'). This unambiguously distinguishes it from siblings like foxform_publish_form and foxform_update_form, making the tool's purpose immediately obvious.

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

Usage Guidelines4/5

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

The description provides a concrete prerequisite ('Requires a WRITE-scoped API key') which is a usage guideline. It implicitly conveys when to use this tool (when a form must go offline), though it does not explicitly list alternative tools or when to avoid them. The requirement is actionable, but lacks an explicit 'when not to use' statement.

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

foxform_update_formUpdate a FoxForm formAInspect

Update an existing form's fields, including each screen's conditional logic (branching). Requires a WRITE-scoped API key. Only the fields you pass are changed.

Args:

  • form_id (string): the form to update (required)

  • title (string, optional)

  • description (string, optional)

  • theme (string, optional)

  • questions (array, optional): replaces the FULL screen list — there is no per-screen patch. To add logic to one screen: call foxform_get_form with response_format 'json', edit that screen's logic, and send the whole array back.

  • thank_you_message (string, optional)

Returns: { form } with the updated form.

Screen fields are validated: unknown fields are REJECTED instead of being stored and ignored (the API accepts arbitrary keys but no renderer reads them), then.targetScreenId must be the id of a screen in the same payload, and {{variables}} that no screen exposes come back as warnings.

CONDITIONAL LOGIC (branching), per screen — stored in questions[].logic:

logic.conditionalNavigationV2 = { enabled: true, groups: [ // groups are OR-joined; FIRST matching group wins { id: "grp-1", conditions: [ // conditions inside a group are AND-joined { id: "cond-1", left: "{{quer_testar}}", operator: "equal_to", right: "Ainda não" } ], then: { type: "specific_screen", targetScreenId: "s-motivos" } } ] }

  • then.type: 'next_screen' | 'previous_screen' | 'specific_screen' (needs targetScreenId = another screen's id) | 'end_form'. Add then.url (+ optional openNewTab) to redirect to an external URL instead.

  • operator: 'equal_to' | 'not_equal_to' | 'greater_than' | 'greater_or_equal_than' | 'less_than' | 'less_or_equal_than' | 'contains'.

  • left/right are EXPRESSION strings: a literal ("10", "Ainda não"), a variable ("{{score}}", "{{minha_var}}" = the screen's variableName), or arithmetic ("calc({{peso}}/(({{altura}}/100)*({{altura}}/100)))").

  • Comparing an ANSWER: use left: "{{<variableName of the deciding screen>}}" and right = the option's label OR its value (both match).

  • {{score}} is the running sum of points on the options picked so far (choices[].points, images[].points) — that is how score-based branching works.

  • A navigation group with no conditions NEVER matches. enabled: false stores the rules but disables them.

  • Screen-level conditional display uses the same group shape: logic.display = { enabled: true, groups: [...], showAfterSeconds?: n } (then is ignored — THEN means "show").

  • Other logic keys: logic.autoAdvance = { enabled, delaySeconds? }, logic.navigationBehavior = { onButtonClick?, onAutoAdvance?, targetScreenId? }.

  • logic.conditionalNavigation (legacy, pre-DEVF-161) is still read and migrated on load — don't author new rules with it.

Unknown fields are REJECTED (they used to be stored and silently ignored): logic as an array, or rules/branching/conditions/goto/jump/nextScreen anywhere, are not read by any renderer.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNo
titleNo
form_idYesForm ID
questionsNoReplaces the full screen list. Conditional logic goes in each screen's `logic` (see the tool description).
descriptionNo
thank_you_messageNo
Behavior5/5

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

The description goes well beyond the annotations: it requires a WRITE-scoped API key, says only passed fields are changed, states that questions replaces the entire screen list, warns that unknown fields are rejected, explains targetScreenId validation, mentions warnings for unresolved variables, and documents legacy migration behavior. This is rich, non-obvious behavioral context.

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

Conciseness4/5

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

The description is structured with Args, Returns, and a clear conditional-logic reference with examples and bullet lists. It is quite long and repeats the 'Unknown fields are REJECTED' warning twice, so it is not maximally concise, but the length is mostly justified by the complexity of branching rules.

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

Completeness5/5

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

For a complex mutation tool with no output schema, the description is remarkably complete: it covers authentication, patch semantics, validation rules, conditional-logic operators, expression syntax, score-based branching, edge cases like empty condition groups, and legacy migration. The minimal 'Returns: { form }' is acceptable because the return value mirrors the updated form and the focus is on correct invocation.

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

Parameters4/5

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

Schema coverage is low at 33%, so the description carries the burden. It lists all six arguments, marks form_id as required, and explains that questions replaces the full screen list with no per-screen patch. However, theme values and the exact shape of question items beyond the logic payload are still underspecified, so it does not fully compensate for the schema gaps.

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

Purpose5/5

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

The description states a specific action and resource: 'Update an existing form's fields, including each screen's conditional logic (branching).' It clearly separates this from create/get/publish by emphasizing 'existing form' and 'fields you pass are changed.' This lets an agent distinguish it from 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.

Usage Guidelines4/5

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

The description implies when to use it: when modifying an existing form, and it even prescribes a workflow for editing one screen: call foxform_get_form, edit the logic, and send the whole array back. It does not explicitly name alternatives like foxform_create_form or say 'do not use for new forms,' but the update semantics are clear enough to avoid misrouting.

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

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources