Draft/Publish workflow: Creating or updating pages, elements, and files always produces a draft version first. Nothing goes live until you explicitly use the publish-* tools. This gives you a chance to review changes before they are visible to visitors. Scheduled publishing is supported via the at parameter (ISO 8601 datetime), e.g. to publish a blog post at a specific date and time.
Permissions: Each tool requires a specific permission (e.g. page:view, page:add, file:publish). Permissions are controlled by the cmsperms JSON column on the User model. Assign roles like admin, publisher, editor, or viewer to control what each user can do via MCP.
Multi-tenancy: All operations are scoped to the authenticated user's tenant. Content from other tenants is never visible or modifiable, ensuring complete data isolation between tenants.
Version history: Every change creates a new version. You can retrieve past versions with get-page-history and restore any previous state. This means you can safely experiment — nothing is permanently lost until a page is force-deleted.
Content structure: Page content is an ordered array of typed elements (heading, text, image, code, etc.). Use get-schemas to discover available element types and their fields. Each element belongs to a layout group (typically main) and has a unique ID that is preserved across updates.