From webflow-skills
Safely publishes Webflow sites: detects pages and CMS items changed since last publish, runs pre-publish checks for drafts and issues, requires explicit confirmation before live deployment.
npx claudepluginhub webflow/webflow-skills --plugin webflow-skillsThis skill uses the workspace's default tool permissions.
Publish a Webflow site with comprehensive preview, validation, and explicit confirmation workflow.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Publish a Webflow site with comprehensive preview, validation, and explicit confirmation workflow.
ALWAYS use Webflow MCP tools for all operations:
data_sites_tool with action list_sites for listing available sitesdata_sites_tool with action get_site for detailed site informationdata_pages_tool with action list_pages for retrieving all pagesdata_cms_tool with action get_collection_list for listing CMS collectionsdata_cms_tool with action list_collection_items for checking draft itemsdata_sites_tool with action publish_site for publishing the sitewebflow_guide_tool to get best practices before startingcontext parameter (15-25 words, third-person perspective)data_sites_tool with action get_site to retrieve:
lastUpdated vs lastPublished timestampslastPublished is null, site has never been publishedlastUpdated > lastPublished, site has unpublished changesdata_pages_tool with action list_pageslastUpdated with site's lastPublisheddata_cms_tool with action get_collection_listcollections_items_list_itemsisDraft: truedata_sites_tool with action publish_site with correct parameterscustomDomains as empty array if no custom domainspublishToWebflowSubdomain based on user choicelastPublished fieldlastPublished timestamp updatedUser prompt:
Publish my site
Step 1: Site Selection
๐ Safe Publish - Site Selection
Available Sites:
1. **MCP Demo#1**
- Last published: January 9, 2026 at 20:05:38 UTC
- Last updated: January 9, 2026 at 20:49:37 UTC
- โ ๏ธ **Has unpublished changes** (updated 44 minutes after last publish)
2. **MCP Demo#2**
- Last updated: January 9, 2026 at 19:32:53 UTC
- Status: Not yet published
Which site would you like to publish? (1-2)
Step 2: Change Detection & Preview
๐ Publish Preview: MCP Demo#1
**Last published:** January 9, 2026 at 20:05:38 UTC
**Time since last publish:** ~1 hour 5 minutes
---
## Changes to Publish:
### ๐ Pages Modified: 1
โโโ **Home** (/)
- SEO title updated to "Home Page"
- Last modified: 21:10:52 UTC
### ๐ CMS Items: 2 draft items to publish
**Blog Posts (2 drafts):**
1. **"Why Webflow MCP Will Transform Your Workflow in 2026!"**
- Status: Draft
- Created: 20:24:44 UTC
- Last modified: 21:11:03 UTC
- Featured: Yes
- Slug: webflow-mcp-transform-workflow-2026
2. **"Webflow E-commerce: The Future of Online Shopping in 2026!"**
- Status: Draft
- Created: 20:05:24 UTC
- Last modified: 21:11:11 UTC
- Featured: Yes
- Slug: webflow-ecommerce-2026
---
**Pre-Publish Checks:**
- โ
No broken references detected
- โ
All required fields populated
- โ ๏ธ 2 draft items will become published
**Publish Targets:**
- Webflow subdomain: mcp-demo-1-e88499.webflow.io
- Custom domains: None configured
**โ ๏ธ Type "publish" to make these changes live.**
Step 3: After user types "publish"
๐ Publishing MCP Demo#1...
Progress: โโโโโโโโโโโโโโโโโโโโ 100%
โ
Published Successfully!
**Site:** MCP Demo#1
**Published at:** 2026-01-09 21:12:52 UTC (January 9, 2026 at 21:12:52)
---
## What Went Live:
### ๐ Pages (1)
- โ
Home (/) - SEO title updated
### ๐ Blog Posts (2)
- โ
"Why Webflow MCP Will Transform Your Workflow in 2026!"
- โ
"Webflow E-commerce: The Future of Online Shopping in 2026!"
---
## Verification:
- โ
**Site accessible:** Yes
- โ
**URL:** https://mcp-demo-1-e88499.webflow.io
- โ
**Status:** Page loading successfully
- โ
**Content delivery:** Webflow CDN responding
---
**๐ Your site is now live with all changes published!**
All unpublished changes have been successfully published to the Webflow subdomain. The 2 draft blog posts are now visible on your site.
Alternative: With Warnings
๐ Publish Preview: Company Site
**Last published:** January 8, 2026 at 14:30:00 UTC
---
## Changes to Publish:
### ๐ Pages Modified: 3
โโโ **About** (/about)
โ โโโ Content updated
โโโ **Contact** (/contact)
โ โโโ Form fields changed
โโโ **Home** (/)
โโโ Hero section updated
### ๐ CMS Items
**Blog Posts:**
- 5 published items modified
- 2 draft items (will NOT be published automatically)
**Products:**
- 3 new items created
- 1 item updated
---
**Pre-Publish Checks:**
โ ๏ธ **Warnings Found:**
1. **Missing SEO Metadata (2 pages):**
- /about - No meta description
- /contact - No meta title or description
- ๐ก Recommendation: Add SEO metadata before publishing
2. **Draft Items (2):**
- "Upcoming Product Launch" (Blog Post)
- "Holiday Sale Announcement" (Blog Post)
- โ ๏ธ These will remain unpublished
3. **Large Change Set:**
- 3 pages + 9 CMS items will be updated
- Consider reviewing changes carefully
**Publish Targets:**
- Webflow subdomain: company-site.webflow.io
- Custom domains: example.com, www.example.com
---
**Would you like to:**
1. Proceed with publish (type "publish")
2. Cancel and review (type "cancel")
Site Status Check:
sites_getlastUpdated vs lastPublished to detect unpublished changeslastPublished is null, warn "First publish - entire site will go live"Timestamp Handling:
Page Change Detection:
lastUpdated with site lastPublishedlastUpdated > lastPublishedCMS Item Detection:
isDraft field for all itemslastUpdated with site lastPublishedCollections to Check:
collections_listcollections_items_list_itemsRequired Checks:
Broken References:
Missing Required Fields:
SEO Completeness:
seo.title or seo.descriptionDraft Item Warning:
Warning Levels:
When to Block Publish:
Confirmation Requirements:
Publish API Usage:
// Correct format for sites_publish
{
"site_id": "site-id-here",
"publishToWebflowSubdomain": true, // or false
"customDomains": [] // MUST be array, even if empty
}
// If custom domains exist:
{
"site_id": "site-id-here",
"publishToWebflowSubdomain": false,
"customDomains": ["example.com", "www.example.com"]
}
Domain Selection:
Error Handling:
customDomains validation error: Ensure it's an array400 Bad Request: Check request format403 Forbidden: Check site publish permissions500 Server Error: Retry once after 5 seconds, then report failurePost-Publish Verification:
Fetch Updated Site Info:
sites_get againlastPublished timestamp updatedSite Accessibility Check:
Custom Domain Checks:
Verification Failure Handling:
Success Report Format:
โ
Published Successfully!
Site: [Site Name]
Published at: [ISO Timestamp] ([Human Readable])
What Went Live:
- X pages modified
- Y CMS items published
- Z draft items promoted to published
Verification:
โ
Site accessible
โ
URL: [primary URL]
โ
Response time: [Xms]
[If custom domains]
Custom Domains:
โ
example.com - accessible
โ ๏ธ www.example.com - propagating (may take 2-3 minutes)
Always:
Never:
Edge Cases:
No Changes to Publish:
โน๏ธ No Changes to Publish
Last published: January 9, 2026 at 20:05:38 UTC
Last updated: January 9, 2026 at 20:05:38 UTC
All changes are already published. Your site is up to date!
First Publish (Never Published Before):
โ ๏ธ First Publish Warning
This site has NEVER been published before.
This will make the ENTIRE site publicly accessible:
- All pages (2 pages)
- All CMS items (47 items across 3 collections)
- All assets
Are you ready to make this site live?
Type "publish" to proceed, or "cancel" to abort.
Publish to Staging Subdomain:
Partial Publish Not Supported:
For Large Sites:
Caching:
Timeouts:
Clear and Actionable:
โ Bad:
"Publish failed"
โ Good:
"Publish Failed: Validation Error
The Webflow API returned an error:
- customDomains parameter must be an array
This is likely a configuration issue. Retrying...
Common Errors:
Validation Error (customDomains):
customDomains: [] is an arraySite Not Found:
Insufficient Permissions:
Publish Already in Progress: