Skip to main content
Glama

Create Form

form.create

Add a form (a peek of kind form) to an existing sheet: each submission becomes a row. fields are field names or codes in order, or { field, required, label, help, placeholder, width } (width 25, 50, 75 or 100 percent of the row in the classic layout). layout: classic (default; fields side by side by width) or steps (one question at a time). Optional submitLabel, description above the questions and successMessage after sending. Fields must already exist on the sheet (add them with sheet.add_attribute first). Theme, accent and header: peek.update_options. Publishing it and its public link stay in the form builder.

Input Schema

NameRequiredDescriptionDefault
iconNo
nameYes
fieldsYesThe questions, in order; each submission becomes a row.
layoutNoHow the questions are laid out. Default classic.
sheetIdYes
descriptionNoText shown above the questions.
submitLabelNoThe Submit button's text, in the form's language. Default: Submit in the visitor's language.
successMessageNoThank-you message shown after the form is sent (plain text; answer tokens, answers, button and Submit another are set in Form Studio).

Output Schema

NameRequiredDescriptionDefault
nameYes
fieldsYesThe field names the form asks for, in order
formIdYesThe new form's id, for form.update and form.delete
sheetIdYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / fields / items / anyOf
      Previous value: -[
      -  {
      -    "description": "A field name or code",
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  {
      -    "properties": {
      -      "field": {
      -        "description": "A field name or code",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "label": {
      -        "description": "The question shown on the form. Default: the field name.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "required": {
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "field"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "A field name or code",
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "properties": {
      +      "field": {
      +        "description": "A field name or code",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "help": {
      +        "description": "Help text shown under the question.",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "The question shown on the form. Default: the field name.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "placeholder": {
      +        "description": "Hint shown inside the empty answer box.",
      +        "maxLength": 120,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "required": {
      +        "type": "boolean"
      +      },
      +      "width": {
      +        "anyOf": [
      +          {
      +            "const": 25,
      +            "type": "number"
      +          },
      +          {
      +            "const": 50,
      +            "type": "number"
      +          },
      +          {
      +            "const": 75,
      +            "type": "number"
      +          },
      +          {
      +            "const": 100,
      +            "type": "number"
      +          }
      +        ],
      +        "description": "Share of the row in the classic layout, in percent; steps ignores it. Default 100."
      +      }
      +    },
      +    "required": [
      +      "field"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedInput schema / properties / layout
      Added value: +{
      +  "description": "How the questions are laid out. Default classic.",
      +  "enum": [
      +    "classic",
      +    "steps"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / submitLabel
      Added value: +{
      +  "description": "The Submit button's text, in the form's language. Default: Submit in the visitor's language.",
      +  "maxLength": 40,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / properties / successMessage / description
      Previous value: -"Shown after the form is sent."New value: +"Thank-you message shown after the form is sent (plain text; answer tokens, answers, button and Submit another are set in Form Studio)."
  2. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare non-readonly, non-idempotent, non-destructive and closed-world, and the description adds the meaningful behavioral facts: submissions map to rows, fields must pre-exist, and publishing/link management are out of scope. It does not say what happens if a named field is missing or whether names must be unique, which are the likely failure modes.

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?

Front-loaded with the core action and data model, then prerequisites, then scope boundaries. Dense but every clause carries information; the fields parenthetical is long yet necessary given the union type.

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?

An output schema exists so return values need no explanation, and the description covers creation scope, prerequisites, layout behavior and out-of-scope operations. An agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 63%, and the description compensates well: it explains that fields can be strings or objects, that order matters, that width is a percentage of the row and is ignored in steps layout, and that classic places fields side by side. submitLabel, description and successMessage are given plain-language semantics (before vs. after submission).

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 a form (a peek of kind form) to an existing sheet') and adds the key data model fact that each submission becomes a row. This clearly separates it from form.update, peek.update_options and the form builder.

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?

Gives a hard prerequisite ('Fields must already exist on the sheet (add them with sheet.add_attribute first)') and routes adjacent concerns to other tools (theme/accent/header to peek.update_options, publishing and public link to the form builder). It does not explicitly say when to use form.update instead for modifying an existing form, but the creation scope is clear.

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