Skip to main content
Glama

Create form template item

create_form_template_item

Add one question (item) to a form template. Build a form by calling this once per question in order, or use bulk_create on form-template-items. Requires form_template_items:write scope.

Input Schema

NameRequiredDescriptionDefault
labelYesQuestion text / prompt shown to the user
configNoPer-type settings. number: { min, max, unit, integer, decimals }. text: { multiline, maxLength, placeholder }. multi_select: { minSelections, maxSelections }. photo: { minPhotos, maxPhotos }. Any single_select, multi_select, checkbox, number or text item can also carry followUp: { op, value, priority } - when the item's own answer matches (same operators as visible_when; priority LOW/MEDIUM/HIGH/URGENT), the technician is offered a follow-up work order, e.g. { op: "equals", value: "fail", priority: "HIGH" }.
optionsNoREQUIRED for single_select/multi_select: at least 2 choices as { value, label } with unique values. value is a machine slug (e.g. "fail"), label is shown to the user (e.g. "Fail"). Omit for other types.
item_keyNoOptional stable key, unique within the template. OMIT IT and the server derives one from the label (recommended). Only set it when a later item’s visible_when must reference this one - then use a short slug like "compressor_status".
requiredNoWhether an answer is required to complete the form (default false)
help_textNoOptional hint shown under the label
item_typeYesPick by the answer you want: single_select = exactly one choice (Pass/Fail, Yes/No, Yes/No/N-A, or custom - supply options); multi_select = pick several (supply options); number = a numeric reading/count (use config.min/max/unit/integer); checkbox = a single done/not-done tick; text = free comment (config.multiline for long text); photo = photo evidence (config.maxPhotos); team_members = who took part (organization members picked from a list, plus named guests), e.g. meeting attendees; signature = a drawn sign-off, cleared automatically when any other answer changes, so place it last; section = a non-answerable heading that groups the questions under it.
sort_orderYesDisplay order within the template (0-based; questions render in this order)
template_idYesForm template ID - resolve via list_form_templates
visible_whenNoOptional conditional visibility { itemKey, op, value }. itemKey must reference an EARLIER item’s key (set that item’s item_key explicitly). Operators by referenced type - single_select/checkbox: equals, not_equals, in, not_in, is_answered, is_blank; number: gt, lt, gte, lte, equals, not_equals, is_answered, is_blank; text: is_answered, is_blank, equals, not_equals; multi_select: in, not_in, is_answered, is_blank. e.g. show a "Details" text item only when item "compressor_status" equals "fail".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / config / description
      Previous value: -"Per-type settings. number: { min, max, unit, integer, decimals }. text: { multiline, maxLength, placeholder }. multi_select: { minSelections, maxSelections }. photo: { minPhotos, maxPhotos }."New value: +"Per-type settings. number: { min, max, unit, integer, decimals }. text: { multiline, maxLength, placeholder }. multi_select: { minSelections, maxSelections }. photo: { minPhotos, maxPhotos }. Any single_select, multi_select, checkbox, number or text item can also carry followUp: { op, value, priority } - when the item's own answer matches (same operators as visible_when; priority LOW/MEDIUM/HIGH/URGENT), the technician is offered a follow-up work order, e.g. { op: \"equals\", value: \"fail\", priority: \"HIGH\" }."
    • changedInput schema / properties / item_type / description
      Previous value: -"Pick by the answer you want: single_select = exactly one choice (Pass/Fail, Yes/No, Yes/No/N-A, or custom - supply options); multi_select = pick several (supply options); number = a numeric reading/count (use config.min/max/unit/integer); checkbox = a single done/not-done tick; text = free comment (config.multiline for long text); photo = photo evidence (config.maxPhotos); section = a non-answerable heading that groups the questions under it."New value: +"Pick by the answer you want: single_select = exactly one choice (Pass/Fail, Yes/No, Yes/No/N-A, or custom - supply options); multi_select = pick several (supply options); number = a numeric reading/count (use config.min/max/unit/integer); checkbox = a single done/not-done tick; text = free comment (config.multiline for long text); photo = photo evidence (config.maxPhotos); team_members = who took part (organization members picked from a list, plus named guests), e.g. meeting attendees; signature = a drawn sign-off, cleared automatically when any other answer changes, so place it last; section = a non-answerable heading that groups the questions under it."
    • changedInput schema / properties / item_type / enum
      Previous value: -[
      -  "section",
      -  "checkbox",
      -  "single_select",
      -  "multi_select",
      -  "number",
      -  "text",
      -  "photo"
      -]New value: +[
      +  "section",
      +  "checkbox",
      +  "single_select",
      +  "multi_select",
      +  "number",
      +  "text",
      +  "photo",
      +  "team_members",
      +  "signature"
      +]
  2. Changed7 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / config / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / options / items / additionalProperties
      Removed value: -false
    • addedInput schema / properties / sort_order / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / template_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • changedInput schema / properties / visible_when / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "itemKey": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "type": "string"
      -      },
      -      "value": {}
      -    },
      -    "required": [
      -      "itemKey",
      -      "op"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "itemKey": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "type": "string"
      +      },
      +      "value": {}
      +    },
      +    "required": [
      +      "itemKey",
      +      "op"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Changed7 schema fields changed
    • changedInput schema / $schema
      Previous value: -"https://json-schema.org/draft/2020-12/schema"New value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / config / propertyNames
      Removed value: -{
      -  "type": "string"
      -}
    • addedInput schema / properties / options / items / additionalProperties
      Added value: +false
    • removedInput schema / properties / sort_order / maximum
      Removed value: -9007199254740991
    • removedInput schema / properties / template_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • changedInput schema / properties / visible_when / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "itemKey": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "type": "string"
      -      },
      -      "value": {}
      -    },
      -    "required": [
      -      "itemKey",
      -      "op"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "itemKey": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "type": "string"
      +      },
      +      "value": {}
      +    },
      +    "required": [
      +      "itemKey",
      +      "op"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  4. Changed7 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / config / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / options / items / additionalProperties
      Removed value: -false
    • addedInput schema / properties / sort_order / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / template_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
    • changedInput schema / properties / visible_when / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "itemKey": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "type": "string"
      -      },
      -      "value": {}
      -    },
      -    "required": [
      -      "itemKey",
      -      "op"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "itemKey": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "type": "string"
      +      },
      +      "value": {}
      +    },
      +    "required": [
      +      "itemKey",
      +      "op"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  5. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=false, and destructive=false. The description adds the write-scope requirement ('form_template_items:write') and the ordering/one-call-per-question semantics, which is real context beyond the structured hints. It does not disclose failure behavior (e.g. duplicate item_key) or what the response returns.

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?

Three short sentences, purpose front-loaded, alternative and prerequisite following. 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.

Completeness4/5

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

For a 10-parameter nested create tool with no output schema, the description covers ordering, the bulk alternative, and the required scope, while the schema covers field-level detail. It omits the return shape (e.g. the created item and its derived item_key needed for later visible_when references), which is a minor gap.

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% and the schema is unusually rich (enum item_type guidance, config per-type settings, visible_when operator matrix), so the schema carries the semantic load. The description only echoes ordering via 'in order'; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Add one question (item) to a form template') with a clear unit of work. It is easily distinguished from update_form_template_item, create_form_template, and the bulk variant.

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

Usage Guidelines4/5

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

Explicitly routes the agent: 'Build a form by calling this once per question in order, or use bulk_create on form-template-items.' That names the alternative and the condition selecting it. It stops short of telling the agent when NOT to use it (e.g. editing an existing item via update_form_template_item).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources