{
  "id": "MjAjfa9No8m023Bu",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Optimize SEO metadata for Webflow CMS using MCP and AI",
  "tags": [
    {
      "id": "T3xhK1cIuPex0boX",
      "name": "Templates",
      "createdAt": "2025-09-03T11:06:03.839Z",
      "updatedAt": "2025-09-03T11:06:03.839Z"
    }
  ],
  "nodes": [
    {
      "id": "0156dff3-35ce-4866-9fdd-8079f2fd201e",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        992,
        2688
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "65a97353-0687-4d5e-af71-1c898e55ef10",
      "name": "Track Metrics",
      "type": "n8n-nodes-base.code",
      "position": [
        3184,
        2688
      ],
      "parameters": {
        "jsCode": "const formatData = $('Format for Update').item.json;\nconst executionStart = new Date(formatData.timestamp);\nconst executionEnd = new Date();\nconst duration = (executionEnd - executionStart) / 1000;\n\nreturn [{\n  json: {\n    timestamp: new Date().toLocaleString('en-US', { timeZone: 'America/New_York' }),\n    collectionId: formatData.collectionId,\n    itemsUpdated: formatData.count,\n    itemsPublished: formatData.count,\n    executionDuration: `${duration}s`,\n    postNames: formatData.items.map(i => i.fieldData.name).join('\\n'),\n    itemIds: formatData.itemIds.join('\\n')\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "8b9af1aa-af12-4f39-b64f-b0788ed5e5f0",
      "name": "Set Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        1216,
        2688
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a",
              "name": "collectionId",
              "type": "string",
              "value": "xxxxxxxxxxxxxx"
            },
            {
              "id": "d",
              "name": "minTitleLength",
              "type": "number",
              "value": 50
            },
            {
              "id": "e",
              "name": "maxTitleLength",
              "type": "number",
              "value": 60
            },
            {
              "id": "f",
              "name": "minSummaryLength",
              "type": "number",
              "value": 120
            },
            {
              "id": "g",
              "name": "maxSummaryLength",
              "type": "number",
              "value": 155
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "26576080-76ea-438d-ba42-468df5b6b50d",
      "name": "Fetch CMS Items",
      "type": "@n8n/n8n-nodes-langchain.mcpClient",
      "maxTries": 3,
      "position": [
        1440,
        2688
      ],
      "parameters": {
        "tool": {
          "__rl": true,
          "mode": "list",
          "value": "data_cms_tool"
        },
        "options": {},
        "parameters": {
          "value": {
            "actions": "=[{\"list_collection_items\": {\"collection_id\": \"{{ $json.collectionId }}\", \"request\": {\"limit\": 100}}}]",
            "context": "Retrieving collection items for SEO analysis"
          },
          "schema": [
            {
              "id": "actions",
              "type": "array",
              "display": true,
              "required": true,
              "displayName": "actions",
              "defaultMatch": false,
              "defaultValue": "[\n  {\n    \"get_collection_list\": {\n      \"siteId\": \"string\"\n    },\n    \"get_collection_details\": {\n      \"collection_id\": \"string\"\n    },\n    \"create_collection\": {\n      \"request\": {\n        \"displayName\": \"string\",\n        \"singularName\": \"string\",\n        \"slug\": \"string\"\n      }\n    },\n    \"create_collection_static_field\": {\n      \"collection_id\": \"string\",\n      \"request\": {\n        \"id\": \"string\",\n        \"isEditable\": false,\n        \"isRequired\": false,\n        \"type\": \"Color\",\n        \"displayName\": \"string\",\n        \"helpText\": \"string\"\n      }\n    },\n    \"create_collection_option_field\": {\n      \"collection_id\": \"string\",\n      \"request\": {\n        \"id\": \"string\",\n        \"isEditable\": false,\n        \"isRequired\": false,\n        \"type\": \"string\",\n        \"displayName\": \"string\",\n        \"helpText\": \"string\",\n        \"metadata\": {\n          \"options\": [\n            {\n              \"name\": \"string\",\n              \"id\": \"string\"\n            }\n          ]\n        }\n      }\n    },\n    \"create_collection_reference_field\": {\n      \"collection_id\": \"string\",\n      \"request\": {\n        \"id\": \"string\",\n        \"isEditable\": false,\n        \"isRequired\": false,\n        \"type\": \"MultiReference\",\n        \"displayName\": \"string\",\n        \"helpText\": \"string\",\n        \"metadata\": {\n          \"collectionId\": \"string\"\n        }\n      }\n    },\n    \"update_collection_field\": {\n      \"collection_id\": \"string\",\n      \"field_id\": \"string\",\n      \"request\": {\n        \"isRequired\": false,\n        \"displayName\": \"string\",\n        \"helpText\": \"string\"\n      }\n    },\n    \"list_collection_items\": {\n      \"collection_id\": \"string\",\n      \"request\": {\n        \"cmsLocaleId\": \"string\",\n        \"limit\": 0,\n        \"offset\": 0,\n        \"name\": \"string\",\n        \"slug\": \"string\",\n        \"sortBy\": \"lastPublished\",\n        \"sortOrder\": \"asc\"\n      }\n    },\n    \"create_collection_items\": {\n      \"collection_id\": \"string\",\n      \"request\": {\n        \"cmsLocaleIds\": [\n          \"string\"\n        ],\n        \"isArchived\": false,\n        \"isDraft\": false,\n        \"fieldData\": [\n          {\n            \"name\": \"string\",\n            \"slug\": \"string\"\n          }\n        ]\n      }\n    },\n    \"update_collection_items\": {\n      \"collection_id\": \"string\",\n      \"request\": {\n        \"items\": [\n          {\n            \"id\": \"string\",\n            \"cmsLocaleId\": \"string\",\n            \"lastPublished\": \"string\",\n            \"lastUpdated\": \"string\",\n            \"createdOn\": \"string\",\n            \"isArchived\": false,\n            \"isDraft\": false,\n            \"fieldData\": {\n              \"name\": \"string\",\n              \"slug\": \"string\"\n            }\n          }\n        ]\n      }\n    },\n    \"publish_collection_items\": {\n      \"collection_id\": \"string\",\n      \"request\": {\n        \"itemIds\": [\n          \"string\"\n        ]\n      }\n    },\n    \"delete_collection_items\": {\n      \"collection_id\": \"string\",\n      \"request\": {\n        \"items\": [\n          {\n            \"id\": \"string\",\n            \"cmsLocaleIds\": [\n              \"string\"\n            ]\n          }\n        ]\n      }\n    }\n  }\n]"
            },
            {
              "id": "context",
              "type": "string",
              "display": true,
              "required": true,
              "displayName": "context",
              "defaultMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "endpointUrl": "https://mcp.webflow.com/mcp"
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 5000
    },
    {
      "id": "67810024-e919-4b42-8721-da432621c4e0",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1664,
        2688
      ],
      "parameters": {
        "options": {
          "reset": false
        },
        "batchSize": "=5"
      },
      "typeVersion": 3
    },
    {
      "id": "d95e34ae-bf07-487e-b3ac-18d08f8034aa",
      "name": "SEO Analysis Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "maxTries": 3,
      "position": [
        1952,
        2688
      ],
      "parameters": {
        "text": "={{ JSON.stringify($input.all().map(item => item.json)) }}",
        "options": {
          "systemMessage": "=You are an SEO optimization specialist for Webflow CMS.\n\nYour task: Optimize items to meet these requirements:\n- name (title): {{ $('Set Fields').first().json.minTitleLength }}-{{ $('Set Fields').first().json.maxTitleLength }} characters\n- project-summary: {{ $('Set Fields').first().json.minSummaryLength }}-{{ $('Set Fields').first().json.maxSummaryLength }} characters\n\nFor each item:\n1. Optimize name if outside target range\n2. Optimize project-summary if outside target range\n3. Check services-rendered for H1/H2 structure\n4. Flag missing alt text\n5. Count words in services-rendered\n\nOutput: JSON array ONLY. NO explanations. NO markdown. Start with [ and end with ].\n\nStructure:\n[\n  {\n    \"id\": \"string\",\n    \"needsUpdate\": true,\n    \"status\": \"optimized | attention_required\",\n    \"updates\": {\n      \"name\": \"string or null\",\n      \"project-summary\": \"string or null\"\n    },\n    \"audit\": {\n      \"charCount_name\": 0,\n      \"charCount_summary\": 0,\n      \"wordCount_services\": 0\n    },\n    \"issues\": [\"MISSING_ALT\", \"THIN_CONTENT\", \"INVALID_H_STRUCTURE\"]\n  }\n]\n\n\nConstraints:\n- Never modify: id, slug, _archived, _draft, featured-project, color\n- Keep brand voice professional\n- Include target keywords naturally"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "retryOnFail": true,
      "typeVersion": 1.7,
      "continueOnFail": true,
      "waitBetweenTries": 5000
    },
    {
      "id": "f0419ea1-4483-4e13-9e4c-3220c135e5ec",
      "name": "Format for Update",
      "type": "n8n-nodes-base.code",
      "position": [
        2512,
        2688
      ],
      "parameters": {
        "jsCode": "const data = $input.first().json;\nconst output = data.output || data;\nconst itemsToUpdate = output.filter(i => i.needsUpdate);\n\nif (itemsToUpdate.length === 0) {\n  return [];\n}\n\nconst formattedItems = itemsToUpdate.map(item => {\n  const fieldData = {};\n  if (item.updates.name !== null) fieldData.name = item.updates.name;\n  if (item.updates['project-summary'] !== null) fieldData['project-summary'] = item.updates['project-summary'];\n  \n  return {\n    id: item.id,\n    fieldData: fieldData\n  };\n});\n\nreturn [{\n  json: {\n    // Make sure to update the correct collection ID \u26a0\ufe0f\n    collectionId: \"xxxxxxxxxx\",\n    items: formattedItems,\n    itemIds: formattedItems.map(i => i.id),\n    count: itemsToUpdate.length,\n    timestamp: new Date().toISOString()\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "fe9d2b7d-a242-4b40-81fa-a175dc57d02e",
      "name": "Update Items",
      "type": "@n8n/n8n-nodes-langchain.mcpClient",
      "maxTries": 3,
      "position": [
        2736,
        2688
      ],
      "parameters": {
        "tool": {
          "__rl": true,
          "mode": "list",
          "value": "data_cms_tool"
        },
        "options": {
          "timeout": 60000
        },
        "inputMode": "json",
        "jsonInput": "={\n  \"actions\": [{\n    \"update_collection_items\": {\n      \"collection_id\": \"{{ $json.collectionId }}\",\n      \"request\": {\n        \"items\": {{ JSON.stringify($json.items) }}\n      }\n    }\n  }]\n}",
        "endpointUrl": "https://mcp.webflow.com/mcp"
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "continueOnFail": true,
      "waitBetweenTries": 5000
    },
    {
      "id": "d0912e99-4dfc-423f-b086-f54462c67ffe",
      "name": "Publish Items",
      "type": "@n8n/n8n-nodes-langchain.mcpClient",
      "maxTries": 3,
      "position": [
        2960,
        2688
      ],
      "parameters": {
        "tool": {
          "__rl": true,
          "mode": "list",
          "value": "data_cms_tool"
        },
        "options": {},
        "inputMode": "json",
        "jsonInput": "={\n  \"actions\": [{\n    \"publish_collection_items\": {\n      \"collection_id\": \"{{ $('Format for Update').item.json.collectionId }}\",\n      \"request\": {\n        \"itemIds\": {{ JSON.stringify($('Format for Update').item.json.itemIds) }}\n      }\n    }\n  }]\n}",
        "endpointUrl": "https://mcp.webflow.com/mcp"
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "continueOnFail": true,
      "waitBetweenTries": 5000
    },
    {
      "id": "0b465118-b2e6-4447-bf1b-37960c70cb6f",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        2144,
        2912
      ],
      "parameters": {
        "autoFix": true,
        "schemaType": "manual",
        "inputSchema": "[\n  {\n    \"id\": \"string\",\n    \"needsUpdate\": true,\n    \"status\": \"string\",\n    \"updates\": {\n      \"name\": \"string\",\n      \"project-summary\": \"string\"\n    },\n    \"audit\": {\n      \"charCount_name\": 0,\n      \"charCount_summary\": 0,\n      \"wordCount_services\": 0\n    },\n    \"issues\": [\"string\"]\n  }\n]"
      },
      "typeVersion": 1.3
    },
    {
      "id": "169f8777-4974-4964-9c4f-6d718b3c4eb0",
      "name": "Parser Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        2224,
        3120
      ],
      "parameters": {
        "model": "openai/gpt-4o-mini",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e197a0aa-75c6-4228-8879-8e88c3a4df78",
      "name": "Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        1888,
        2912
      ],
      "parameters": {
        "model": "openai/gpt-4o-mini",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "91504172-c37d-42bf-a6cd-004b273f18c0",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        2016,
        2912
      ],
      "parameters": {
        "sessionKey": "={{ $('Set Fields').item.json.collectionId }}",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "820b8fd3-9dad-45e2-b198-4ebd05e2a59a",
      "name": "Save Summary",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3408,
        2688
      ],
      "parameters": {
        "columns": {
          "value": {
            "itemIds": "={{ $json.itemIds }}",
            "Timestamp": "={{ $json.timestamp }}",
            "postNames": "={{ $json.postNames }}",
            "Collection ID": "={{ $json.collectionId }}",
            "Items Updated": "={{ $json.itemsUpdated }}",
            "itemsPublished": "={{ $json.itemsPublished }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Collection ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Collection ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Items Updated",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Items Updated",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "itemsPublished",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "itemsPublished",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postNames",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "postNames",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "itemIds",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "itemIds",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": 2109721884
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "xxxxxxx"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "01aa9a8a-83c8-4fe0-a863-ead528c8b2a4",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        208,
        2304
      ],
      "parameters": {
        "width": 512,
        "height": 1744,
        "content": "# \ud83d\ude80 Webflow CMS SEO Bulk Optimizer\nThis workflow optimizes SEO metadata for Webflow CMS collections using AI.\n\n**What it does:**\n- Fetches CMS items from your Webflow collection\n- Analyzes titles and descriptions against SEO best practices\n- Optimizes length (titles: 50-60 chars, summaries: 120-155 chars)\n- Checks for missing alt text and content structure\n- Updates and publishes items back to Webflow\n- Logs all changes to Google Sheets\n\n**Requirements:**\n- Webflow MCP OAuth2 credentials\n- OpenRouter or any other LLM API key \n- Google Sheets or similar\n- Your Webflow collection ID\n\n**Before running:**\nIf your collection has different field names:\n1. **Agent system prompt**: Replace \"name\" and \"project-summary\" with your field names\n2. **Structured Output Parser schema**: Update field names in JSON schema\n3. **Format for Update code**: Change field names \n\n**Common field names (Webflow default collections):**\n- Posts: name, post-summary, post-body\n- Products: name, description, short-description\n- Projects: name, project-summary, services-rendered\n\n## Webflow MCP Config\n\n**Create credentials:**\n- Select MCP OAuth2 API\n- Set **Server URL** to https://mcp.webflow.com/mcp\n- Click Save and authorize access to your Webflow workspaces and sites\n\n**Configure MCP Client nodes:**\n- Set MCP Endpoint URL to https://mcp.webflow.com/mcp\n- Select **data_cms_tool** (for CMS operations). For other operations, select the appropriate tool.\n- **Actions** and **Context** depend on the tool and your use case\u2014see examples in the workflow nodes.\n\n### MCP Webflow node errors i've encountered\n\n**Authentication:**\n- Credential type: MCP OAuth2 API\n- Server URL: https://mcp.webflow.com/mcp\n- Must authorize Webflow workspaces after saving\n\n**Common errors:**\n\n**404 - Resource not found**\n\u2192 Wrong collection ID. Get from Webflow CMS URL.\n\n**400 - Bad Request**\n\u2192 Check JSON structure has \"request\" wrapper\n\u2192 Remove null values from fieldData\n\u2192 Verify parameter names (itemIds not itemIDs)\n\n**400 - Invalid input for 'actions'**\n\u2192 Missing \"request\" object inside action\n\u2192 Wrong JSON structure\n\n**Items not updating:**\n\u2192 Field names don't match collection schema\n\u2192 Use exact field names from Webflow (case-sensitive, with hyphens)\n\n**Nothing publishes:**\n\u2192 Using \"itemIDs\" instead of \"itemIds\"\n\u2192 Collection ID mismatch between Update and Publish\n\n**Verify setup:**\n1. Check collection ID matches in Set Fields AND Format for Update\n2. Test field names: view Fetch CMS Items output\n3. Run with 1 item first before scaling"
      },
      "typeVersion": 1
    },
    {
      "id": "34c6c61a-b2a8-49d6-9353-dfda7fc12ebf",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1152,
        2256
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 560,
        "content": "#### Start Here: Configure Your Collection\nUpdate these values for your Webflow collection:\n- **collectionId**: Get from Webflow CMS URL (required)\n- **batchSize**: 5-20 items per batch (5 = slower/safer, 20 = faster)\n- **Title limits**: 50-60 chars (SEO standard)\n- **Summary limits**: 120-155 chars (meta description standard)\n\nLater on, you may increase the values to optimise like url slug, post body, alt-text,etc"
      },
      "typeVersion": 1
    },
    {
      "id": "6b984edd-da56-4374-95f9-43e968ecd278",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1872,
        2288
      ],
      "parameters": {
        "color": 7,
        "width": 480,
        "height": 528,
        "content": "#### AI Agent: Customize for Your Fields\n\n**Current setup optimizes:**\n- `name` \u2192 50-60 character titles\n- `project-summary` \u2192 120-155 character descriptions\n\n**If your collection uses different field names:**\n1. Update system prompt (replace \"name\" and \"project-summary\", etc)\n2. Update Structured Output Parser schema\n3. Update Format for Update code (lines 9-10)\n\n**Common Webflow field names:**\n- Blog: name, post-summary, post-body\n- Products: name, description, short-description\n- Portfolio: name, project-summary, project-details"
      },
      "typeVersion": 1
    },
    {
      "id": "dbee186d-7a77-4d2d-8194-0f50a1fb77fb",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2464,
        2384
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 464,
        "content": "#### Update Collection ID\n\n**Line 23 in this code node MUST match your collection ID.**\n\n**Also update if using different field names:**\n- Line 9: `fieldData.name` \u2192 your title field\n- Line 10: `fieldData['project-summary']` \u2192 your description field"
      },
      "typeVersion": 1
    },
    {
      "id": "c38935a9-e019-4bfd-9fee-2b9965134cbe",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3360,
        2864
      ],
      "parameters": {
        "color": 7,
        "width": 208,
        "content": "#### Summary\n\nAll optimizations are logged to Google Sheets. This is optional, remove this node if you don't need it."
      },
      "typeVersion": 1
    },
    {
      "id": "610d1216-388f-4fc2-8999-4ecbecd8c28e",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        2256
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 560,
        "content": "#### Fetch CMS Items\nRetrieves up to 100 items from your Webflow collection\n\n**Settings:**\n- **Endpoint URL**: https://mcp.webflow.com/mcp\n- **Tool**: data_cms_tool \n- **Action**: list_collection_items\n- **Context**: Brief description of what you're doing (NOT siteId)\n- **Authentication**: Remember to set up your credentials first. Instructions are on the yellow sticky note"
      },
      "typeVersion": 1
    },
    {
      "id": "0fbeed20-3c26-4684-9df4-233e95bc0fd2",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2704,
        2304
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 528,
        "content": "#### Update Items\n\nUpdates fieldData for CMS items\n\n**settings:**\n- **Input Mode**: JSON (not parameters)\n- **Action**: update_collection_items\n- **Timeout**: 60000ms (1 minute for large batches)\n- **Authentication**: Remember to set up your credentials first. Instructions are on the yellow sticky note"
      },
      "typeVersion": 1
    },
    {
      "id": "658eafc9-29fc-4159-8c9e-4c6307e9c094",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2944,
        2304
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 528,
        "content": "####  Publish Items\n\nPublishes updated items to live Webflow site\n\n**settings:**\n- **Input Mode**: JSON (not parameters)\n- **Action**: publish_collection_items\n- **Parameter name**: itemIds (case sensitive)\n- **Authentication**: Remember to set up your credentials first. Instructions are on the yellow sticky note\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "6b682a8f-c7bd-4ab3-807f-ec93299742e3",
  "connections": {
    "Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "SEO Analysis Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Set Fields": {
      "main": [
        [
          {
            "node": "Fetch CMS Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parser Model": {
      "ai_languageModel": [
        [
          {
            "node": "Structured Output Parser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Update Items": {
      "main": [
        [
          {
            "node": "Publish Items",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Publish Items": {
      "main": [
        [
          {
            "node": "Track Metrics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "SEO Analysis Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Track Metrics": {
      "main": [
        [
          {
            "node": "Save Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Set Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch CMS Items": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "SEO Analysis Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format for Update": {
      "main": [
        [
          {
            "node": "Update Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SEO Analysis Agent": {
      "main": [
        [
          {
            "node": "Format for Update",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "SEO Analysis Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}