---
title: Common workflows with CMS tools
slug: cms-13/docs/common-workflows-cms-tools
docTags: 
createdAt: 2026-07-30T20:22:08.616Z
---

This page provides practical examples of how Mark uses CMS tools to accomplish common tasks. Use these as a reference when building prompts or testing tool behavior.

## Create a page with content

A typical content creation workflow involves creating the content type (if needed), creating a content item, populating its properties, and publishing it.

### List available content types

- **Tool** – `paas_cms_list_content_types`
- **Parameters**

```json
{ "baseType": "_page" }
```

Returns all page content types with their names, keys, and property counts.

### Create a content item

- **Tool** – `paas_cms_create_content_item`
- **Parameters**

```json
{
  "contentType": "StandardPage",
  "displayName": "About Us",
  "routeSegment": "about-us",
  "locale": "en"
}
```

Returns `contentKey` (GUID) and `contentVersion` for subsequent operations.

### Populate content properties

- **Tool** – `paas_cms_update_content_item`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "contentVersion": 1,
  "properties": "{\"MainBody\": \"<p>Welcome to our company...</p>\", \"TeaserText\": \"Learn about our mission and values.\"}"
}
```

### Publish the page

- **Tool** – `paas_cms_publish_content_item`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "contentVersion": 1
}
```

## Create a custom content type

Build a new content type and organize properties into groups.

### Check current property groups

- **Tool** – `paas_cms_list_property_groups`

Returns available property groups (tabs) you can use to organize properties.

### Create a property group (if needed)

- **Tool** – `paas_cms_create_property_group`
- **Parameters**

```json
{
  "key": "SEO_Settings",
  "sortOrder": 200
}
```

### Create the content type

- **Tool** – `paas_cms_create_content_type`
- **Parameters**

```json
{
  "key": "BlogPost",
  "displayName": "Blog Post",
  "description": "A blog post with author, date, and rich content",
  "baseType": "_page",
  "properties": "[{\"name\": \"Author\", \"type\": \"string\", \"group\": \"Content\"}, {\"name\": \"PublishDate\", \"type\": \"string\", \"group\": \"Content\"}, {\"name\": \"MainBody\", \"type\": \"richtext\", \"group\": \"Content\"}, {\"name\": \"MetaTitle\", \"type\": \"string\", \"group\": \"SEO_Settings\"}, {\"name\": \"MetaDescription\", \"type\": \"string\", \"group\": \"SEO_Settings\"}]"
}
```

### Verify the content type

- **Tool** – `paas_cms_get_content_type_details`
- **Parameters**

```json
{ "contentTypeKey": "BlogPost" }
```

Returns the full content type definition with all properties.

## Create a localized version

Create a translated version of existing content for a different locale.

### Get the original content

- **Tool** – `paas_cms_get_content_data`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5"
}
```

### Create a locale variation

- **Tool** – `paas_cms_create_content_variation`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "variationKey": "Swedish",
  "locale": "sv",
  "displayName": "Om oss"
}
```

### Set translated properties

- **Tool** – `paas_cms_update_content_item`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "contentVersion": 2,
  "properties": "{\"MainBody\": \"<p>Välkommen till vårt företag...</p>\", \"TeaserText\": \"Läs om vårt uppdrag och våra värderingar.\"}"
}
```

### Publish the variation

- **Tool** – `paas_cms_publish_content_item`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "contentVersion": 2
}
```

## Optimize content for SEO

Analyze existing content and apply Search Engine Optimization (SEO) improvements.

### Get a preview URL

- **Tool** – `paas_cms_get_content_preview_url`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "contentVersion": 1
}
```

### Run SEO analysis

- **Tool** – `paas_cms_seo_analysis`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "previewUrl": "https://mysite.com/about-us",
  "question": "How can I improve search rankings for this page?"
}
```

Returns detailed analysis with recommended values for SEO fields.

### Apply SEO recommendations

- **Tool** – `paas_cms_seo_edit`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "recommendedValues": "{\"MetaTitle\": \"About Us | Company Name\", \"MetaDescription\": \"Learn about our mission, values, and team.\"}",
  "actualPropertyNames": "{\"MetaTitle\": \"MetaTitle\", \"MetaDescription\": \"MetaDescription\"}"
}
```

## Add schema markup

Improve content discoverability for AI and search engines using JSON-LD structured data.

### Run Generative Engine Optimization (GEO) analysis

- **Tool** – `paas_cms_geo_analysis`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "previewUrl": "https://mysite.com/about-us"
}
```

Returns a comprehensive LLM discoverability audit with JSON-LD schema recommendations.

### Apply JSON-LD templates

- **Tool** – `paas_cms_geo_apply`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "jsonLdTemplates": "{\"Organization\": {\"@context\": \"https://schema.org\", \"@type\": \"Organization\", \"name\": \"Company Name\", \"url\": \"https://mysite.com\"}}"
}
```

## Upload a media asset

Upload an image or other file into CMS from a public URL.

### Upload the file

- **Tool** – `paas_cms_upload_media`
- **Parameters**

```json
{
  "FileUrl": "https://example.com/images/hero.jpg",
  "FileName": "hero.jpg",
  "DisplayName": "Homepage hero"
}
```

Downloads the file and creates a media asset in the global shared asset folder. The CMS media content type is auto-selected from the file extension unless you set `ContentType`. To upload into a specific folder, provide its GUID in `Container`.

## Create a Visual Builder display template

Define a display template (style) and scope it to a content type, base type, or layout node.

### Review existing display templates

- **Tool** – `paas_cms_list_display_templates`

Returns all display templates so you can check existing keys and scopes before adding a new one.

### Create the display template

- **Tool** – `paas_cms_create_display_template`
- **Parameters**

```json
{
  "DisplayName": "Hero Block – Wide",
  "ContentType": "HeroBlock",
  "Settings": {
    "width": {
      "displayName": "Width",
      "choices": { "full": "Full width", "contained": "Contained" }
    }
  }
}
```

Scope the template to exactly one of `ContentType`, `BaseType` (`Section` or `Experience`), or `NodeType` (`experience`, `section`, `row`, or `column`).

### Update the display template

- **Tool** – `paas_cms_update_display_template`
- **Parameters**

```json
{
  "Key": "HeroBlockWide",
  "IsDefault": true
}
```

Only the fields you provide are updated. Note that `Settings` uses REPLACE semantics: when provided, the entire settings collection is replaced, so send the complete set.

## Schedule content for future publish

Create content now and schedule it to go live at a specific date and time.

### Create and populate content

Follow the [Create a page with content](docId\:YTIZ3DnVT5y74KlrAaIzn) workflow (steps 1–3).

### Schedule publish

- **Tool** – `paas_cms_publish_content_item`
- **Parameters**

```json
{
  "contentKey": "c3558e08-00a6-45d0-bfff-5bd2bda3acb5",
  "contentVersion": 1,
  "scheduledPublishDate": "2026-04-01T09:00:00Z"
}
```

Optimizely automatically publishes the content at the specified date and time.
