6# Bulk CMS Update
7
8Create or update multiple CMS items with comprehensive validation, granular approval, and rollback capability.
9
10## Important Note
11
12**ALWAYS use Webflow MCP tools for all operations:**
13- Use Webflow MCP's data_sites_tool with action list_sites for listing available sites
14- Use Webflow MCP's data_cms_tool with action get_collection_list for listing CMS collections
15- Use Webflow MCP's data_cms_tool with action get_collection_details for fetching collection schemas
16- Use Webflow MCP's data_cms_tool with action list_collection_items for retrieving existing items
17- Use Webflow MCP's data_cms_tool with action create_collection_items for creating items (draft or published)
18- Use Webflow MCP's data_cms_tool with action update_collection_items for updating items (draft or published)
19- Use Webflow MCP's data_cms_tool with action publish_collection_items for publishing draft items
20- Use Webflow MCP's webflow_guide_tool to get best practices before starting
21- DO NOT use any other tools or methods for Webflow operations
22- All tool calls must include the required context parameter (15-25 words, third-person perspective)
23
24## Instructions
25
26### Phase 1: Site & Collection Selection
271. **Get site**: Identify the target site. If user does not provide site ID, ask for it.
282. **List collections**: Use Webflow MCP's data_cms_tool with action get_collection_list to show available collections
293. **Ask user to select collection**: User specifies which collection to work with
304. **Fetch collection schema**: Use Webflow MCP's data_cms_tool with action get_collection_details to retrieve:
31 - All field definitions with types
32 - Required vs optional fields
33 - Field validations (max length, patterns, etc.)
34 - Reference field targets
35
36### Phase 2: Data Collection & Parsing
375. **Ask operation type**: Clarify what user wants to do:
38 - Create new items only
39 - Update existing items only
40 - Both create and update
416. **Receive data from user**: Accept data in flexible formats:
42 - Structured format (JSON-like)
43 - Natural language descriptions
44 - CSV-style data
45 - Bullet lists
467. **Parse and normalize**: Convert user data into structured format
478. **Fetch existing items** (if updates involved): Use Webflow MCP's data_cms_tool with action list_collection_items to get current data
48
49 **IMPORTANT - Efficient Item Lookup:**
50 - When searching for specific items by name, ALWAYS use the name parameter to filter (e.g., name: "Pikachu")
51 - When searching by slug, use the slug parameter to filter
52 - NEVER fetch all items first and then search through the results - this wastes API calls and tokens
53 - Only fetch the full list when you need to display all items or don't know which specific items to target
54
55### Phase 3: Validation & Analysis
569. **Validate all data**:
57 - **Field names**: Check all field names exist in schema
58 - **Required fields**: Ensure all required fields are provided
59 - **Field types**: Validate data types match schema
60 - **Constraints**: Check max lengths, patterns, allowed values
61 - **Slugs**: Ensure slugs are unique and valid
62 - **Reference fields**: Verify referenced items exist
6310. **Detect conflicts**:
64 - Duplicate slugs (within batch or with existing items)
65 - Missing required fields
66 - Invalid data types
67 - Constraint violations
6811. **Analyze impact**:
69 - Count creates vs updates
70 - Identify which fields will change
71 - Calculate batch size and processing time
72
73### Phase 4: Preview & Granular Approval
7412. **Generate detailed preview**:
75 - Show each item with validation status
76 - Display warnings for any issues
77 - For updates, show diffs (old → new)
78 - For creates, show all field values
79 - Number each item for selective approval
8013. **Present granular approval options**:
81 - Allow user to select specific items to process
82 - Options: "all", "none", specific numbers, number ranges
83 - Show estimated processing time
8414. **Offer publish options**:
85 - Publish immediately (use *_live endpoints)
86 - Create as drafts (use regular endpoints + manual publish)
87
88### Phase 5: Execution & Reporting
8915. **Store rollback data**: Before any changes, save:
90 - Original values for all updated items
91 - Timestamp
92 - Operation details
9316. **Process in batches**:
94 - Maximum 50 items per batch
95 - Show progress indicator
96 - Handle rate limits gracefully
9717. **Execute operations**: Use appropriate Webflow MCP tools based on user choice
9818. **Handle errors gracefully**:
99 - Continue processing on single item failures
100 - Track successes and failures separately
101 - Provide detailed error messages
10219. **Generate comprehensive report**:
103 - Summary (success/failure counts)
104 - Detailed results per item
105 - Item IDs for created/updated items
106 - Error details for failed items
10720. **Offer rollback option**: Allow user to undo changes if needed
108
109## Examples
110
111**User prompt:**
112```
113Add 2 blog posts about Webflow MCP and update the first blog to say "Top" instead of "Best"
114```
115
116**Step 1: Site & Collection Selection**
117```
118📋 Bulk CMS Update Setup
119
120Available Sites:
1211. MCP Demo#1
1222. MCP Demo#2
1233. MCP Demo#3
124
125Please select a site (1-3):
126```
127
128*User selects: 1*
129
130```
131Available Collections in MCP Demo#1:
132└── Blog Posts (9 items)
133 Fields: name, slug, post-body, post-summary, main-image, thumbnail-image, featured, color
134
135Proceed with Blog Posts collection? (yes/no)
136```
137
138*User confirms: yes*
139
140**Step 2: Data Collection**
141```
142🔍 Collection Schema: Blog Posts
143
144Required Fields:
145- name (PlainText, max 256 chars)
146- slug (PlainText, max 256 chars, alphanumeric only)
147
148Optional Fields:
149- post-body (RichText)
150- post-summary (PlainText)
151- main-image (Image)
152- thumbnail-image (Image)
153- featured (Switch, true/false)
154- color (Color, hex format)
155
156I'll parse your request:
157- Create 2 new posts about Webflow MCP
158- Update first post: "Best" → "Top"
159
160Generating items...
161```
162
163**Step 3: Validation & Preview**
164```
165📋 Preview: Bulk CMS Update
166
167Collection: Blog Posts
168Operations: Create 2 items + Update 1 item
169
170---
171
172### 🆕 Items to Create (2)
173
174[1] ✓ NEW POST
175 name: "Webflow MCP: The Future of Web Development"
176 slug: "webflow-mcp-future-web-development"
177 post-summary: "Discover how Webflow MCP is revolutionizing..."
178 post-body: "<h1>The Future is Here</h1><p>..."
179 featured: true
180 color: "#9B59B6"
181 ✅ All validations passed
182
183[2] ✓ NEW POST
184 name: "Why Webflow MCP Will Transform Your Workflow in 2026"
185 slug: "webflow-mcp-transform-workflow-2026"
186 post-summary: "Learn how Webflow MCP's integration..."
187 post-body: "<h1>Transform Your Workflow</h1><p>..."
188 featured: true
189 color: "#3498DB"
190 ✅ All validations passed
191
192---
193
194### ✏️ Items to Update (1)
195
196[3] ✓ UPDATE EXISTING
197 Item ID: 69615f84fc6ce1aa444d24d5
198 Slug: why-webflow-is-best-2026-ai
199
200 Changes:
201 name: "Why Webflow is the Best Choice for 2026" → "Why Webflow is the Top Choice for 2026"
202
203 ✅ All validations passed
204
205---
206
207**Summary:**
208- ✅ 2 items will be created
209- ✅ 1 item will be updated
210- ⚠️ 0 warnings
211- ❌ 0 errors
212
213**Publish Options:**
2141. Publish immediately (recommended)
2152. Save as drafts
216
217Which items would you like to process?
218- Type "all" to process all 3 items
219- Type numbers to skip (e.g., "2" to skip item 2)
220- Type "none" to cancel
221
222Select publish option (1/2): _
223Select items: _
224```
225
226*User selects: 1, all*
227
228```
229⚠️ You're about to:
230- Create 2 new blog posts (published live)
231- Update 1 existing blog post (changes published live)
232
233Type "confirm" to proceed.
234```
235
236*User confirms: confirm*
237
238**Step 4: Execution & Results**
239```
240🔄 Processing bulk update...
241
242Creating items: ██████████ 100% (2/2)
243Updating items: ██████████ 100% (1/1)
244
245✅ Bulk CMS Update Complete!
246
247---
248
249### 🆕 Created Items (2)
250
251✓ [1] "Webflow MCP: The Future of Web Development"
252 ID: 6961640c66de07bed9aacf3e
253 Slug: webflow-mcp-future-web-development
254 Published: Jan 9, 2026, 8:24 PM
255
256✓ [2] "Why Webflow MCP Will Transform Your Workflow in 2026"
257 ID: 6961640c66de07bed9aacf41
258 Slug: webflow-mcp-transform-workflow-2026
259 Published: Jan 9, 2026, 8:24 PM
260
261---
262
263### ✏️ Updated Items (1)
264
265✓ [3] "Why Webflow is the Top Choice for 2026"
266 ID: 69615f84fc6ce1aa444d24d5
267 Changed: title updated
268 Published: Jan 9, 2026, 8:24 PM
269
270---
271
272**Summary:**
273- ✅ 2 items created successfully
274- ✅ 1 item updated successfully
275- ❌ 0 failures
276- ⏱️ Completed in 3.2 seconds
277
278**Total Items:** 11 (was 9)
279
280📋 Rollback Available:
281Last update: 3 items modified just now
282Type "undo" within 5 minutes to revert all changes
283```
284
285**Alternative: With Validation Warnings**
286```
287📋 Preview: Bulk CMS Update
288
289[1] ⚠️ NEW POST
290 name: "Test Post"
291 slug: "test"
292 post-summary: "Hi"
293 ⚠️ Warning: post-summary too short (< 20 chars) - may affect SEO
294 ⚠️ Warning: slug too generic - consider more descriptive slug
295 ⚠️ Warning: missing post-body - content will be empty
296 ✅ Required fields present (can proceed)
297
298[2] ❌ NEW POST
299 name: "Another Post!!!"
300 slug: "another post"
301 ❌ Error: slug contains spaces (must be alphanumeric with hyphens only)
302 ❌ Error: name contains special characters not allowed
303 🔴 Cannot proceed - fix errors first
304
305---
306
307**Summary:**
308- ✅ 1 item can be created (with warnings)
309- ❌ 1 item has errors (cannot create)
310
311Fix item 2 or skip it? (fix/skip)
312```
313
314## Guidelines
315
316### Phase 1: Critical Requirements
317
318**Site & Collection Selection:**
319- Always fetch actual site list using data_sites_tool with action list_sites
320- Never assume site IDs
321- Show collection names and item counts
322- Display field schema before accepting data
323- Confirm collection selection with user
324
325### Phase 2: Data Parsing
326
327**Flexible Input Formats:**
328Accept data in multiple formats:
329
3301. **Structured (JSON-like):**
331```
332CREATE:
333- name: "Post Title"
334 slug: "post-slug"
335 featured: true
336```
337
3382. **Natural Language:**
339```
340"Add a blog post called 'Getting Started' with slug 'getting-started'"
341```
342
3433. **CSV-style:**
344```
345name,slug,featured
346"Post 1","post-1",true
347"Post 2","post-2",false
348```
349
3504. **Bullet Lists:**
351```
352- Post 1: "Title" (slug: title-slug)
353- Post 2: "Another" (slug: another-slug)
354```
355
356**Parsing Rules:**
357- Be lenient with format variations
358- Infer missing optional fields
359- Ask for clarification if ambiguous
360- Never assume required field values
361
362**Efficient Item Lookup:**
363When fetching existing items for updates, use filter parameters to minimize API calls:
364
365```
366# Good - Filter by name when you know the item name
367data_cms_tool(action: "list_collection_items", collection_id, name: "Pikachu")
368
369# Good - Filter by slug when you know the slug
370data_cms_tool(action: "list_collection_items", collection_id, slug: "pikachu")
371
372# Bad - Fetching all items then searching through results
373data_cms_tool(action: "list_collection_items", collection_id) # Returns 100 items
374# Then manually searching for "Pikachu" in results...
375```
376
377- ALWAYS use name or slug parameters when searching for specific items
378- This reduces API calls, response size, and token usage
379- Only fetch unfiltered lists when displaying all items or when the target is unknown
380
381### Phase 3: Validation Rules
382
383**Field Name Validation:**
384- Check all field names exist in schema
385- Case-sensitive matching
386- Suggest corrections for typos
387- Example: "autor" → Did you mean "author"?
388
389**Required Fields:**
390- name and slug are ALWAYS required for Webflow CMS
391- Check collection-specific required fields from schema
392- List all missing required fields clearly
393- Cannot proceed if required fields missing
394
395**Field Type Validation:**
396
397**PlainText:**
398- Check max length constraints
399- Validate patterns if specified
400- No HTML allowed
401
402**RichText:**
403- Must be valid HTML
404- Check for unclosed tags
405- Allow common HTML elements
406
407**Image/File:**
408- Accept file IDs or URLs
409- Validate file exists (if possible)
410- Optional alt text
411
412**Switch (Boolean):**
413- Accept: true/false, yes/no, 1/0
414- Normalize to boolean
415
416**Color:**
417- Must be hex format (#RRGGBB)
418- Validate hex characters
419- Example: #FF5733 ✓, red ✗
420
421**Reference Fields:**
422- Must reference existing item IDs
423- Validate referenced items exist
424- Show referenced item names for clarity
425
426**Slug Validation:**
427- CRITICAL: Must be alphanumeric with hyphens only
428- No spaces, underscores, or special characters
429- Max 256 characters
430- Must be unique (check against existing + batch)
431- Auto-suggest slugs from titles if missing
432- Example:
433 - ❌ "My Post!" → ⚠️ Contains special characters
434 - ✅ "my-post" → Valid
435
436**Constraint Validation:**
437- Max length: Warn if approaching limit, error if exceeds
438- Patterns: Test regex patterns from schema
439- Allowed values: Check against enumerated options
440
441### Phase 4: Preview & Approval
442
443**Preview Format:**
444
445For **Create Operations:**
446```
447[1] ✓ NEW POST
448 field1: "value1"
449 field2: "value2"
450 field3: "value3"
451 ✅ All validations passed
452```
453
454For **Update Operations:**
455```
456[2] ✓ UPDATE EXISTING
457 Item ID: xxx
458 Slug: existing-slug
459
460 Changes:
461 field1: "old value" → "new value"
462 field2: (no change)
463 field3: "old" → "new"
464
465 ✅ All validations passed
466```
467
468For **Items with Warnings:**
469```
470[3] ⚠️ NEW POST
471 name: "Title"
472 ⚠️ Warning: Missing optional field 'post-body'
473 ⚠️ Warning: Slug may be too generic
474 ✅ Can proceed (warnings only)
475```
476
477For **Items with Errors:**
478```
479[4] ❌ NEW POST
480 name: "Title!!!"
481 slug: "bad slug"
482 ❌ Error: slug contains spaces
483 ❌ Error: name has special characters
484 🔴 Cannot proceed - must fix errors
485```
486
487**Granular Approval:**
488- Number each item: [1], [2], [3]...
489- Allow selective processing
490- Accept formats:
491 - "all" - process everything
492 - "none" - cancel operation
493 - "1,3,5" - process items 1, 3, and 5
494 - "1-5" - process items 1 through 5
495 - "2" - skip only item 2, process rest
496
497**Publish Options:**
498- Immediate publish: Use *_live endpoints (recommended)
499- Draft mode: Use regular endpoints, publish later
500- Explain implications of each choice
501
502### Phase 5: Execution & Reporting
503
504**Batch Processing:**
505- Maximum 50 items per batch
506- Show progress bar:
507 ```
508 Processing: ████████░░ 80% (40/50 items)
509 ```
510- Estimated time remaining
511- Handle rate limits (pause/retry)
512
513**Error Handling:**
514
515**For Single Item Failures:**
516```
517Processing item 3/10...
518❌ Failed: "Post Title"
519 Error: Slug already exists
520 → Skipping to next item
521```
522
523**Continue Processing:**
524- Don't fail entire batch for one error
525- Track all successes and failures
526- Report both separately
527
528**For Critical Failures:**
529```
530❌ Critical Error: API connection lost
531
532Items processed before error: 7/50
533- 5 created successfully
534- 2 updated successfully
535- 43 not processed
536
537Retry failed items? (yes/no)
538```
539
540**Success Report Format:**
541```
542✅ Operation Complete
543
544Created: 25 items
545- Show first 5 with IDs
546- "[+20 more]" if > 5
547
548Updated: 10 items
549- Show first 5 with IDs
550- "[+5 more]" if > 5
551
552Failed: 2 items
553- "Item Name": Error reason
554- "Item Name": Error reason
555
556Total time: 12.5 seconds
557Items per second: 2.8
558```
559
560**Rollback Capability:**
561
562**Store Before Changes:**
563```json
564{
565 "timestamp": "2026-01-09T20:24:44Z",
566 "operations": [
567 {
568 "type": "update",
569 "itemId": "xxx",
570 "originalValues": {
571 "name": "Old Title",
572 "featured": false
573 },
574 "newValues": {
575 "name": "New Title",
576 "featured": true
577 }
578 }
579 ]
580}
581```
582
583**Offer Rollback:**
584```
585📋 Rollback Available:
586Last update: 15 items modified 2 minutes ago
587
588Rollback will:
589- Restore 10 updated items to previous values
590- Delete 5 newly created items
591
592⚠️ Type "undo" to rollback all changes
593⚠️ Rollback expires in 3 minutes
594```
595
596### Performance Optimization
597
598**Batch Size:**
599- Default: 50 items per batch
600- Adjust based on field complexity
601- Heavy images: 20 items per batch
602- Simple text fields: 100 items per batch
603
604**Progress Indicators:**
605```
606Creating items...
607Batch 1/3: ████████████████████ 100% (50/50)
608Batch 2/3: ████████████████████ 100% (50/50)
609Batch 3/3: ██████░░░░░░░░░░░░░░ 30% (15/50)
610```
611
612**Rate Limiting:**
613- Respect Webflow API rate limits
614- Pause between batches if needed
615- Show user why waiting
616- Retry failed requests automatically (max 3 attempts)
617
618### Error Messages
619
620**Clear and Actionable:**
621
622❌ **Bad:**
623```
624"Error: validation failed"
625```
626
627✅ **Good:**
628```
629"Validation Error on item 3:
630 - Slug 'my post' contains spaces
631 - Change to: 'my-post' (alphanumeric with hyphens only)"
632```
633
634**Error Categories:**
635- 🔴 **Critical**: Cannot proceed at all (API down, invalid auth)
636- ❌ **Error**: This item cannot be processed (fix or skip)
637- ⚠️ **Warning**: Can proceed but not recommended (missing optional fields)
638- 💡 **Suggestion**: Best practices (slug too generic, summary too short)
639
640### Best Practices
641
642**Always:**
643- ✅ Show preview before any changes
644- ✅ Require explicit confirmation
645- ✅ Validate all data thoroughly
646- ✅ Process in batches for large operations
647- ✅ Report successes and failures separately
648- ✅ Offer rollback for recent changes
649- ✅ Use granular approval for flexibility
650
651**Never:**
652- ❌ Apply changes without user confirmation
653- ❌ Fail entire batch for single item error
654- ❌ Assume field names or values
655- ❌ Process without validating first
656- ❌ Hide validation warnings from user
657
658**Edge Cases:**
659- Duplicate slugs: Auto-append number (post-title-2)
660- Missing optional fields: Leave empty (don't invent values)
661- Large batches: Warn about processing time
662- Reference fields: Validate targets exist
663- Image fields: Accept URLs or file IDs
664
665**User Experience:**
666- Show collection schema upfront
667- Number items for easy reference
668- Use visual hierarchy (├── └──)
669- Provide actionable error messages
670- Estimate processing time
671- Allow cancellation mid-process
672