Skip to main content
Glama

Update Website CMS

update_website_cms
Idempotent

Changes how approved website posts reach a website CMS: pass provider (from get_website_cms) when more than one CMS is connected, then per channel (blog, faq, competitor_page) which collection and fields they fill, mediaDestination (where new media goes), or a switch back to draft mode. Pass rediscover to read the CMS's collections again first. A mapping is checked against the discovered fields before it is saved; it cannot target the collection the API key signs in with, or a media collection. A channel publishes to one CMS. Saving reads from the customer's CMS and re-checks the connection. Admins only. Switching to live mode, the API key and the site URL are changed in the Mark app only. Related: get_website_cms, sync_connections (test, or retry a failed publish).

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "update_website_cms"
  }
}

Input Schema

NameRequiredDescriptionDefault
mappingNoPer channel: a full channel mapping to set, or null to stop publishing that channel. Channels not named keep their mapping. A channel publishes to one CMS.
providerNoWebsite CMS provider from get_website_cms, for example payload. Required when more than one website CMS is connected.
rediscoverNoRead the CMS's collections and fields again first.
publishModeNoSet to draft so Mark saves drafts and the customer publishes in the CMS. Switching to live is done in the Mark app.
mediaDestinationNoNew media goes to: the media collection (from get_website_cms mediaCollections) Mark uploads a website post's Mark images into when it publishes, or null so Mark uploads nothing (covers and body images must then come from the CMS). Left out, unchanged.

Output Schema

NameRequiredDescriptionDefault
cmsYes
appUrlYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / mapping / additionalProperties / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "bodyFormat": {
      -        "description": "How the post body is stored: markdown or lexical (rich text).",
      -        "enum": [
      -          "markdown",
      -          "lexical"
      -        ],
      -        "type": "string"
      -      },
      -      "collection": {
      -        "description": "CMS collection slug this channel publishes into.",
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "defaults": {
      -        "additionalProperties": {},
      -        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      -        "propertyNames": {
      -          "maxLength": 64,
      -          "minLength": 1,
      -          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "fields": {
      -        "description": "CMS field paths Mark fills on each document.",
      -        "properties": {
      -          "author": {
      -            "description": "CMS field for the author.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "body": {
      -            "description": "CMS field for the post body.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "categories": {
      -            "description": "CMS field for categories.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "cover": {
      -            "description": "CMS field for the cover image.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "description": {
      -            "description": "CMS field for the meta description.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "excerpt": {
      -            "description": "CMS field for the short listing excerpt.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "faq": {
      -            "description": "CMS array field for a competitor page's FAQ; each row gets question and answer.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "ogImage": {
      -            "description": "CMS field for the social/OG image.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "publishedAt": {
      -            "description": "CMS field for the published-at timestamp.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoDescription": {
      -            "description": "CMS field for the SEO description.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoTitle": {
      -            "description": "CMS field for the SEO title.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "slug": {
      -            "description": "CMS field for the URL slug.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "tags": {
      -            "description": "CMS field for tags.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "title": {
      -            "description": "CMS field for the post title.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "title",
      -          "slug",
      -          "body",
      -          "description"
      -        ],
      -        "type": "object"
      -      },
      -      "mediaCollection": {
      -        "description": "Read only. Set the connection's mediaDestination instead.",
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "previewUrlTemplate": {
      -        "description": "Draft preview URL pattern. Must include {slug} or {id} (the CMS document id), for example https://www.example.com/blog/preview/{id}?token=SECRET. Omit if the CMS has no draft preview URL.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "provider": {
      -        "const": "payload",
      -        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      -        "type": "string"
      -      },
      -      "urlPattern": {
      -        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "collection",
      -      "fields",
      -      "bodyFormat",
      -      "urlPattern"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "bodyFormat": {
      +        "description": "How the post body is stored: markdown or lexical (rich text).",
      +        "enum": [
      +          "markdown",
      +          "lexical"
      +        ],
      +        "type": "string"
      +      },
      +      "collection": {
      +        "description": "CMS collection slug this channel publishes into.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "defaults": {
      +        "additionalProperties": {},
      +        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      +        "propertyNames": {
      +          "maxLength": 64,
      +          "minLength": 1,
      +          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "fields": {
      +        "description": "CMS field paths Mark fills on each document.",
      +        "properties": {
      +          "author": {
      +            "description": "CMS field for the author.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "body": {
      +            "description": "CMS field for the post body.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "categories": {
      +            "description": "CMS field for categories.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "cover": {
      +            "description": "CMS field for the cover image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "description": {
      +            "description": "CMS field for the meta description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "excerpt": {
      +            "description": "CMS field for the short listing excerpt.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "faq": {
      +            "description": "CMS array field for a competitor page's FAQ; each row gets question and answer.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "ogImage": {
      +            "description": "CMS field for the social/OG image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "publishedAt": {
      +            "description": "CMS field for the published-at timestamp.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoDescription": {
      +            "description": "CMS field for the SEO description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoTitle": {
      +            "description": "CMS field for the SEO title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "slug": {
      +            "description": "CMS field for the URL slug.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "tags": {
      +            "description": "CMS field for tags.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "CMS field for the post title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "slug",
      +          "body",
      +          "description"
      +        ],
      +        "type": "object"
      +      },
      +      "localeUrlPatterns": {
      +        "additionalProperties": {
      +          "maxLength": 2048,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "description": "Live URL pattern per post language, for a site that serves a language at its own path, for example {\"de\": \"https://www.example.com/de/blog/{slug}\"}. A language not listed uses urlPattern.",
      +        "propertyNames": {
      +          "maxLength": 35,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "mediaCollection": {
      +        "description": "Read only. Set the connection's mediaDestination instead.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "previewUrlTemplate": {
      +        "description": "Draft preview URL pattern. Must include {slug} or {id} (the CMS document id), for example https://www.example.com/blog/preview/{id}?token=SECRET. Omit if the CMS has no draft preview URL.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "provider": {
      +        "const": "payload",
      +        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      +        "type": "string"
      +      },
      +      "urlPattern": {
      +        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "collection",
      +      "fields",
      +      "bodyFormat",
      +      "urlPattern"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / mapping / propertyNames / enum
      Previous value: -[
      -  "blog",
      -  "faq",
      -  "competitor_page",
      -  "landing_page"
      -]New value: +[
      +  "blog",
      +  "faq",
      +  "competitor_page"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / mapping / additionalProperties / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "bodyFormat": {
      -        "description": "How the post body is stored: markdown or lexical (rich text).",
      -        "enum": [
      -          "markdown",
      -          "lexical"
      -        ],
      -        "type": "string"
      -      },
      -      "collection": {
      -        "description": "CMS collection slug this channel publishes into.",
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "defaults": {
      -        "additionalProperties": {},
      -        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      -        "propertyNames": {
      -          "maxLength": 64,
      -          "minLength": 1,
      -          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "fields": {
      -        "description": "CMS field paths Mark fills on each document.",
      -        "properties": {
      -          "author": {
      -            "description": "CMS field for the author.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "body": {
      -            "description": "CMS field for the post body.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "categories": {
      -            "description": "CMS field for categories.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "cover": {
      -            "description": "CMS field for the cover image.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "description": {
      -            "description": "CMS field for the meta description.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "excerpt": {
      -            "description": "CMS field for the short listing excerpt.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "ogImage": {
      -            "description": "CMS field for the social/OG image.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "publishedAt": {
      -            "description": "CMS field for the published-at timestamp.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoDescription": {
      -            "description": "CMS field for the SEO description.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoTitle": {
      -            "description": "CMS field for the SEO title.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "slug": {
      -            "description": "CMS field for the URL slug.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "tags": {
      -            "description": "CMS field for tags.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "title": {
      -            "description": "CMS field for the post title.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "title",
      -          "slug",
      -          "body",
      -          "description"
      -        ],
      -        "type": "object"
      -      },
      -      "mediaCollection": {
      -        "description": "Read only. Set the connection's mediaDestination instead.",
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "previewUrlTemplate": {
      -        "description": "Draft preview URL pattern. Must include {slug} or {id} (the CMS document id), for example https://www.example.com/blog/preview/{id}?token=SECRET. Omit if the CMS has no draft preview URL.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "provider": {
      -        "const": "payload",
      -        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      -        "type": "string"
      -      },
      -      "urlPattern": {
      -        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "collection",
      -      "fields",
      -      "bodyFormat",
      -      "urlPattern"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "bodyFormat": {
      +        "description": "How the post body is stored: markdown or lexical (rich text).",
      +        "enum": [
      +          "markdown",
      +          "lexical"
      +        ],
      +        "type": "string"
      +      },
      +      "collection": {
      +        "description": "CMS collection slug this channel publishes into.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "defaults": {
      +        "additionalProperties": {},
      +        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      +        "propertyNames": {
      +          "maxLength": 64,
      +          "minLength": 1,
      +          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "fields": {
      +        "description": "CMS field paths Mark fills on each document.",
      +        "properties": {
      +          "author": {
      +            "description": "CMS field for the author.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "body": {
      +            "description": "CMS field for the post body.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "categories": {
      +            "description": "CMS field for categories.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "cover": {
      +            "description": "CMS field for the cover image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "description": {
      +            "description": "CMS field for the meta description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "excerpt": {
      +            "description": "CMS field for the short listing excerpt.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "faq": {
      +            "description": "CMS array field for a competitor page's FAQ; each row gets question and answer.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "ogImage": {
      +            "description": "CMS field for the social/OG image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "publishedAt": {
      +            "description": "CMS field for the published-at timestamp.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoDescription": {
      +            "description": "CMS field for the SEO description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoTitle": {
      +            "description": "CMS field for the SEO title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "slug": {
      +            "description": "CMS field for the URL slug.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "tags": {
      +            "description": "CMS field for tags.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "CMS field for the post title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "slug",
      +          "body",
      +          "description"
      +        ],
      +        "type": "object"
      +      },
      +      "mediaCollection": {
      +        "description": "Read only. Set the connection's mediaDestination instead.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "previewUrlTemplate": {
      +        "description": "Draft preview URL pattern. Must include {slug} or {id} (the CMS document id), for example https://www.example.com/blog/preview/{id}?token=SECRET. Omit if the CMS has no draft preview URL.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "provider": {
      +        "const": "payload",
      +        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      +        "type": "string"
      +      },
      +      "urlPattern": {
      +        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "collection",
      +      "fields",
      +      "bodyFormat",
      +      "urlPattern"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  4. Changed2 schema fields changed
    • changedInput schema / properties / mapping / additionalProperties / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "bodyFormat": {
      -        "description": "How the post body is stored: markdown or lexical (rich text).",
      -        "enum": [
      -          "markdown",
      -          "lexical"
      -        ],
      -        "type": "string"
      -      },
      -      "collection": {
      -        "description": "CMS collection slug this channel publishes into.",
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "defaults": {
      -        "additionalProperties": {},
      -        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      -        "propertyNames": {
      -          "maxLength": 64,
      -          "minLength": 1,
      -          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "fields": {
      -        "description": "CMS field paths Mark fills on each document.",
      -        "properties": {
      -          "author": {
      -            "description": "CMS field for the author.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "body": {
      -            "description": "CMS field for the post body.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "categories": {
      -            "description": "CMS field for categories.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "cover": {
      -            "description": "CMS field for the cover image.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "description": {
      -            "description": "CMS field for the meta description.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "excerpt": {
      -            "description": "CMS field for the short listing excerpt.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "ogImage": {
      -            "description": "CMS field for the social/OG image.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "publishedAt": {
      -            "description": "CMS field for the published-at timestamp.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoDescription": {
      -            "description": "CMS field for the SEO description.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoTitle": {
      -            "description": "CMS field for the SEO title.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "slug": {
      -            "description": "CMS field for the URL slug.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "tags": {
      -            "description": "CMS field for tags.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "title": {
      -            "description": "CMS field for the post title.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "title",
      -          "slug",
      -          "body",
      -          "description"
      -        ],
      -        "type": "object"
      -      },
      -      "mediaCollection": {
      -        "description": "Media collection for the cover image. Omit so this channel sends no images.",
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "previewUrlTemplate": {
      -        "description": "Draft preview URL pattern. Must include {slug} or {id} (the CMS document id), for example https://www.example.com/blog/preview/{id}?token=SECRET. Omit if the CMS has no draft preview URL.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "provider": {
      -        "const": "payload",
      -        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      -        "type": "string"
      -      },
      -      "urlPattern": {
      -        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "collection",
      -      "fields",
      -      "bodyFormat",
      -      "urlPattern"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "bodyFormat": {
      +        "description": "How the post body is stored: markdown or lexical (rich text).",
      +        "enum": [
      +          "markdown",
      +          "lexical"
      +        ],
      +        "type": "string"
      +      },
      +      "collection": {
      +        "description": "CMS collection slug this channel publishes into.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "defaults": {
      +        "additionalProperties": {},
      +        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      +        "propertyNames": {
      +          "maxLength": 64,
      +          "minLength": 1,
      +          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "fields": {
      +        "description": "CMS field paths Mark fills on each document.",
      +        "properties": {
      +          "author": {
      +            "description": "CMS field for the author.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "body": {
      +            "description": "CMS field for the post body.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "categories": {
      +            "description": "CMS field for categories.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "cover": {
      +            "description": "CMS field for the cover image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "description": {
      +            "description": "CMS field for the meta description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "excerpt": {
      +            "description": "CMS field for the short listing excerpt.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "ogImage": {
      +            "description": "CMS field for the social/OG image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "publishedAt": {
      +            "description": "CMS field for the published-at timestamp.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoDescription": {
      +            "description": "CMS field for the SEO description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoTitle": {
      +            "description": "CMS field for the SEO title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "slug": {
      +            "description": "CMS field for the URL slug.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "tags": {
      +            "description": "CMS field for tags.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "CMS field for the post title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "slug",
      +          "body",
      +          "description"
      +        ],
      +        "type": "object"
      +      },
      +      "mediaCollection": {
      +        "description": "Read only. Set the connection's mediaDestination instead.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "previewUrlTemplate": {
      +        "description": "Draft preview URL pattern. Must include {slug} or {id} (the CMS document id), for example https://www.example.com/blog/preview/{id}?token=SECRET. Omit if the CMS has no draft preview URL.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "provider": {
      +        "const": "payload",
      +        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      +        "type": "string"
      +      },
      +      "urlPattern": {
      +        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "collection",
      +      "fields",
      +      "bodyFormat",
      +      "urlPattern"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / mediaDestination
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 64,
      +      "minLength": 1,
      +      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "New media goes to: the media collection (from get_website_cms mediaCollections) Mark uploads a website post's Mark images into when it publishes, or null so Mark uploads nothing (covers and body images must then come from the CMS). Left out, unchanged."
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / mapping / propertyNames / enum
      Previous value: -[
      -  "blog",
      -  "faq",
      -  "competitor_page"
      -]New value: +[
      +  "blog",
      +  "faq",
      +  "competitor_page",
      +  "landing_page"
      +]
  6. Changed1 schema field changed
    • changedInput schema / properties / mapping / additionalProperties / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "bodyFormat": {
      -        "description": "How the post body is stored: markdown or lexical (rich text).",
      -        "enum": [
      -          "markdown",
      -          "lexical"
      -        ],
      -        "type": "string"
      -      },
      -      "collection": {
      -        "description": "CMS collection slug this channel publishes into.",
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "defaults": {
      -        "additionalProperties": {},
      -        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      -        "propertyNames": {
      -          "maxLength": 64,
      -          "minLength": 1,
      -          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "fields": {
      -        "description": "CMS field paths Mark fills on each document.",
      -        "properties": {
      -          "author": {
      -            "description": "CMS field for the author.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "body": {
      -            "description": "CMS field for the post body.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "categories": {
      -            "description": "CMS field for categories.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "cover": {
      -            "description": "CMS field for the cover image.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "description": {
      -            "description": "CMS field for the meta description.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "excerpt": {
      -            "description": "CMS field for the short listing excerpt.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "ogImage": {
      -            "description": "CMS field for the social/OG image.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "publishedAt": {
      -            "description": "CMS field for the published-at timestamp.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoDescription": {
      -            "description": "CMS field for the SEO description.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoTitle": {
      -            "description": "CMS field for the SEO title.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "slug": {
      -            "description": "CMS field for the URL slug.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "tags": {
      -            "description": "CMS field for tags.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "title": {
      -            "description": "CMS field for the post title.",
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "title",
      -          "slug",
      -          "body",
      -          "description"
      -        ],
      -        "type": "object"
      -      },
      -      "mediaCollection": {
      -        "description": "Media collection for the cover image. Omit so this channel sends no images.",
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "previewUrlTemplate": {
      -        "description": "Draft preview URL pattern. Must include {slug}. Omit if the CMS has no draft preview URL.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "provider": {
      -        "const": "payload",
      -        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      -        "type": "string"
      -      },
      -      "urlPattern": {
      -        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "collection",
      -      "fields",
      -      "bodyFormat",
      -      "urlPattern"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "bodyFormat": {
      +        "description": "How the post body is stored: markdown or lexical (rich text).",
      +        "enum": [
      +          "markdown",
      +          "lexical"
      +        ],
      +        "type": "string"
      +      },
      +      "collection": {
      +        "description": "CMS collection slug this channel publishes into.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "defaults": {
      +        "additionalProperties": {},
      +        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      +        "propertyNames": {
      +          "maxLength": 64,
      +          "minLength": 1,
      +          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "fields": {
      +        "description": "CMS field paths Mark fills on each document.",
      +        "properties": {
      +          "author": {
      +            "description": "CMS field for the author.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "body": {
      +            "description": "CMS field for the post body.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "categories": {
      +            "description": "CMS field for categories.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "cover": {
      +            "description": "CMS field for the cover image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "description": {
      +            "description": "CMS field for the meta description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "excerpt": {
      +            "description": "CMS field for the short listing excerpt.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "ogImage": {
      +            "description": "CMS field for the social/OG image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "publishedAt": {
      +            "description": "CMS field for the published-at timestamp.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoDescription": {
      +            "description": "CMS field for the SEO description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoTitle": {
      +            "description": "CMS field for the SEO title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "slug": {
      +            "description": "CMS field for the URL slug.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "tags": {
      +            "description": "CMS field for tags.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "CMS field for the post title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "slug",
      +          "body",
      +          "description"
      +        ],
      +        "type": "object"
      +      },
      +      "mediaCollection": {
      +        "description": "Media collection for the cover image. Omit so this channel sends no images.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "previewUrlTemplate": {
      +        "description": "Draft preview URL pattern. Must include {slug} or {id} (the CMS document id), for example https://www.example.com/blog/preview/{id}?token=SECRET. Omit if the CMS has no draft preview URL.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "provider": {
      +        "const": "payload",
      +        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      +        "type": "string"
      +      },
      +      "urlPattern": {
      +        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "collection",
      +      "fields",
      +      "bodyFormat",
      +      "urlPattern"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  7. Changed1 schema field changed
    • changedInput schema / properties / mapping / additionalProperties / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "bodyFormat": {
      -        "enum": [
      -          "markdown",
      -          "lexical"
      -        ],
      -        "type": "string"
      -      },
      -      "collection": {
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "defaults": {
      -        "additionalProperties": {},
      -        "propertyNames": {
      -          "maxLength": 64,
      -          "minLength": 1,
      -          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "fields": {
      -        "properties": {
      -          "author": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "body": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "categories": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "cover": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "description": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "excerpt": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "ogImage": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "publishedAt": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoDescription": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoTitle": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "slug": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "tags": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "title": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "title",
      -          "slug",
      -          "body",
      -          "description"
      -        ],
      -        "type": "object"
      -      },
      -      "mediaCollection": {
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "previewUrlTemplate": {
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "provider": {
      -        "const": "payload",
      -        "type": "string"
      -      },
      -      "urlPattern": {
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "collection",
      -      "fields",
      -      "bodyFormat",
      -      "urlPattern"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "bodyFormat": {
      +        "description": "How the post body is stored: markdown or lexical (rich text).",
      +        "enum": [
      +          "markdown",
      +          "lexical"
      +        ],
      +        "type": "string"
      +      },
      +      "collection": {
      +        "description": "CMS collection slug this channel publishes into.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "defaults": {
      +        "additionalProperties": {},
      +        "description": "Fixed values for required CMS fields Mark cannot fill, such as an author id.",
      +        "propertyNames": {
      +          "maxLength": 64,
      +          "minLength": 1,
      +          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "fields": {
      +        "description": "CMS field paths Mark fills on each document.",
      +        "properties": {
      +          "author": {
      +            "description": "CMS field for the author.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "body": {
      +            "description": "CMS field for the post body.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "categories": {
      +            "description": "CMS field for categories.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "cover": {
      +            "description": "CMS field for the cover image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "description": {
      +            "description": "CMS field for the meta description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "excerpt": {
      +            "description": "CMS field for the short listing excerpt.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "ogImage": {
      +            "description": "CMS field for the social/OG image.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "publishedAt": {
      +            "description": "CMS field for the published-at timestamp.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoDescription": {
      +            "description": "CMS field for the SEO description.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoTitle": {
      +            "description": "CMS field for the SEO title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "slug": {
      +            "description": "CMS field for the URL slug.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "tags": {
      +            "description": "CMS field for tags.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "CMS field for the post title.",
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "slug",
      +          "body",
      +          "description"
      +        ],
      +        "type": "object"
      +      },
      +      "mediaCollection": {
      +        "description": "Media collection for the cover image. Omit so this channel sends no images.",
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "previewUrlTemplate": {
      +        "description": "Draft preview URL pattern. Must include {slug}. Omit if the CMS has no draft preview URL.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "provider": {
      +        "const": "payload",
      +        "description": "Which website CMS publishes this channel. A channel maps to one CMS.",
      +        "type": "string"
      +      },
      +      "urlPattern": {
      +        "description": "Live page URL pattern. Must include {slug}, for example https://www.example.com/blog/{slug}.",
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "collection",
      +      "fields",
      +      "bodyFormat",
      +      "urlPattern"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  8. Changed4 schema fields changed
    • changedInput schema / properties / mapping / additionalProperties / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "bodyFormat": {
      -        "enum": [
      -          "markdown",
      -          "lexical"
      -        ],
      -        "type": "string"
      -      },
      -      "collection": {
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "defaults": {
      -        "additionalProperties": {},
      -        "propertyNames": {
      -          "maxLength": 64,
      -          "minLength": 1,
      -          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "fields": {
      -        "properties": {
      -          "author": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "body": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "categories": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "cover": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "description": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "excerpt": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "ogImage": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "publishedAt": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoDescription": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "seoTitle": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "slug": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "tags": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          },
      -          "title": {
      -            "maxLength": 64,
      -            "minLength": 1,
      -            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "title",
      -          "slug",
      -          "body",
      -          "description"
      -        ],
      -        "type": "object"
      -      },
      -      "mediaCollection": {
      -        "maxLength": 64,
      -        "minLength": 1,
      -        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      -        "type": "string"
      -      },
      -      "previewUrlTemplate": {
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "urlPattern": {
      -        "maxLength": 2048,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "collection",
      -      "fields",
      -      "bodyFormat",
      -      "urlPattern"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "bodyFormat": {
      +        "enum": [
      +          "markdown",
      +          "lexical"
      +        ],
      +        "type": "string"
      +      },
      +      "collection": {
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "defaults": {
      +        "additionalProperties": {},
      +        "propertyNames": {
      +          "maxLength": 64,
      +          "minLength": 1,
      +          "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "fields": {
      +        "properties": {
      +          "author": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "body": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "categories": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "cover": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "description": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "excerpt": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "ogImage": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "publishedAt": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoDescription": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "seoTitle": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "slug": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "tags": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          },
      +          "title": {
      +            "maxLength": 64,
      +            "minLength": 1,
      +            "pattern": "^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "slug",
      +          "body",
      +          "description"
      +        ],
      +        "type": "object"
      +      },
      +      "mediaCollection": {
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
      +        "type": "string"
      +      },
      +      "previewUrlTemplate": {
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "provider": {
      +        "const": "payload",
      +        "type": "string"
      +      },
      +      "urlPattern": {
      +        "maxLength": 2048,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "collection",
      +      "fields",
      +      "bodyFormat",
      +      "urlPattern"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / mapping / description
      Previous value: -"Per channel: a full channel mapping to set, or null to stop publishing that channel. Channels not named keep their mapping."New value: +"Per channel: a full channel mapping to set, or null to stop publishing that channel. Channels not named keep their mapping. A channel publishes to one CMS."
    • addedInput schema / properties / provider
      Added value: +{
      +  "description": "Website CMS provider from get_website_cms, for example payload. Required when more than one website CMS is connected.",
      +  "type": "string"
      +}
    • changedInput schema / properties / publishMode / description
      Previous value: -"Set to draft so Mark saves drafts and the customer publishes in Payload. Switching to live is done in the Mark app."New value: +"Set to draft so Mark saves drafts and the customer publishes in the CMS. Switching to live is done in the Mark app."
  9. Added

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: admin-only access, validation of mappings against discovered fields, prohibition on targeting the API-key collection or media collections, one-CMS-per-channel constraint, and the fact that saving reads from the customer's CMS and re-checks the connection. It also clarifies that live-mode, API-key, and site-URL changes are outside this tool.

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 with the core effect and then branches into provider, per-channel mapping, media destination, rediscovery, validation, and related tools. It is information-dense and mostly well organized, though the long run-on sentences could be split for readability.

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

Completeness5/5

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

For a complex configuration tool with nested schema objects, 100% schema descriptions, annotations, and an output schema, the description covers the important operational constraints, admin requirement, validation behavior, and related tools. An agent has enough context to decide whether and how to call it without needing return-value details.

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 100%, so the baseline is 3, but the description adds conditional meaning not fully captured by the schema: `provider` is required only when multiple CMSs are connected, `rediscover` re-reads collections before applying changes, and `mediaDestination` controls where new media is uploaded or suppresses uploads with null. It maps the high-level concepts to the parameters usefully.

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 action and resource: changing how approved website posts reach a website CMS, covering per-channel mapping, media destination, provider selection, and draft mode. It distinguishes itself from `get_website_cms` (read) and `sync_connections` (test/retry publish) by naming them as related tools.

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

Usage Guidelines4/5

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

Gives clear operational conditions: pass `provider` when more than one CMS is connected, pass `rediscover` to re-read collections first, and use `publishMode: draft` to return to draft mode. It also states that switching to live and changing API key/site URL happen only in the Mark app, and names `sync_connections` for testing or retrying a failed publish. It stops short of a full when-not-to-use-this-tool statement.

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