Webflow MCP Server
Provides tools for managing Webflow sites, pages, components, CMS collections and items, custom code, and AI-powered search through Webflow's API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Webflow MCP Server show me all my Webflow sites"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Webflow's Official MCP Server
A Node.js server implementing Model Context Protocol (MCP) for Webflow using the Webflow JavaScript SDK. Enable AI agents to interact with Webflow APIs. Learn more about Webflow's Data API in the developer documentation.
ℹ Prerequisites
Related MCP server: mcp-server
▶️ Quick start (hosted on Cloudflare workers)
For Cursor:
Go to
Settings→Cursor Settings→MCPClick
+ Add New Global MCP ServerPaste the following configuration (or add the
webflowpart to your existing configuration)
{
"mcpServers": {
"webflow": {
"command": "npx mcp-remote https://mcp.webflow.com/sse"
}
}
}Save, Cursor will automatically open a new browser window showing an OAuth login page to authorize the Webflow sites you want the MCP server to have access to.
For Claude Desktop:
Open
Settings→DeveloperClick
Edit ConfigOpen
claude_desktop_config.jsonin a code editor and paste the following configuration (or add thewebflowpart to your existing configuration)
{
"mcpServers": {
"webflow": {
"command": "npx",
"args": ["mcp-remote", "https://mcp.webflow.com/sse"]
}
}
}Save the file and restart Claude Desktop (command/ctrl + R). When Claude restarts, it will automatically open a new browser window showing an OAuth login page to authorize the Webflow sites you want the MCP server to have access to.
For Windsurf:
Navigate to
Windsurf - Settings→Advanced SettingsScroll down to the
Cascadesection →Add Server→Add custom server +Paste the following configuration (or add the
webflowpart to your existing configuration)
{
"mcpServers": {
"webflow": {
"command": "npx",
"args": ["mcp-remote", "https://mcp.webflow.com/sse"]
}
}
}Click
Save, Windsurf will automatically open a new browser window showing an OAuth login page to authorize the Webflow sites you want the MCP server to have access to.
For VS Code:
Open
settings.jsonPaste the following configuration (or add the
webflowpart to your existing configuration)
{
"mcp": {
"servers": {
"webflow": {
"command": "npx",
"args": ["mcp-remote", "https://mcp.webflow.com/sse"]
}
}
}
}Savethe file. You should see astartbutton appear over the "webflow" key which you can click to open and run the auth flow. Alternatively, restart VS Code and the auth flow should start automatically.
Important note
All these methods rely on the mcp-remote npm package which is still considered experimental as of 04/30/2025.
If at any point you have issues, and want to reset your OAuth tokens, you can run the following command before restarting your MCP client:
rm -rf ~/.mcp-auth▶️ Quick start (local installation)
Get your Webflow API token
Go to Webflow's API Playground
Log in and generate a token
Copy the token from the Request Generator

Add to your AI editor
{
"mcpServers": {
"webflow": {
"command": "npx",
"args": ["-y", "webflow-mcp-server@0.6.0"],
"env": {
"WEBFLOW_TOKEN": "<YOUR_WEBFLOW_TOKEN>"
}
}
}
}For Cursor:
Go to Settings → Cursor Settings → MCP
Click
+ Add New Global MCP ServerPaste configuration
Replace
YOUR_WEBFLOW_TOKENwith the token you copied earlierSave and restart Cursor
For Claude Desktop:
Open Settings → Developer
Click
Edit ConfigOpen
claude_desktop_config.jsonin a code editor and paste configurationReplace
YOUR_WEBFLOW_TOKENwith the token you copied earlier 5. Save and restart Claude
❓ Troubleshooting
If you are having issues starting the server in your MCP client e.g. Cursor or Claude Desktop, please try the following.
Ensure you have a valid Webflow API token
Go to Webflow's API Playground, log in and generate a token, then copy the token from the Request Generator
Replace
YOUR_WEBFLOW_TOKENin your MCP client configuration with the token you copiedSave and restart your MCP client
Ensure you have the Node and NPM installed
Run the following commands to confirm you have Node and NPM installed:
node -v
npm -vClear your NPM cache
Sometimes clearing your NPM cache can resolve issues with npx.
npm cache clean --forceFix NPM global package permissions
If npm -v doesn't work for you but sudo npm -v does, you may need to fix NPM global package permissions. See the official NPM docs for more information.
Note: if you are making changes to your shell configuration, you may need to restart your shell for changes to take effect.
🛠️ Available tools
Sites
sites - list; // List all sites
sites - get; // Get site details
sites - publish; // Publish site changesPages
pages - list; // List all pages
pages - get - metadata; // Get page metadata
pages - update - page - settings; // Update page settings
pages - get - content; // Get page content
pages - update - static - content; // Update page contentComponents
components - list // List all components in a site
components - get - content // Get component content (text, images, nested components)
components - update - content // Update component content for localization
components - get - properties // Get component properties (default values)
components - update - properties // Update component properties for localizationCMS
collections - list; // List collections
collections - get; // Get collection details
collections - create; // Create a collection
collection - fields - create - static; // Create a static field
collection - fields - create - option; // Create an option field
collection - fields - create - reference; // Create a reference field
collection - fields - update; // Update a custom field
collections - items - create - item - live; // Create items
collections - items - update - items - live; // Update items
collections - items - list - items; // List collection items
collections - items - create - item; // Create collection items (staged)
collections - items - update - items; // Update collection items (staged)
collections - items - publish - items; // Publish collection itemsCustom Code
custom code - add - inline - site - script // Register an inline script for a site
custom code - get - registered - site - script - list // List all scripts registered to a site
custom code - get - applied - site - script - list //Get all scripts applied to a site
custom code - delete site custom code // Remove scripts from a siteComponents
components - list; // List all components for a site
components - content - get; // Get static content from a component definition
components - content - update; // Update content within a component definition for secondary locales
components - properties - get; // Get the default property values of a component definition
components - properties - update; // Update the default property values of a component definition for secondary localesAsk Webflow AI
ask - webflow - ai; // Search Webflow Docs using AI search🗣️ Prompts & Resources
This implementation does not include prompts or resources from the MCP specification. However, this may change in the future when there is broader support across popular MCP clients.
🚧 Development mode
If you want to run the server in development mode, you can install dependencies and run the server using the following command:
Clone and install:
git clone git@github.com:webflow/mcp-server.git
cd mcp-server
npm installAdd your token to a
.envfile at the root of the project:
# .env
WEBFLOW_TOKEN=<YOUR_WEBFLOW_TOKEN>Start development server:
npm start📄 Webflow Developer resources
⚠️ Known Limitations
Static Page Content Updates
The pages_update_static_content endpoint currently only supports updates to localized static pages in secondary locales. Updates to static content in the default locale are not supported and will result in errors.
Available Tools
32 toolsadd_inline_site_scriptC
Register an inline script for a site. Inline scripts are limited to 2000 characters.
Inputs: request (required), site_id (required).
ask_webflow_aiC
Ask Webflow AI about anything related to Webflow API.
Inputs: message (required).
collection_fields_create_optionB
Create a new option field in a CMS collection with predefined choices.
Inputs: request (required), collection_id (required).
collection_fields_create_referenceB
Create a new reference field in a CMS collection that links to items in another collection.
Inputs: request (required), collection_id (required).
collection_fields_create_staticB
Create a new static field in a CMS collection (e.g., text, number, date, etc.).
Inputs: request (required), collection_id (required).
collection_fields_updateB
Update properties of an existing field in a CMS collection.
Inputs: request (required), field_id (required), collection_id (required).
collections_createB
Create a new CMS collection in a site with specified name and schema.
Inputs: request (required), site_id (required).
collections_getB
Get detailed information about a specific CMS collection including its schema and field definitions.
Inputs: collection_id (required).
collections_items_create_itemB
Create new items in a CMS collection as drafts.
Inputs: request (required), collection_id (required).
collections_items_create_item_liveA
Create and publish new items in a CMS collection directly to the live site.
Inputs: request (required), collection_id (required).
collections_items_delete_itemA
Delete an item in a CMS collection. Items will only be deleted in the primary locale unless a cmsLocaleId is included in the request.
Inputs: itemId (required), collection_id (required), cmsLocaleIds.
collections_items_list_itemsB
List items in a CMS collection with optional filtering and sorting.
Inputs: collection_id (required), name, slug, limit, +4 more.
collections_items_publish_itemsB
Publish draft items in a CMS collection to make them live.
Inputs: itemIds (required), collection_id (required).
collections_items_update_itemsA
Update existing items in a CMS collection as drafts.
Inputs: request (required), collection_id (required).
collections_items_update_items_liveB
Update and publish existing items in a CMS collection directly to the live site.
Inputs: request (required), collection_id (required).
collections_listA
List all CMS collections in a site. Returns collection metadata including IDs, names, and schemas.
Inputs: site_id (required).
components_get_contentA
Get the content structure and data for a specific component including text, images, and nested components.
Inputs: site_id (required), component_id (required), limit, offset, +1 more.
components_get_propertiesB
Get component properties including default values and configuration for a specific component.
Inputs: site_id (required), component_id (required), limit, offset, +1 more.
components_listA
List all components in a site. Returns component metadata including IDs, names, and versions.
Inputs: site_id (required), limit, offset.
components_update_contentB
Update content on a component in secondary locales by modifying text nodes and property overrides.
Inputs: nodes (required), site_id (required), localeId (required), component_id (required).
components_update_propertiesB
Update component properties for localization to customize behavior in different languages.
Inputs: site_id (required), localeId (required), properties (required), component_id (required).
delete_all_site_scriptsD
Inputs: site_id (required).
pages_get_contentA
Get the content structure and data for a specific page including all elements and their properties.
Inputs: page_id (required), limit, offset, localeId.
pages_get_metadataA
Get metadata for a specific page including SEO settings, Open Graph data, and page status (draft/published).
Inputs: page_id (required), localeId.
pages_listA
List all pages within a site. Returns page metadata including IDs, titles, and slugs.
Inputs: site_id (required), limit, offset, localeId.
pages_update_page_settingsB
Update page settings including SEO metadata, Open Graph data, slug, and publishing status.
Inputs: body (required), page_id (required), localeId.
pages_update_static_contentA
Update content on a static page in secondary locales by modifying text nodes and property overrides.
Inputs: nodes (required), page_id (required), localeId (required).
site_applied_scripts_listA
Get all scripts applied to a site by the App. To apply a script to a site or page, first register it via the Register Script endpoints, then apply it using the relevant Site or Page endpoints.
Inputs: site_id (required).
site_registered_scripts_listA
List all registered scripts for a site. To apply a script to a site or page, first register it via the Register Script endpoints, then apply it using the relevant Site or Page endpoints.
Inputs: site_id (required).
sites_getA
Get detailed information about a specific site including its settings, domains, and publishing status.
Inputs: site_id (required).
sites_listA
List all sites accessible to the authenticated user. Returns basic site information including site ID, name, and last published date.
Inputs: no named parameters.
sites_publishB
Publish a site to specified domains. This will make the latest changes live on the specified domains.
Inputs: site_id (required), customDomains, publishToWebflowSubdomain.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 32 tools
Most tools are clearly grouped by resource (collections, components, pages, sites, scripts), but there is potential confusion between live vs draft item operations (create_item_live vs create_item) and between registered vs applied scripts. The descriptions help differentiate, but some tools like delete_all_site_scripts lack a description.
The naming mostly follows a resource_verb_noun pattern, but there are inconsistencies: 'collection_fields' vs 'collections_items' (singular vs plural), redundant 'items' in 'collections_items_create_item_live', and script tools use a mix of 'site_' prefix and verb-first names like 'add_inline_site_script'.
With 32 tools, this is above the typical threshold of 25, making it feel heavy for an agent to navigate. While each tool serves a specific Webflow API operation, the sheer number likely overwhelms agents, though it is justified by the platform's complexity.
The tool set covers most CRUD operations for collections, items, pages, and components, but lacks a dedicated get_item tool, field deletion, and script application (only registration and all-deletion). The ask_webflow_ai tool may help fill some gaps, but there are notable missing operations.
Maintenance
Related MCP Connectors
AI-powered design and management for Webflow Sites
Lets your AI build and edit websites in Xodia, a visual website builder for real code (Vite, React, Tailwind CSS or plain HTML in your own git repo): read and write site files, create pages and CMS collections, run typecheck, design and link checks, take screenshots, manage forms and translations, and pick up change requests the user sends from the visual editor. Sign in once with your Xodia account (OAuth). Free plan, no card needed. Setup: https://xodia.ai/ai/mcp
Web data for agents. Extract web pages, crawl websites, discover URLs, and search the web.
AI-powered web automation. Navigate websites using AI agents for one page or a thousand
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to interact with Webflow's Data API and Designer, supporting site and CMS content management, page updates, and app bridging via OAuth or an API token.511 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to interact with the Webflow Data API for managing site content, CMS data, and design workflows.511 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to interact with the Webflow Data API and Designer, using OAuth or an API token for site, page, content, and design workflows.511 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to interact with the Webflow Data API to manage sites, CMS content, and Designer app connections through natural language.511 npmMIT