This is an overview of the changes to the Webflow APIs and related tools. To filter the list, select one or more tags.
MCP v1.2 - Elements, styles, variables, and more
MCP v1.2 - Elements, styles, variables, and more
Version 1.2 of the Webflow MCP server adds new element tools, expanded CSS coverage, full variable management, webhook support, and MCP Bridge App improvements. If you are already using the MCP server, your agents and prompts automatically use this new version.
Elements
-
Element builder v2: Agents can now construct arbitrarily deep element trees in a single call. The previous 3-level depth limit is removed, execution is faster, and more element types are supported.
-
Before/after placement: Element builder, WHTML builder, and Component tools now support
beforeandafterpositioning on creation. This gives agents precise control over where elements are inserted relative to siblings. -
Create elements from raw HTML: A new tool accepts a raw HTML string and converts it directly to Webflow elements.
-
Element query: A new query tool lets agents search and filter elements by type, class, tag, or attribute. Results are returned as a structured tree, not a flat array.
-
Cleaner
get_all_elementsresponse: The response is now a hierarchical tree with only essential data per node, reducing payload size. -
Child depth control on
get_selected_element: A new optionaldepthparameter controls how many levels of children are returned. When omitted, the parameter defaults to the existing behavior. -
remove_element: Agents can now delete elements from the canvas. The tool returns a clear error when the target element does not exist.
Components
-
Component editor with slot support: A new component editor supports no depth limit and slot definition on edit, mirroring the capabilities of element builder v2.
-
unregister_component: Agents can now remove a component from a site. The tool returns a clear error when the component does not exist or has active instances. -
Read component instance slots: Agents can now read all slots defined on a component instance.
Styles
-
500+ CSS properties: The Style tool now covers 500+ CSS properties. Properties that were previously unsupported no longer fail silently.
-
Improved style search: Style search now supports filtering by property, value, tag, and class name, returning more relevant results with less noise.
-
remove_style: Agents can now delete a style from a site. The tool returns a clear error when the style does not exist or is currently in use.
Variables
-
Custom variable creation: Agents can now create custom variables, including support for
color-mix()andcalc()expressions. -
Read custom variables: Agents can now read all custom variables defined on a site, including their expressions and resolved values.
-
Search variables: A new search action on the Variable tool lets agents filter variables by name, type, or collection ID.
-
Rename and delete variables: Agents can now rename or delete variables. The tool returns a clear error when the variable does not exist or is currently in use.
Webhooks
data_webhook_tool: A new tool covers webhook management.
Enterprise
list_site_activity: A new action on the Enterprise tool lets agents query site activity logs.
MCP Bridge App
-
Improved UI and observability: The MCP Bridge App now surfaces tool execution stages, status, and timing in real time. Agents and engineers can view tool arguments and responses, export logs, and access quick links for common debugging actions.
-
Improved heartbeat: The heartbeat interval is reduced to prevent premature timeouts. Agents are notified on connection loss and can reconnect without losing state.
Bug fixes
-
Asset: corrupt asset silent failure: Tools that accept asset IDs now return a clear error when the asset does not exist, instead of failing silently. This update applies across all tools.
-
CMS: locale ID required error: Fixed an error where the CMS tool incorrectly required a locale ID in contexts where it was not needed.
-
Site: custom domain required error on publish: Fixed an error where publishing failed when no custom domain was set on the site.
-
Styles: combo class creation bug: Creating a combo class when the base class already exists no longer fails. This behavior now matches the expected in-product behavior.
Resources
- Getting started guide - Setup instructions
- How it works - Tool reference and capabilities
- Skills - Agent skills
- Prompt library - Example prompts
New component methods
These new functions are now available in the Designer API:
webflow.getCurrentComponent(): Get the component that is currently being edited (Beta)element.getParentComponent(): Get the component that contains a given element (Beta)component.getSettings(): Get the name, group, and description of a component (Beta)component.setSettings(): Update one or more settings on a component (Beta)
Beta
These methods are in public beta and may change with future releases.
Getting the selected component
You can now retrieve the component that is currently being edited with the new webflow.getCurrentComponent() function (Beta).
If no component is being edited, the method returns null.
For more information, see Get the selected component.
Getting an element’s parent component
You can now retrieve the component that directly contains a given element with the new element.getParentComponent() function (Beta).
If the element is not inside a component, the method returns null.
For more information, see Get the parent component.
Getting and setting component settings
The new component.getSettings() and component.setSettings() functions let you read and update a component’s name, group, and description in a single call:
For more information, see:
Search for Components
You can now use the webflow.searchComponents(options) method (Beta) to search for Components by name or description.
If you don’t provide a search parameter, the method returns all Components.
If you provide a string search parameter as in the following example, the method returns Components with matching names or descriptions.
Beta
These methods are in public beta and may change with future releases.
For more information, see Search for Components.
Open a canvas
You can now programmatically open a Component’s canvas or navigate to a page with the new webflow.openCanvas() method (Beta).
Beta
These methods are in public beta and may change with future releases.
Previously, Designer Extensions and MCP agents that needed to modify a Component’s internal structure had to rely on the user manually navigating to the component canvas. The openCanvas() method removes that manual step and enables fully automated Component workflows.
openCanvas() accepts a Component ID, a Component reference, or a ComponentElement (instance) reference to open the component canvas.
It also accepts a page ID or Page reference to navigate to a page — equivalent to calling webflow.switchPage().
For more information, see Open a canvas.
Updates to components API
These new and updated functions are now available in the Designer API:
webflow.getComponentByName(name): Get a component by its name and optionally its group (Beta)component.getVariants(): Get all variants of a component (Beta)component.getSelectedVariant(): Get all variants of a component (Beta)
Beta
These methods are in public beta and may change with future releases.
Retrieving a component by name
You can now retrieve a component by its name and optionally its group with the new webflow.getComponentByName() function (Beta):
For more information, see Get component by name (Beta).
Getting component variants
The new functions component.getVariants() and component.getSelectedVariant() get the variants of a component and the selected variant of a component, as in these examples:
For more information, see:
Get all variants of a component: Get all variants of a componentGet selected variant: Get all variants of a component
Updates to components and elements API
These new and updated functions are now available in the Designer API:
webflow.registerComponent(): You can now create a component without passing a root element (Beta)webflow.getComponent(id): This new function returns a component by its ID (Beta)component.getInstanceCount(): This new function gets the total number of (Beta)instances of a component across an entire site
Also, these functions are updated to accept a tag name such as div, h2, or section instead of only a component or element preset:
element.before(newElement)element.after(newElement)element.prepend(newElement)element.append(newElement)
Beta
These methods are in public beta and may change with future releases.
Creating functions without passing a root element
You can now create a component with the webflow.registerComponent() function without passing a root element.
Instead, you can pass an object with the name for the new component and optionally a group and description, as in this example:
For more information, see Create a component.
Getting components by ID
Previously, to access a component in the Designer API, you had to get a list of components with the webflow.getAllComponents() function and filter by ID.
Now you can use the webflow.getComponent(id) function to get a component by its ID, as in this example:
For more information, see Get component by ID.
Getting the number of instances of a component
You can now get the total number of instances of a component across an entire site with the webflow.getInstanceCount() function:
For more information, see Get component instance count.
Inserting elements by tag name
Previously, when you used one of these functions to insert an element, you had to pass a component object or a preset from the webflow.elementPresets object:
element.before(newElement)element.after(newElement)element.prepend(newElement)element.append(newElement)
Now, you can pass an element to create by the name of the tag, such as div, h2, or section, as in these examples:
For more information, see:
Renaming exported custom attributes
Similar to how it renames exported components and props, DevLink now renames or filters out exported custom attributes to ensure that the exported React code is valid.
- HTML5 standard names such as
tabindexandmaxlengthare capitalized according to React standards, in this exampletabIndexandmaxLength - Attributes that have a React equivalent, such as
classandfor, are converted to the React equivalent, in this exampleclassNameandhtmlFor - Attributes that match event handler names such as
onClickandonMouseOverare filtered out, regardless of case - Attributes that start with numbers are filtered out
- Attributes that are incomplete, such as
data-andaria-are filtered out - Attributes named with an empty string are filtered out
- Attributes containing invalid characters, such as
my-😀-attr, are filtered out - Any other invalid HTML5 attributes are filtered out
DevLink prints a warning to your CLI console, and adds JSDoc Invalid Attribute comments, when it filters out attributes due to these rules, except when removing attributes with an empty string as their name.
For example, this exported code shows a warning about a custom attribute that was filtered out:
For more information, see What DevLink Exports.
Bulk update page metadata
You can now update page-level metadata for up to 100 pages in a single request using the new bulk update page metadata endpoint.
Key capabilities
- Batch updates: Update
title,slug,seo, andopenGraphfields for multiple pages at once. - Localization support: Target different secondary locales by including a
localeIdper page entry. The same page ID can appear multiple times with different locales. - Validation: Duplicate
id+localeIdcombinations return a400error. All pages must belong to the same site.
Renaming exported components and props
DevLink now renames exported components and props to ensure that the generated React code has valid, collision-free identifiers. Here is a summary of the changes that it makes:
Components
DevLink sanitizes exported component names to handle:
- Emojis and special characters:
My 😀 Component→MyComponent - Numbers at the start:
123→UnknownComponent123,1Component→UnknownComponent1Component - Reserved words:
class→UnknownComponentClass - Empty or whitespace-only names:
""or" "→UnknownComponent - Collisions: Multiple components named
MyComponent→MyComponent,MyComponent2,MyComponent3
Props
DevLink sanitizes exported prop names to handle:
- Emojis and special characters:
😀→unknownProp - Numbers at the start:
123→unknownProp123,1prop→unknownProp1Prop - Reserved words:
return→returnProp,private→privateProp - React reserved props:
key→keyProp,ref→refProp - HTML attributes for component props:
class→classProp,for→forProp - Empty or whitespace-only names:
""or" "→unknownProp
Note: HTML attributes like data-* and aria-* are preserved as-is and not sanitized.
What’s Fixed
This update fixes several critical issues in the previous system:
- No more leading underscores: Previously, names starting with numbers like
123would become_123or__123, which violates JavaScript naming conventions - Better handling of reserved words: Component props named
classorfornow becomeclassPropandforPropinstead of_classand_for - React conflicts resolved: Props named
keyorrefnow becomekeyPropandrefPropto avoid conflicts with React’s special props - Fallback for invalid names: Empty or whitespace-only names now get meaningful fallback names instead of breaking
For more information, see What DevLink Exports.
Data API bug fix
Data API bug fix
Previously, when a component prop was bound to a custom attribute, the Data API did not return that content as an override for the component instance as it did for other props. Now, the API returns that override data like other overrides and allows you to update it.
This fix affects these endpoints: