Skip to main content
Glama

list_forms

Read-only

List the form pages on the Checkout Page account, newest first, each with its full configuration, fields and files. Archived forms are left out unless you filter by status. Read-only; this is how to find a form id for get_form, update_form and list_submissions. Checkout pages and events are separate page types: use list_checkout_pages and list_events.

Input Schema

NameRequiredDescriptionDefault
limitNoNumber of records per page (integer, max 100, default 10).
searchNoCase-insensitive contains match against the form's internal name and title. Searching 'waitlist' matches a form titled 'Join the waitlist'. There is no filter by field, file or slug: page through and inspect those fields instead.
statusNoFilter by publication status: `published`, `draft` or `archived`. Only one status per call. Without it, published and draft pages are returned and archived pages are excluded, so pass `archived` explicitly to see archived pages.
testmodeNoSet to true to return only pages in test mode, or false for only pages not in test mode.
ending_beforeNoCursor-based pagination. Pass a record `id` to return results before it. Cannot be used with `starting_after`.
starting_afterNoCursor-based pagination. Pass a record `id` to return results after it. Cannot be used with `ending_before`.

Output Schema

NameRequiredDescriptionDefault
dataYes
totalYesTotal number of records matching the query across all pages.
has_moreYesWhether more records exist beyond the current page.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / $defs / FormLayoutDivider / properties / disabled
      Added value: +{
      +  "description": "`true` keeps the divider in the layout but hides it from customers. Defaults to `false`.",
      +  "type": "boolean"
      +}
    • addedOutput schema / $defs / FormLayoutHeading / properties / disabled
      Added value: +{
      +  "description": "`true` keeps the heading in the layout but hides it from customers. Defaults to `false`.",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changed
    • changedOutput schema / properties / data / items / properties / confirmationCheckoutMessage / description
      Previous value: -"Confirmation page message."New value: +"Confirmation page message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
    • changedOutput schema / properties / data / items / properties / confirmationEmailMessage / description
      Previous value: -"Custom confirmation email message."New value: +"Custom confirmation email message. Variables read as `{{id}}` and conditional paragraphs as `<if variable=\"...\" operator=\"...\" value=\"...\">` blocks; send them back unchanged to keep them."
  3. Changed1 schema field changed
    • changedOutput schema / $defs / Field / properties / reference / description
      Previous value: -"External reference ID for mapping this field in downstream systems."New value: +"Stable key that exports, Zapier, Google Sheets and webhooks use for this field's answers. Not updated when the label changes."
  4. Changed8 schema fields changed
    • changedOutput schema / $defs / Field / properties / order / description
      Previous value: -"Display order of the field within the form."New value: +"Position of the field among the page's fields, from 0. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead."
    • addedOutput schema / $defs / FormLayoutDiscountCode
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Where the discount code box sits. This item only places the box: the box shows while the page has `showCouponCodeField` on. Checkout pages and events only.",
      +  "properties": {
      +    "type": {
      +      "const": "discount-code",
      +      "description": "Always `discount-code`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutDivider
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A line that separates parts of the form.",
      +  "properties": {
      +    "id": {
      +      "description": "The divider's id, chosen by you: 1 to 64 characters, unique in the layout.",
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "type": {
      +      "const": "divider",
      +      "description": "Always `divider`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "id"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutField
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A field on the page, shown where it sits in the layout.",
      +  "properties": {
      +    "fieldId": {
      +      "description": "The `id` of a field in the page's `fields`.",
      +      "pattern": "^[0-9a-fA-F]{24}$",
      +      "type": "string"
      +    },
      +    "type": {
      +      "const": "field",
      +      "description": "Always `field`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "fieldId"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutGroup
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Items shown side by side in columns.",
      +  "properties": {
      +    "columns": {
      +      "description": "How many items sit side by side, 1 to 4. On phones the group stacks by default.",
      +      "maximum": 4,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "id": {
      +      "description": "The group's id, chosen by you: 1 to 64 characters, unique in the layout.",
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "items": {
      +      "description": "What the group holds, filled row by row: fields, headings, dividers and the discount code. Groups never nest.",
      +      "items": {
      +        "oneOf": [
      +          {
      +            "$ref": "#/$defs/FormLayoutField"
      +          },
      +          {
      +            "$ref": "#/$defs/FormLayoutHeading"
      +          },
      +          {
      +            "$ref": "#/$defs/FormLayoutDivider"
      +          },
      +          {
      +            "$ref": "#/$defs/FormLayoutDiscountCode"
      +          }
      +        ]
      +      },
      +      "maxItems": 200,
      +      "type": "array"
      +    },
      +    "name": {
      +      "description": "A name for the group, seen only in the dashboard. Up to 100 characters.",
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    "type": {
      +      "const": "group",
      +      "description": "Always `group`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "id",
      +    "columns",
      +    "items"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutHeading
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A heading or subheading shown above the items after it.",
      +  "properties": {
      +    "id": {
      +      "description": "The heading's id, chosen by you: 1 to 64 characters, unique in the layout.",
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "level": {
      +      "description": "`heading` for a section title, `subheading` for a smaller one.",
      +      "enum": [
      +        "heading",
      +        "subheading"
      +      ],
      +      "type": "string"
      +    },
      +    "text": {
      +      "description": "The text shown, up to 200 characters.",
      +      "maxLength": 200,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "type": {
      +      "const": "heading",
      +      "description": "Always `heading`.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "type",
      +    "id",
      +    "text",
      +    "level"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / $defs / FormLayoutItem
      Added value: +{
      +  "description": "More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
      +  "oneOf": [
      +    {
      +      "$ref": "#/$defs/FormLayoutField"
      +    },
      +    {
      +      "$ref": "#/$defs/FormLayoutHeading"
      +    },
      +    {
      +      "$ref": "#/$defs/FormLayoutDivider"
      +    },
      +    {
      +      "$ref": "#/$defs/FormLayoutDiscountCode"
      +    },
      +    {
      +      "$ref": "#/$defs/FormLayoutGroup"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / data / items / properties / formLayout
      Added value: +{
      +  "description": "How the page's form is arranged, top to bottom: fields, headings, dividers, groups of fields shown side by side in columns, and where the discount code box sits. Always returned, even for a page that was never arranged: every field on the page is listed, and `fieldId` matches the `id` of an entry in `fields`. A `discount-code` item only places the box, which shows while `showCouponCodeField` is on. A placement you saved is returned whether the box is on or off; when none was saved and the box is on, the item is at the end, where the box shows. Forms never have one. Each item is one of: `field` (`fieldId`), `heading` (`id`, `text`, `level` `heading` or `subheading`), `divider` (`id`), `discount-code` (no other properties) and `group` (`id`, optional `name`, `columns` 1 to 4, and `items` holding fields, headings, dividers or the discount code; groups never nest). You choose the `id` of each heading, divider and group: 1 to 64 characters, unique in the layout. `formLayout` on the page decides the form's order. Each field's `order` is its position among the page's fields and follows the layout: saving a layout (in the dashboard or through the API) rewrites every field's `order`. On a page that has never saved a layout, setting `order` moves the field; once a layout is saved, move fields with `formLayout` instead. More item types may be added later. When reading a layout, skip any item type you do not recognise. When updating, send every item back as you received it, including those.",
      +  "items": {
      +    "$ref": "#/$defs/FormLayoutItem"
      +  },
      +  "type": "array"
      +}
  5. Changed1 schema field changed
    • addedOutput schema / $defs / Field / properties / disabled
      Added value: +{
      +  "description": "Whether this field is switched off. A disabled field keeps its settings but is removed from the page entirely.",
      +  "example": false,
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
  6. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to argue safety, and it correctly adds ordering ('newest first'), default exclusion of archived forms, and fullness of returned payloads. It stops short of covering page-size defaults or cursor iteration behavior, but the schema carries those.

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 dense sentences, front-loaded with what the tool returns, then the archived caveat, then the sibling routing. Nothing is repeated and nothing is wasted.

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-value detail is not required, yet the description still signals that each record carries full configuration, fields and files. Combined with sibling routing and the archived default, an agent has everything needed to call it correctly on the first attempt.

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 all six parameters are already fully documented, including the status default and the ending_before/starting_after mutual exclusion. The description only restates the archived/status rule already present in the schema, adding no syntax or semantics beyond it.

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 ('List the form pages on the Checkout Page account') plus scope details (newest first, full configuration, fields and files). It also explicitly separates itself from list_checkout_pages and list_events, so an agent can distinguish it from the nearest siblings without reading any schema.

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?

Gives concrete when-to-use routing: 'this is how to find a form id for get_form, update_form and list_submissions', and names the alternative tools for the other page types. It also warns that archived forms are hidden unless status is passed, which is a usage condition, not just a field description.

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