Publish a Webflow site with a plan-confirm-publish workflow. Shows what changed since last publish, runs pre-publish checks, and requires explicit confirmation before going live.
npx skills add https://github.com/webflow/webflow-skills --skill webflow-mcp:safe-publish
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_listdata_cms_tool with action list_collection_itemsisDraft: true10. Generate detailed preview:
11. Ask for publish scope:
12. Require explicit confirmation:
13. Execute publish:
data_sites_tool with action publish_site with correct parameterscustomDomains as empty array if no custom domainspublishToWebflowSubdomain based on user choice14. Capture publish timestamp:
lastPublished field15. Verify publish success:
lastPublished timestamp updated16. Generate success report:
17. Handle failures gracefully:
User 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:
data_sites_tool with action get_sitelastUpdated 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:
data_cms_tool with action get_collection_listdata_cms_tool with action list_collection_itemsRequired Checks:
seo.title or seo.descriptionWarning Levels:
When to Block Publish:
Confirmation Requirements:
Publish API Usage:
// Correct format for data_sites_tool with action publish_site
{
"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:
data_sites_tool with action get_site againlastPublished timestamp updatedVerification 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:
customDomains: [] is an arrayIntegration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take webflow/webflow-mcp:safe-publish from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.