Skip to main content
Glama

Define a CRM model

crm_define_model
Destructive

Saves this account's lists and columns. It can add columns, rename column keys, change a column kind when every stored value converts, and hide columns. Hidden columns stay stored. It writes a schema version and an audit row. It does not delete stored values.

Input Schema

NameRequiredDescriptionDefault
nameNoList name.
specNo
listsNoAlias of models.
modelNoList definition, or business_name plus models. Not the list's name.
typesNoKinds for this list. Stored as a type field.
viewsNoSaved filters, sort, columns, and display. display is table, cards, or board.
fieldsNoFields on this list.
modelsNoLists to save. Alternative to spec.models.
statusNoStatus choices when the list is trackable.
actionsNoDeclarative actions. An action cannot run code.
confirmYesMust be true. A call without confirm true does not save.
detailsNoEach value becomes its own text field.
relatedNoSaved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.
renamesNoField renames. A field may also set renamed_from.
list_rowNoHow one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.
statusesNoAlias of status.
triggersNoRun an action or schedule a reminder when a record is created, updated, or a field changes.
remindersNoReminders on email, WhatsApp, call, or SMS.
trackableNoWhen true, the list has a status field.
schedulingNo
descriptionNoWhat this list is.
receptionistNo
business_nameNoBusiness name. Stored when it is a non-empty string.
title_templateNoRecord title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • addedInput schema / properties / lists / items / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / model / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / model / properties / spec / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / models / items / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / spec / properties / related
      Added value: +{
      +  "description": "Saved label, order, and hidden for links to lists that ref this list. Omit it and every incoming ref is a link. An entry that is not a ref to this list is refused.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "description": "Ref field on that list. It must point at this list.",
      +        "type": "string"
      +      },
      +      "hidden": {
      +        "description": "When true, the link is not shown. The ref stays.",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Words for the link. Omit to use the list name.",
      +        "type": "string"
      +      },
      +      "model": {
      +        "description": "List that stores a ref to this list.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "model",
      +      "field"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed50 schema fields changed
    • addedInput schema / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / lists / items / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / lists / items / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / lists / items / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / lists / items / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / lists / items / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / model / properties / lists / items / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / model / properties / lists / items / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / model / properties / models / items / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / model / properties / models / items / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / model / properties / spec / properties / models / items / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / model / properties / spec / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / model / properties / spec / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / model / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / model / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / models / items / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / models / items / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / models / items / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / models / items / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / models / items / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / fields / items / properties / label
      Added value: +{
      +  "description": "Words shown for this field. A relation uses the other list's singular name when this is omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / list_row
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How one row looks, including on a phone. title, subtitle, at most two details, and a coloured choice badge. Omit it and the row follows the title and the default view. This is the only row-field setting.",
      +  "properties": {
      +    "badge": {
      +      "description": "A choice field, such as status. The row shows that choice in colour.",
      +      "type": "string"
      +    },
      +    "details": {
      +      "description": "At most two fields under the subtitle. This replaces a separate mobile-row field list.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "maxItems": 2,
      +      "type": "array"
      +    },
      +    "subtitle": {
      +      "description": "One field shown under the title.",
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "Row title. A field name, or a template such as {customer} · {starts_at:date}.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / spec / properties / models / items / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / spec / properties / models / items / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / spec / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / spec / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / title_template
      Added value: +{
      +  "description": "Record title. Example: {customer} · {service} · {starts_at:date}. Omit and a title is chosen from the fields.",
      +  "type": "string"
      +}
    • changedInput schema / properties / views / description
      Previous value: -"Saved filters, sort, and columns. The list view reads them."New value: +"Saved filters, sort, columns, and display. display is table, cards, or board."
    • addedInput schema / properties / views / items / properties / display
      Added value: +{
      +  "description": "table, cards, or board. A board needs group_by. Calendar is not available yet.",
      +  "enum": [
      +    "table",
      +    "cards",
      +    "board"
      +  ],
      +  "type": "string"
      +}
  3. Changed20 schema fields changed
    • addedInput schema / properties / lists / items / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / lists / items / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / models / items / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / models / items / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / scheduling / properties / confirmed_status
      Added value: +{
      +  "description": "Status written when self_booking is confirm. Defaults to confirmed or scheduled.",
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / scheduling / properties / self_booking
      Added value: +{
      +  "description": "What a caller booking does on this list. confirm saves it immediately. hold keeps it for the owner to approve.",
      +  "enum": [
      +    "confirm",
      +    "hold"
      +  ],
      +  "type": "string"
      +}
  4. Changed50 schema fields changed
    • addedInput schema / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / lists / items / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / lists / items / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / lists / items / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / lists / items / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / lists / items / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / lists / items / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / models / items / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / model / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / models / items / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / model / properties / spec / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / model / properties / spec / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / spec / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / model / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / models / items / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / models / items / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / models / items / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / models / items / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / models / items / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / actions / items / properties / adjust
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "by": {
      +      "description": "Amount to add, such as 12.50. A negative amount spends. Pass this or by_field."
      +    },
      +    "by_field": {
      +      "description": "Field that holds the amount to add. Pass this or by.",
      +      "type": "string"
      +    },
      +    "field": {
      +      "description": "Money field to add the amount to.",
      +      "type": "string"
      +    },
      +    "floor": {
      +      "description": "Minimum the field may reach, such as 0. The action fails with insufficient_balance when the result would be lower."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / models / items / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / reminders / items / properties / charge
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "Standing top-up. amount_field or amount, currency_field or currency, and action. A saved card is charged and the action runs. Otherwise a payment link is sent.",
      +  "type": "object"
      +}
    • addedInput schema / properties / spec / properties / reminders / items / properties / on_shortfall
      Added value: +{
      +  "description": "When true, a balance that would pass the floor sends this reminder with the open payment link.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / spec / properties / reminders / items / properties / recurrence
      Added value: +{
      +  "description": "When monthly or P1M, a sent reminder moves the source field forward one month and schedules the next one.",
      +  "enum": [
      +    "monthly",
      +    "P1M"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / spec / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
    • addedInput schema / properties / views / items / properties / group_by
      Added value: +{
      +  "description": "A column with choices. The page shows this view as a board, one column for each choice.",
      +  "type": "string"
      +}
  5. Added

TDQS

A3.7/5.0
Behavior4/5

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

The description adds meaningful behavior beyond annotations: it discloses that hidden columns stay stored, kind changes only occur when every stored value converts, and the tool writes a schema version and audit row. It also clarifies that stored values are not deleted, which usefully nuances the destructiveHint annotation rather than contradicting it.

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 front-loaded and compact, with short sentences that each convey a relevant behavior. The only minor redundancy is between 'Hidden columns stay stored' and 'It does not delete stored values,' but both serve to clarify safety.

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 complex 24-parameter schema tool with annotations and no output schema, the description covers the core mutation behavior and safety boundaries well. It is less complete on the various input shapes and on the wider list features present in the schema, but the high schema coverage fills those gaps.

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 high at 88%, so the input schema already carries most parameter meaning. The description mentions lists and columns conceptually but does not explain the spec/models/lists/model alternatives or the required confirm flag, so it adds little beyond the structured schema.

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

Purpose4/5

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

The description clearly states a specific verb and resource: it saves this account's lists and columns, and it enumerates schema operations such as adding columns, renaming keys, changing kinds, and hiding columns. It is distinguishable from destructive alternatives like crm_delete_model, though it does not explicitly name or compare siblings.

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?

Usage is implied by the operations listed, but there is no explicit when-to-use guidance or comparison to alternatives such as crm_delete_model, crm_rollback_schema, or crm_save_view. An agent can infer it is for schema definition, but routing among schema-related siblings is left to the caller.

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.