Skip to content

update_color_variable rejects all existing_variable_id aliasing #121

@cohesiveneal

Description

@cohesiveneal

TL;DR

The Webflow MCP's variable_toolupdate_color_variable action's existing_variable_id parameter always returns "not found," even when passed a variable ID that is demonstrably valid — including an ID currently in active use as a native alias elsewhere in the same site. Every combination tested (same-collection, cross-collection, Relume-seeded target, MCP-created target, solid-value target) fails. The same action's custom_value and static_value paths work correctly. Workaround is custom_value + CSS var(...), but it produces a "Custom value" instead of a true native alias — losing the typed reference and breaking silently if the target variable's cssName ever changes.

Summary

The variable_toolupdate_color_variable action's value.existing_variable_id field fails on every target variable tested, including variables that are demonstrably valid alias targets currently in use elsewhere in the same site.

custom_value and static_value on the same action work correctly.

Environment

  • Webflow MCP version: 1.0.0 (per developer docs URL)
  • Date: 2026-04-15
  • Site ID: [SITE ID]
  • Collection involved: Themes (collection-6df1d4d5-d11b-a74a-fcf2-f32116c72fc1)
  • Client: Claude (via Anthropic's MCP integration)
  • Auth: OAuth, Designer-scope tools (Webflow Designer tab active and in foreground during tests)

Expected behavior

Calling update_color_variable with value: { existing_variable_id: "<valid variable id>" } should set a native alias from the updated variable to the referenced variable — matching the Webflow Designer UI's "alias" behavior, and matching how existing native aliases are stored in the site's JSON data ("value": { "id": "<target id>" }).

Actual behavior

Every existing_variable_id call fails with one of two error messages:

  • "Variable <id> not found for updating color variable <id>" (when the target is in a different collection, OR in some cases the same collection)
  • "Error updating color variable <id> in collection <id>" (when target is in same collection)

The referenced target IDs demonstrably exist — they can be retrieved with get_variables / query_variables and render correctly when used as native aliases via other code paths.

Minimal reproduction

Context

Site has two color variables:

Source variable (in Themes collection):

{
  "id": "variable-089e73b1-7358-9339-d83c-b98312b53423",
  "name": "Background/secondary",
  "type": "Color",
  "cssName": "--_themes---background--secondary",
  "value": { "type": "custom", "value": "var(--_primitives---brand--sky-50)" }
}

Known-valid alias target (in Primitives collection) — proven valid because Background/primary in the same site currently has "value": { "id": "relume-variable--neutral-white" } as its native alias and renders correctly:

{
  "id": "relume-variable--neutral-white",
  "name": "Colors/White",
  "type": "Color",
  "cssName": "--_primitives---colors--white",
  "value": "#fff"
}

Failing call

{
  "siteId": "[SITE ID]",
  "actions": [{
    "label": "alias_to_neutral_white",
    "update_color_variable": {
      "variable_collection_id": "collection-6df1d4d5-d11b-a74a-fcf2-f32116c72fc1",
      "variable_id": "variable-089e73b1-7358-9339-d83c-b98312b53423",
      "value": { "existing_variable_id": "relume-variable--neutral-white" }
    }
  }]
}

Response

[{
  "status": "error",
  "message": "Variable relume-variable--neutral-white not found for updating color variable variable-089e73b1-7358-9339-d83c-b98312b53423"
}]

Workaround that succeeds

Replacing existing_variable_id with custom_value using CSS var() syntax works:

{
  "update_color_variable": {
    "variable_collection_id": "collection-6df1d4d5-d11b-a74a-fcf2-f32116c72fc1",
    "variable_id": "variable-089e73b1-7358-9339-d83c-b98312b53423",
    "value": { "custom_value": "var(--_primitives---colors--white)" }
  }
}

Response: {"status": "success"}. However this produces a "Custom value" (opaque CSS string) rather than a native alias, so Webflow loses the typed reference — the Designer UI shows it as custom-text rather than an alias pill, and the reference will silently break if the target variable's cssName ever changes.

Additional tests confirming the scope

Tried across six variants — all fail with existing_variable_id:

# Source → Target Same/Cross collection Target creation method Result
1 Background/secondaryButton Color/background Same (Themes) Relume-seeded Error updating color variable...
2 Background/secondaryrelume-variable--neutral-shade-1 Cross Relume-seeded Variable X not found
3 Background/secondaryvariable-2e2a2b76-... (Brand/Sky 50) Cross MCP-created via create_color_variable Variable X not found
4 Background/secondaryOverlay Color/primary Same (Themes) Relume-seeded, untouched, solid hsla() value Error updating color variable...
5 Tag Color/borderTag Color/text Same (Themes) Both MCP-updated with custom_value Error updating color variable...
6 Background/secondaryrelume-variable--neutral-white (ID confirmed valid by successful use in Background/primary's existing alias) Cross Relume-seeded Variable X not found

Test 6 is the most compelling: the exact ID relume-variable--neutral-white is currently stored in Background/primary's value.id field and renders white correctly, but existing_variable_id with that same string returns "not found".

Impact

Any migration/automation that needs to create native cross-collection or same-collection aliases via MCP must fall back to custom_value + CSS var() syntax. This:

  • Loses the typed alias relationship (target can be renamed and reference breaks silently)
  • Renders as "Custom value" rather than an "Alias" in the Designer sidebar
  • Prevents the alias from appearing in the target's "used by" back-references

For any serious design-token migration workflow, this effectively forces manual re-binding in the Designer UI as a post-processing step, defeating much of the MCP's value.

Suggested fix

The existing_variable_id lookup in update_color_variable appears to be scoped or filtered in a way that doesn't find variables it should. Suggested areas to investigate:

  1. Whether the lookup is constrained by a stale in-memory collection index
  2. Whether the lookup is filtering by variable_collection_id (the outer param, which should identify the source, not the target)
  3. Whether there's a permission check keyed on creation-origin that rejects Relume-seeded / MCP-created variables as alias targets

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions