figma-console-mcp 1.41.3 → 1.41.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  > **Your design system as an API.** A design-system-focused Model Context Protocol server for Figma. It works in both directions (Figma ⇄ code), **writes to Figma**, and runs **deterministic checks** for design-code parity, accessibility, and design-system health. It hands the AI exact tokens, variants, bindings, and states as structured data rather than prescribing a framework or house style, so generated code follows your team's own stack and conventions.
10
10
 
11
- > **🆕 Security & data-safety fixes (latest v1.41.3):** Cloud Mode sign-in is hardened: each session uses only its own Figma token, authorization codes are single-use and bound to the client that asked for them, and the accessibility scanner no longer runs scripts from the HTML it checks. Two data-loss fixes: `figma_import_tokens` refuses an import that read no token files (it used to plan deleting every variable) and `replace` only deletes inside the collections you import; arranging a component set no longer deletes the other arranged sets on the page. Token export and import read variables live, so renames show up immediately. Abandoned servers exit on Windows, batch-created variables accept aliases, and the Slots tools take `fileKey`. v1.41.1 and v1.41.3 make component-set analysis report real variant differences, including changes inside nested layers (an icon swap, a token on a nested vector, opacity on a disabled variant), stop component loading from timing out on large files, and fix variable paging. Re-import the plugin for the component fixes. [See what's new →](CHANGELOG.md#1413---2026-10-26)
11
+ > **🆕 Security & data-safety fixes (latest v1.41.5):** Cloud Mode sign-in is hardened: each session uses only its own Figma token, authorization codes are single-use and bound to the client that asked for them, and the accessibility scanner no longer runs scripts from the HTML it checks. Two data-loss fixes: `figma_import_tokens` refuses an import that read no token files (it used to plan deleting every variable) and `replace` only deletes inside the collections you import; arranging a component set no longer deletes the other arranged sets on the page. Token export and import read variables live, so renames show up immediately. Abandoned servers exit on Windows, batch-created variables accept aliases, and the Slots tools take `fileKey`. v1.41.1–v1.41.5 make component-set analysis report real variant differences, including changes inside nested layers (an icon swap, a token on a nested vector), the variant's own background and opacity, auto-layout, gradients, corner radius, typography and swapped tokens, stop component loading from timing out on large files, and fix variable paging. Re-import the plugin for the component fixes. [See what's new →](CHANGELOG.md#1415---2026-10-27)
12
12
 
13
13
  ## What is this?
14
14
 
@@ -140,7 +140,7 @@ If you're not sure where to put the JSON configuration above, here's where each
140
140
 
141
141
  > **Heads-up on plugin updates.** Figma caches plugin files (`code.js` and `ui.html`) at the application level. The MCP server refreshes the files at `~/.figma-console-mcp/plugin/` on every startup, but Figma keeps using its cached copy until you re-import the manifest.
142
142
  >
143
- > **Re-importing is _required_ only when a release notes entry says so** — typically when the plugin adds a new method the server needs (e.g. v1.22.4, v1.10.0). The plugin files last changed in v1.41.3; if your imported plugin predates that, re-import once. The plugin shows an update banner when the server bundles a newer plugin than the one running. For most upgrades the new server stays wire-compatible with the previous plugin, and re-importing is **optional**: you'll still get every functional change, just not the cosmetic plugin-side touches (status-pill copy, `pluginVersion` reporting).
143
+ > **Re-importing is _required_ only when a release notes entry says so** — typically when the plugin adds a new method the server needs (e.g. v1.22.4, v1.10.0). The plugin files last changed in v1.41.5; if your imported plugin predates that, re-import once. The plugin shows an update banner when the server bundles a newer plugin than the one running. For most upgrades the new server stays wire-compatible with the previous plugin, and re-importing is **optional**: you'll still get every functional change, just not the cosmetic plugin-side touches (status-pill copy, `pluginVersion` reporting).
144
144
  >
145
145
  > When you do re-import: Plugins → Manage plugins → re-import `~/.figma-console-mcp/plugin/manifest.json`. The stable path never changes, so it's a one-click step.
146
146
 
@@ -874,9 +874,11 @@ The two servers are complementary, and both can run in the same MCP client.
874
874
 
875
875
  ## 🛤️ Roadmap
876
876
 
877
- **Current Status:** v1.41.3 (Stable) - Production-ready. Latest: component-set analysis reports changes inside nested layers (instance swaps, nested token changes, opacity on the variant itself) and no longer reports a layer hidden in every variant as a change (re-import the plugin). On top of v1.41.2's design-system summary and `figma_get_token_values` report the file's tokens (they always reported 0) (server-only). On top of v1.41.1's component-set analysis reports real variant differences (Figma's default variant, size and layer changes), component loading no longer times out on large files (throttled plugin timers), relevance-ranked component search, and `figma_get_variables` paging that works with `format: "full"` (re-import the plugin for the component fixes). On top of v1.41.0's Cloud Mode sign-in hardening (per-session tokens on `/sse`, single-use authorization codes bound to client, redirect URI and PKCE, a consent page for unrecognized destinations), a script-execution fix in the accessibility scanner, `figma_import_tokens` refusing empty imports and scoping `replace` deletes to imported collections, `figma_arrange_component_set` no longer deleting other arranged sets, live variable reads for token export/import, Windows orphan-server exit (PR #140), and `fileKey` for the Slots tools (PR #112) (server-only, no plugin re-import). On top of v1.40.9's composed colors (a color variable set to another color at an opacity, "grey/900 at 50%") export and import with the link to the primitive intact — `color-mix()` in CSS/Tailwind v4, `rgba()` in SCSS, an alpha modifier in Tokens Studio, the resolved color plus the composition in DTCG — where the export previously failed or wrote `[object Object]` (server-only, no plugin re-import). On top of v1.40.8's min/max width and height survive every way of extracting a component as JSON — the design system kit, the reconstruction format and `figma_get_file_data` now carry them, design-code parity compares them, and the reconstruction format returns real geometry again instead of 50×50 placeholders when the plugin is connected (server-only, no plugin re-import). On top of v1.40.7's clearer Color Tokens table in generated docs — layers revealed by a boolean property are printed once under that property, and stroke/fill rows name the nested instance they belong to (server-only, no plugin re-import). On top of v1.40.6's overrides in extended variable collections are visible (previously reported as nonexistent), and a third round of generated-doc fidelity fixes — radius tokens read per corner, boolean props compared in Design-Code Parity, source links pinned to a commit, hidden layers linked to the property that shows them (server-only, no plugin re-import). On top of v1.40.5's clean dependency audit for the npm package — Worker-only dependencies (`@cloudflare/puppeteer`, which pulled in a high-severity `extract-zip` advisory with no upstream fix, and `agents`) no longer install for npm users, so `npm install figma-console-mcp` audits at 0 vulnerabilities and is 64 MB instead of 173 MB; the server also reports its real version to MCP clients instead of `0.1.0` (server-only, no plugin re-import). On top of v1.40.4's fixes found by live-testing v1.40.3 on hard production components — tools given a `fileUrl` now read variables, descriptions and annotations from THAT file rather than whichever file is active (previously every token name could vanish, or on an id collision come from the wrong file; `figma_get_component` could return a different component), a tool result over 16 MB no longer disconnects the server, anatomy labels sizing by the layout's real axes, and the icon/typography/anatomy output stays readable on large components (server-only, no plugin re-import). On top of v1.40.3's fidelity fixes for generated component docs on harder components — hidden layers are labeled instead of documented as rendered, one-sided borders report the weight that actually renders, typography and layer structure are compared across every variant instead of read from the first, gradients/shadows/opacity are no longer silently dropped, truncated trees say so, and `SLOT` properties are listed (server-only, no plugin re-import). On top of v1.40.2's data-loss fix for `figma_export_tokens` — with a different file active in Figma than intended, an export could replace a real token file with an empty one (or with another file's tokens) and report success; exports now refuse to write when a requested collection is missing, when the export is empty, when the target was generated from a different Figma file, or when overwriting would destroy tokens the export doesn't manage, and `strategy: "merge"` — documented as preserving code-only tokens but never implemented — is now a genuinely safe default (server-only, no plugin re-import). On top of v1.40.1's accuracy fixes for generated component docs across variants — a descendant's fill (typically an icon's) could be documented as a variant's Background, Color Token headings kept only a property literally named `Variant`, spacing was read from the first variant alone, and icons were only detected by layer name — plus `figma_export_tokens` accepting a file path as `outputPath` instead of failing with a raw `EEXIST` or silently creating a directory (server-only, no plugin re-import). On top of v1.40.0's design system extraction from production codebases — seven Local-Mode `figma_ds_*` tools that scan one or more apps (framework/styling/vendor detection, usage-ranked component inventory classified vendored/wrapped/pure-vendor/bespoke, variant inference from real call sites, duplicate detection, and an architecture pass separating UI-kit specializations from the missing generic primitives), mine the de-facto styling into DTCG tokens with per-token provenance (multi-mode CSS custom properties, SCSS, Tailwind config, shadcn HSL triples, utility-class frequency mining valued from the app's own theme), scaffold the design-system package with showcase docs pages, wire a fresh Storybook workshop to the app's real theme layers and fonts, deep-extract components for porting with CSF3 story scaffolds, verify with deterministic fidelity evals, and persist porting progress across sessions — the extracted tokens import straight into Figma variables via `figma_import_tokens`. On top of v1.39.1's fix for a plugin-update banner that could never be cleared — an older server instance nagging a newer plugin to re-import, which only ever installs the same or a newer plugin. On top of v1.39.0's multi-file execution — `figma_execute_across_files` runs one script against several Desktop Bridge-connected files concurrently (four files x 2s of work in ~3s, not ~8s), and `figma_execute` takes an optional `fileKey` to target a single file without moving the active file or releasing target lock; targeting must be explicit (`fileKeys` or `allFiles: true`), so nothing fans out to files you did not name. From community PR #107 by @Wolfr. Ships with a relay fix: `handleResult()` in the plugin's ui.html rebuilt each response field by field and silently dropped `resultAnalysis` and `fileContext`, so the `resultAnalysis.warning` check that `figma_execute`'s own description tells callers to perform has never been possible (re-import `manifest.json` for those two fields; everything else works without it). On top of v1.38.2's connection-stability fix — the server's own orphan reaper was terminating healthy MCP servers because its liveness probe used an IPv4 literal while the server binds the IPv6 loopback, which turned every kill-safety gate into a rubber stamp; this was the cause of recurring "Server disconnected" errors across all MCP clients. Alongside v1.38.1's fix for the shared-library variable tools, which had silently reported zero collections since v1.29.0 and reported failed imports as successes. On top of v1.38.0's ongoing component changelogs in generated docs — `figma_generate_component_doc` takes an opt-in `history` parameter that pulls per-component **design history** from Figma version history (each version diffed and scoped to that component, so renames, added properties, and token bindings show up as rows) alongside **code history** from `git log` on the component's source files, rendered as a `## History` section with design, code, and release-note tables. Prefers labeled versions, falls back to auto-saves when a file has none, and is off by default so existing calls are unchanged (server-only, no plugin re-import). On top of v1.37.x's design-system health audit for every client — `figma_audit_design_system_report` runs the dashboard's deterministic six-category scoring engine and returns the report as data with per-finding remediation, live-first fileKey-verified data (source disclosed), chunked per-category drill-down, and a 5-minute cache (server-only, no plugin re-import). On top of v1.36.0's target lock for multi-file parallel work — — `figma_navigate` takes a `lock: true` flag that pins the active file so an AI agent can work in one file while you work in another without commands routing to the wrong file. On top of v1.35.0's Figma Slots write support — create, inspect, populate, and reset Slots (GA at Config 2026) via 5 new tools (`figma_create_slot`, `figma_get_slots`, `figma_append_to_slot`, `figma_reset_slot`, `figma_add_slot_property`), live-validated against the GA Plugin API and based on community PR #77. On top of v1.34.0's Bidirectional Token Sync v2 + DTCG 2025.10 — `figma_import_tokens` applies the complete diff plan (creates missing collections/variables, applies renames, writes real `VARIABLE_ALIAS` references, and deletes only under explicit `replace`), `figma_export_tokens` speaks the DTCG 2025.10 dialect on request (legacy default byte-identical), variable scopes/codeSyntax round-trip via `$extensions`, `figma_setup_design_tokens` accepts alias values via DTCG brace references, and `figma_create_component_set` builds a full variant set from an axes matrix in one call. On top of the v1.33.x line: version-handshake fix (re-import banner only fires when plugin files actually changed), security dependency sweep, and the v1.33.0 connection UX overhaul (honest status pill derived from live connection state, `/health` auto-discovery with self-healing reconnect) + a 33-fix full-codebase audit (lossless DTCG multi-mode round-trips, cross-collection alias resolution, branch-URL correctness across REST tools, cache-poisoning and CSWSH fixes, bridge-first screenshots). Built on WCAG-accurate accessibility auditing (line height below 1.5× is no longer mis-flagged as a failure; readability hints decoupled from conformance checks and scoped to multi-line text; code-side WCAG 1.4.12 check), a self-healing Desktop Bridge connection (zombie-process reaper + auto-reconnect watchdog — fixes the recurring "not connected until restart" bug), native variable binding on fills/strokes + typography control in the write tools, shared-library inspection (key-based component resolution + library variable read/import without Enterprise plan), 10-format token export pipeline (DTCG, CSS, Tailwind v4, Tailwind v3, SCSS, TS module, JSON flat/nested, Style Dictionary v3, Tokens Studio), bidirectional Figma↔code token sync, version history & time-series awareness, FigJam + Slides support, Cloud Write Relay, Design System Kit, WebSocket-only connectivity, smart multi-file tracking, **121 tools** (Local) / **96 tools** (Cloud) / read-only subset (Remote), Comments API, cross-MCP identity disambiguation, and MCP Apps.
877
+ **Current Status:** v1.41.5 (Stable) - Production-ready. Latest: component-set analysis reports gradient/image/paint-opacity, corner radius, typography and label text, swapped spacing tokens, nested layer geometry and vector shape changes (re-import the plugin). On top of v1.41.4's variant background/stroke and auto-layout changes. On top of v1.41.3's component-set analysis reporting changes inside nested layers (instance swaps, nested token changes, opacity on the variant itself) and no longer reports a layer hidden in every variant as a change (re-import the plugin). On top of v1.41.2's design-system summary and `figma_get_token_values` report the file's tokens (they always reported 0) (server-only). On top of v1.41.1's component-set analysis reports real variant differences (Figma's default variant, size and layer changes), component loading no longer times out on large files (throttled plugin timers), relevance-ranked component search, and `figma_get_variables` paging that works with `format: "full"` (re-import the plugin for the component fixes). On top of v1.41.0's Cloud Mode sign-in hardening (per-session tokens on `/sse`, single-use authorization codes bound to client, redirect URI and PKCE, a consent page for unrecognized destinations), a script-execution fix in the accessibility scanner, `figma_import_tokens` refusing empty imports and scoping `replace` deletes to imported collections, `figma_arrange_component_set` no longer deleting other arranged sets, live variable reads for token export/import, Windows orphan-server exit (PR #140), and `fileKey` for the Slots tools (PR #112) (server-only, no plugin re-import). On top of v1.40.9's composed colors (a color variable set to another color at an opacity, "grey/900 at 50%") export and import with the link to the primitive intact — `color-mix()` in CSS/Tailwind v4, `rgba()` in SCSS, an alpha modifier in Tokens Studio, the resolved color plus the composition in DTCG — where the export previously failed or wrote `[object Object]` (server-only, no plugin re-import). On top of v1.40.8's min/max width and height survive every way of extracting a component as JSON — the design system kit, the reconstruction format and `figma_get_file_data` now carry them, design-code parity compares them, and the reconstruction format returns real geometry again instead of 50×50 placeholders when the plugin is connected (server-only, no plugin re-import). On top of v1.40.7's clearer Color Tokens table in generated docs — layers revealed by a boolean property are printed once under that property, and stroke/fill rows name the nested instance they belong to (server-only, no plugin re-import). On top of v1.40.6's overrides in extended variable collections are visible (previously reported as nonexistent), and a third round of generated-doc fidelity fixes — radius tokens read per corner, boolean props compared in Design-Code Parity, source links pinned to a commit, hidden layers linked to the property that shows them (server-only, no plugin re-import). On top of v1.40.5's clean dependency audit for the npm package — Worker-only dependencies (`@cloudflare/puppeteer`, which pulled in a high-severity `extract-zip` advisory with no upstream fix, and `agents`) no longer install for npm users, so `npm install figma-console-mcp` audits at 0 vulnerabilities and is 64 MB instead of 173 MB; the server also reports its real version to MCP clients instead of `0.1.0` (server-only, no plugin re-import). On top of v1.40.4's fixes found by live-testing v1.40.3 on hard production components — tools given a `fileUrl` now read variables, descriptions and annotations from THAT file rather than whichever file is active (previously every token name could vanish, or on an id collision come from the wrong file; `figma_get_component` could return a different component), a tool result over 16 MB no longer disconnects the server, anatomy labels sizing by the layout's real axes, and the icon/typography/anatomy output stays readable on large components (server-only, no plugin re-import). On top of v1.40.3's fidelity fixes for generated component docs on harder components — hidden layers are labeled instead of documented as rendered, one-sided borders report the weight that actually renders, typography and layer structure are compared across every variant instead of read from the first, gradients/shadows/opacity are no longer silently dropped, truncated trees say so, and `SLOT` properties are listed (server-only, no plugin re-import). On top of v1.40.2's data-loss fix for `figma_export_tokens` — with a different file active in Figma than intended, an export could replace a real token file with an empty one (or with another file's tokens) and report success; exports now refuse to write when a requested collection is missing, when the export is empty, when the target was generated from a different Figma file, or when overwriting would destroy tokens the export doesn't manage, and `strategy: "merge"` — documented as preserving code-only tokens but never implemented — is now a genuinely safe default (server-only, no plugin re-import). On top of v1.40.1's accuracy fixes for generated component docs across variants — a descendant's fill (typically an icon's) could be documented as a variant's Background, Color Token headings kept only a property literally named `Variant`, spacing was read from the first variant alone, and icons were only detected by layer name — plus `figma_export_tokens` accepting a file path as `outputPath` instead of failing with a raw `EEXIST` or silently creating a directory (server-only, no plugin re-import). On top of v1.40.0's design system extraction from production codebases — seven Local-Mode `figma_ds_*` tools that scan one or more apps (framework/styling/vendor detection, usage-ranked component inventory classified vendored/wrapped/pure-vendor/bespoke, variant inference from real call sites, duplicate detection, and an architecture pass separating UI-kit specializations from the missing generic primitives), mine the de-facto styling into DTCG tokens with per-token provenance (multi-mode CSS custom properties, SCSS, Tailwind config, shadcn HSL triples, utility-class frequency mining valued from the app's own theme), scaffold the design-system package with showcase docs pages, wire a fresh Storybook workshop to the app's real theme layers and fonts, deep-extract components for porting with CSF3 story scaffolds, verify with deterministic fidelity evals, and persist porting progress across sessions — the extracted tokens import straight into Figma variables via `figma_import_tokens`. On top of v1.39.1's fix for a plugin-update banner that could never be cleared — an older server instance nagging a newer plugin to re-import, which only ever installs the same or a newer plugin. On top of v1.39.0's multi-file execution — `figma_execute_across_files` runs one script against several Desktop Bridge-connected files concurrently (four files x 2s of work in ~3s, not ~8s), and `figma_execute` takes an optional `fileKey` to target a single file without moving the active file or releasing target lock; targeting must be explicit (`fileKeys` or `allFiles: true`), so nothing fans out to files you did not name. From community PR #107 by @Wolfr. Ships with a relay fix: `handleResult()` in the plugin's ui.html rebuilt each response field by field and silently dropped `resultAnalysis` and `fileContext`, so the `resultAnalysis.warning` check that `figma_execute`'s own description tells callers to perform has never been possible (re-import `manifest.json` for those two fields; everything else works without it). On top of v1.38.2's connection-stability fix — the server's own orphan reaper was terminating healthy MCP servers because its liveness probe used an IPv4 literal while the server binds the IPv6 loopback, which turned every kill-safety gate into a rubber stamp; this was the cause of recurring "Server disconnected" errors across all MCP clients. Alongside v1.38.1's fix for the shared-library variable tools, which had silently reported zero collections since v1.29.0 and reported failed imports as successes. On top of v1.38.0's ongoing component changelogs in generated docs — `figma_generate_component_doc` takes an opt-in `history` parameter that pulls per-component **design history** from Figma version history (each version diffed and scoped to that component, so renames, added properties, and token bindings show up as rows) alongside **code history** from `git log` on the component's source files, rendered as a `## History` section with design, code, and release-note tables. Prefers labeled versions, falls back to auto-saves when a file has none, and is off by default so existing calls are unchanged (server-only, no plugin re-import). On top of v1.37.x's design-system health audit for every client — `figma_audit_design_system_report` runs the dashboard's deterministic six-category scoring engine and returns the report as data with per-finding remediation, live-first fileKey-verified data (source disclosed), chunked per-category drill-down, and a 5-minute cache (server-only, no plugin re-import). On top of v1.36.0's target lock for multi-file parallel work — — `figma_navigate` takes a `lock: true` flag that pins the active file so an AI agent can work in one file while you work in another without commands routing to the wrong file. On top of v1.35.0's Figma Slots write support — create, inspect, populate, and reset Slots (GA at Config 2026) via 5 new tools (`figma_create_slot`, `figma_get_slots`, `figma_append_to_slot`, `figma_reset_slot`, `figma_add_slot_property`), live-validated against the GA Plugin API and based on community PR #77. On top of v1.34.0's Bidirectional Token Sync v2 + DTCG 2025.10 — `figma_import_tokens` applies the complete diff plan (creates missing collections/variables, applies renames, writes real `VARIABLE_ALIAS` references, and deletes only under explicit `replace`), `figma_export_tokens` speaks the DTCG 2025.10 dialect on request (legacy default byte-identical), variable scopes/codeSyntax round-trip via `$extensions`, `figma_setup_design_tokens` accepts alias values via DTCG brace references, and `figma_create_component_set` builds a full variant set from an axes matrix in one call. On top of the v1.33.x line: version-handshake fix (re-import banner only fires when plugin files actually changed), security dependency sweep, and the v1.33.0 connection UX overhaul (honest status pill derived from live connection state, `/health` auto-discovery with self-healing reconnect) + a 33-fix full-codebase audit (lossless DTCG multi-mode round-trips, cross-collection alias resolution, branch-URL correctness across REST tools, cache-poisoning and CSWSH fixes, bridge-first screenshots). Built on WCAG-accurate accessibility auditing (line height below 1.5× is no longer mis-flagged as a failure; readability hints decoupled from conformance checks and scoped to multi-line text; code-side WCAG 1.4.12 check), a self-healing Desktop Bridge connection (zombie-process reaper + auto-reconnect watchdog — fixes the recurring "not connected until restart" bug), native variable binding on fills/strokes + typography control in the write tools, shared-library inspection (key-based component resolution + library variable read/import without Enterprise plan), 10-format token export pipeline (DTCG, CSS, Tailwind v4, Tailwind v3, SCSS, TS module, JSON flat/nested, Style Dictionary v3, Tokens Studio), bidirectional Figma↔code token sync, version history & time-series awareness, FigJam + Slides support, Cloud Write Relay, Design System Kit, WebSocket-only connectivity, smart multi-file tracking, **121 tools** (Local) / **96 tools** (Cloud) / read-only subset (Remote), Comments API, cross-MCP identity disambiguation, and MCP Apps.
878
878
 
879
879
  **Recent Releases:**
880
+ - [x] **v1.41.5** - Component-set analysis diffs paints (gradients, images, opacity), corner radius, typography and label text, swapped tokens (`tokens`), nested size/position/rotation and vector shapes. Plugin re-import.
881
+ - [x] **v1.41.4** - Component-set analysis diffs the variant's own fill/stroke (button backgrounds) and auto-layout (`layout`). Plugin re-import.
880
882
  - [x] **v1.41.3** - Component-set analysis diffs nested layers by path (instance swaps, nested fill/stroke tokens), variant-level opacity, and visibility in both directions; a layer hidden in every variant is no longer reported as a change. Plugin re-import.
881
883
  - [x] **v1.41.2** - Design-system summary and token values read the bridge's variables response correctly (always 0 tokens before). Server-only.
882
884
  - [x] **v1.41.1** - Component-set analysis finds Figma's default variant and diffs size/layers (#121); component loading drops throttled setTimeout yields and uses native search — 300s timeouts → ~1.5s (#120); summary fails loudly; search ranked by relevance; `figma_get_variables` full-format paging and one pagination shape (#98, #99); deep extraction mixed-text fix and unlimited depth (PRs #85, #86 by @DarWiM). Plugin re-import for component fixes.
@@ -81,7 +81,7 @@ export function registerDeepComponentTools(server, getDesktopConnector) {
81
81
  // -----------------------------------------------------------------------
82
82
  // Tool: figma_analyze_component_set
83
83
  // -----------------------------------------------------------------------
84
- server.tool("figma_analyze_component_set", "Analyze a Figma COMPONENT_SET to extract variant state machine and cross-variant diffs for code generation. Returns: (1) variant axes (size, state) with all values, (2) CSS pseudo-class mappings for interaction states (hover→:hover, focus→:focus-visible, disabled→:disabled, error→[aria-invalid]), (3) visual diff from default state per variant (only changed properties — fill token, stroke token, stroke weight, text color, opacity incl. opacity on the variant itself, effects, size, child layers, visibility, plus `layers`: changes to nested layers keyed by layer path such as 'Icons/Radio › Icon', including instance swaps), (4) component property definitions mapped to code props (BOOLEAN→boolean, TEXT→string, INSTANCE_SWAP→slot/ReactNode), and (5) slots — Figma SLOT properties (name, preferredValues = the components a slot accepts, and limitViolations) to implement as named slots / children props (React {children} or named ReactNode; Web Components <slot name>). Use this on the parent COMPONENT_SET node, not individual variants. Requires Desktop Bridge plugin.", {
84
+ server.tool("figma_analyze_component_set", "Analyze a Figma COMPONENT_SET to extract variant state machine and cross-variant diffs for code generation. Returns: (1) variant axes (size, state) with all values, (2) CSS pseudo-class mappings for interaction states (hover→:hover, focus→:focus-visible, disabled→:disabled, error→[aria-invalid]), (3) visual diff from default state per variant (only changed properties — fill/stroke as token or hex, gradient, image and paint opacity, stroke weight, text color, opacity, effects, corner radius, size, child layers, visibility, the variant's own fill/stroke/opacity/radius (`variantFill`, `variantStroke`, `variantOpacity`, `variantRadius`), auto-layout (`layout`) and swapped spacing/size tokens (`tokens`), plus `layers`: changes to nested layers keyed by layer path such as 'Icons/Radio › Icon' — instance swaps, size, free position, rotation, vector shape, label text and typography), (4) component property definitions mapped to code props (BOOLEAN→boolean, TEXT→string, INSTANCE_SWAP→slot/ReactNode), and (5) slots — Figma SLOT properties (name, preferredValues = the components a slot accepts, and limitViolations) to implement as named slots / children props (React {children} or named ReactNode; Web Components <slot name>). Use this on the parent COMPONENT_SET node, not individual variants. Requires Desktop Bridge plugin.", {
85
85
  nodeId: z
86
86
  .string()
87
87
  .describe("COMPONENT_SET node ID (the parent of all variants, e.g., '214:274')"),
@@ -1 +1 @@
1
- {"version":3,"file":"deep-component-tools.js","sourceRoot":"","sources":["../../src/core/deep-component-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deep-component-tools.js","sourceRoot":"","sources":["../../src/core/deep-component-tools.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,7 @@ const logger = createChildLogger({ component: "tokens-tools" });
36
36
  * on every exported token document. Kept in sync with package.json by
37
37
  * scripts/release.sh — see step 3 of the release flow.
38
38
  */
39
- const MCP_VERSION = "1.41.3";
39
+ const MCP_VERSION = "1.41.5";
40
40
  const EXPORT_TOOL_DESCRIPTION = `Export Figma variables to design token files in your codebase. Bidirectional with figma_import_tokens — together they replace Style Dictionary and Tokens Studio's export pipeline for the popular styling methods.
41
41
 
42
42
  FULLY-IMPLEMENTED OUTPUT FORMATS:
@@ -196,7 +196,7 @@ export class WebSocketConnector {
196
196
  return this.wsServer.sendCommand('DEEP_GET_COMPONENT', { nodeId, depth: sentDepth }, unlimited ? 120000 : 30000);
197
197
  }
198
198
  async analyzeComponentSet(nodeId) {
199
- return this.wsServer.sendCommand('ANALYZE_COMPONENT_SET', { nodeId }, 30000);
199
+ return this.wsServer.sendCommand('ANALYZE_COMPONENT_SET', { nodeId }, 120000);
200
200
  }
201
201
  async addComponentProperty(nodeId, propertyName, type, defaultValue, options) {
202
202
  const params = { nodeId, propertyName, propertyType: type, defaultValue };
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-connector.js","sourceRoot":"","sources":["../../src/core/websocket-connector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket-connector.js","sourceRoot":"","sources":["../../src/core/websocket-connector.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  // detect stale cached plugins. Bumped by scripts/release.sh ONLY when plugin files
10
10
  // change (see issue #62); server-only releases leave it alone, so it may lag
11
11
  // package.json — that's intentional, not drift.
12
- var PLUGIN_VERSION = '1.41.3'; // Last release in which plugin files changed.
12
+ var PLUGIN_VERSION = '1.41.5'; // Last release in which plugin files changed.
13
13
 
14
14
  console.log('🌉 [Desktop Bridge] Plugin loaded (v' + PLUGIN_VERSION + ')');
15
15
 
@@ -1164,6 +1164,100 @@ figma.ui.onmessage = async (msg) => {
1164
1164
  return null;
1165
1165
  }
1166
1166
 
1167
+ function round2(n) {
1168
+ return typeof n === 'number' && !isNaN(n) ? Math.round(n * 100) / 100 : undefined;
1169
+ }
1170
+
1171
+ // A paint list as one comparable string: the bound token or hex for a
1172
+ // solid, the stops for a gradient, 'image'/'video' otherwise. Paint
1173
+ // opacity below 1 is appended ('@0.5'), extra visible paints as '+N'.
1174
+ // Without this, gradients, images and a stroke faded to 0 diff as equal.
1175
+ function paintSig(paints, bound) {
1176
+ if (!paints || typeof paints === 'symbol' || !paints.length) return null;
1177
+ var vis = [];
1178
+ for (var pi = 0; pi < paints.length; pi++) {
1179
+ if (paints[pi].visible !== false) vis.push(pi);
1180
+ }
1181
+ if (!vis.length) return null;
1182
+ var p = paints[vis[0]];
1183
+ var tok = null;
1184
+ if (p.boundVariables && p.boundVariables.color && p.boundVariables.color.id) tok = resolveVarId(p.boundVariables.color.id);
1185
+ else if (Array.isArray(bound) && bound[vis[0]] && bound[vis[0]].id) tok = resolveVarId(bound[vis[0]].id);
1186
+ var s;
1187
+ if (tok) s = tok;
1188
+ else if (p.type === 'SOLID' && p.color) s = colorHex(p.color);
1189
+ else if (p.type && p.type.indexOf('GRADIENT_') === 0) {
1190
+ s = p.type.slice(9).toLowerCase() + '-gradient(' + (p.gradientStops || []).map(function(g) { return colorHex(g.color); }).join(', ') + ')';
1191
+ } else s = (p.type || 'paint').toLowerCase();
1192
+ if (typeof p.opacity === 'number' && p.opacity < 1) s += ' @' + round2(p.opacity);
1193
+ if (vis.length > 1) s += ' +' + (vis.length - 1);
1194
+ return s;
1195
+ }
1196
+
1197
+ // Corner radius as a number, or 'tl tr br bl' when corners differ;
1198
+ // bound corners use the token name. undefined for nodes without corners.
1199
+ var CORNERS = ['topLeftRadius', 'topRightRadius', 'bottomRightRadius', 'bottomLeftRadius'];
1200
+ function radiusSig(n) {
1201
+ try {
1202
+ var bv = n.boundVariables || {};
1203
+ var vals = [];
1204
+ for (var ri = 0; ri < CORNERS.length; ri++) {
1205
+ var b = bv[CORNERS[ri]];
1206
+ var val = b && b.id ? resolveVarId(b.id) : round2(n[CORNERS[ri]]);
1207
+ if (val === undefined) return undefined;
1208
+ vals.push(val);
1209
+ }
1210
+ return vals[0] === vals[1] && vals[1] === vals[2] && vals[2] === vals[3] ? vals[0] : vals.join(' ');
1211
+ } catch (e) { return undefined; }
1212
+ }
1213
+
1214
+ // Tokens bound to anything other than paints and corners (padding, gap,
1215
+ // width, font size...). A variant can swap the token while the value in
1216
+ // the current mode stays the same.
1217
+ var SKIP_BOUND = { fills: 1, strokes: 1, effects: 1, componentProperties: 1, textRangeFills: 1, topLeftRadius: 1, topRightRadius: 1, bottomLeftRadius: 1, bottomRightRadius: 1 };
1218
+ function boundTokens(n) {
1219
+ var out = null;
1220
+ try {
1221
+ var bv = n.boundVariables || {};
1222
+ for (var bk in bv) {
1223
+ if (SKIP_BOUND[bk]) continue;
1224
+ var tk = resolveBoundColor(bv[bk]);
1225
+ if (tk) {
1226
+ if (!out) out = {};
1227
+ out[bk] = tk;
1228
+ }
1229
+ }
1230
+ } catch (e) {}
1231
+ return out;
1232
+ }
1233
+
1234
+ // Keys whose values differ between two token maps (null = removed).
1235
+ function diffTokens(a, b) {
1236
+ a = a || {};
1237
+ b = b || {};
1238
+ var out = null;
1239
+ var k;
1240
+ for (k in a) if (a[k] !== b[k]) { if (!out) out = {}; out[k] = a[k]; }
1241
+ for (k in b) if (!(k in a)) { if (!out) out = {}; out[k] = null; }
1242
+ return out;
1243
+ }
1244
+
1245
+ function shortHash(str) {
1246
+ var h = 5381;
1247
+ for (var hi = 0; hi < str.length; hi++) h = ((h << 5) + h + str.charCodeAt(hi)) | 0;
1248
+ return (h >>> 0).toString(16);
1249
+ }
1250
+
1251
+ function textValue(v, fmt) {
1252
+ if (v === undefined || v === null) return null;
1253
+ if (typeof v === 'symbol') return 'mixed';
1254
+ return fmt ? fmt(v) : v;
1255
+ }
1256
+ function unitValue(u) {
1257
+ if (u.unit === 'AUTO') return 'auto';
1258
+ return round2(u.value) + (u.unit === 'PERCENT' ? '%' : 'px');
1259
+ }
1260
+
1167
1261
  // Extract visual signature from a variant for diffing
1168
1262
  async function extractSignature(variant) {
1169
1263
  var sig = {};
@@ -1218,17 +1312,13 @@ figma.ui.onmessage = async (msg) => {
1218
1312
  sig.strokeToken = resolveBoundColor(bv.strokes);
1219
1313
  sig.strokeWeight = child.strokeWeight;
1220
1314
 
1221
- // Raw colors as fallback
1222
- if (!sig.fillToken && child.fills && child.fills.length > 0 && child.fills[0].color) {
1223
- var fc = child.fills[0].color;
1224
- sig.fillHex = '#' + Math.round(fc.r*255).toString(16).padStart(2,'0') + Math.round(fc.g*255).toString(16).padStart(2,'0') + Math.round(fc.b*255).toString(16).padStart(2,'0');
1225
- }
1226
- if (!sig.strokeToken && child.strokes && child.strokes.length > 0 && child.strokes[0].color) {
1227
- var sc = child.strokes[0].color;
1228
- sig.strokeHex = '#' + Math.round(sc.r*255).toString(16).padStart(2,'0') + Math.round(sc.g*255).toString(16).padStart(2,'0') + Math.round(sc.b*255).toString(16).padStart(2,'0');
1229
- }
1315
+ // Raw paint as fallback (hex, gradient or image, with opacity)
1316
+ if (!sig.fillToken) sig.fillHex = paintSig(child.fills) || undefined;
1317
+ if (!sig.strokeToken) sig.strokeHex = paintSig(child.strokes) || undefined;
1230
1318
  sig.effects = child.effects && child.effects.length > 0 ? child.effects : null;
1231
1319
  sig.opacity = child.opacity < 1 ? Math.round(child.opacity * 100) / 100 : null;
1320
+ var mr = radiusSig(child);
1321
+ if (mr !== undefined) sig.cornerRadius = mr;
1232
1322
  } catch(e) {}
1233
1323
 
1234
1324
  // Check text children for color changes
@@ -1240,10 +1330,7 @@ figma.ui.onmessage = async (msg) => {
1240
1330
  try {
1241
1331
  var tbv = textChild.boundVariables || {};
1242
1332
  sig.textToken = resolveBoundColor(tbv.fills);
1243
- if (!sig.textToken && textChild.fills && textChild.fills.length > 0 && textChild.fills[0].color) {
1244
- var tc = textChild.fills[0].color;
1245
- sig.textHex = '#' + Math.round(tc.r*255).toString(16).padStart(2,'0') + Math.round(tc.g*255).toString(16).padStart(2,'0') + Math.round(tc.b*255).toString(16).padStart(2,'0');
1246
- }
1333
+ if (!sig.textToken) sig.textHex = paintSig(textChild.fills) || undefined;
1247
1334
  } catch(e) {}
1248
1335
  break; // First text node is enough
1249
1336
  }
@@ -1269,6 +1356,40 @@ figma.ui.onmessage = async (msg) => {
1269
1356
  // not on any child).
1270
1357
  sig.variantOpacity = variant.opacity < 1 ? Math.round(variant.opacity * 100) / 100 : null;
1271
1358
 
1359
+ // Fill and stroke on the variant itself. A button's background usually
1360
+ // sits here while the main layer picked above is its label frame, so
1361
+ // without these a hover that only changes the background diffs as
1362
+ // no change.
1363
+ sig.variantFill = null;
1364
+ sig.variantStroke = null;
1365
+ try {
1366
+ var vbv = variant.boundVariables || {};
1367
+ sig.variantFill = paintSig(variant.fills, vbv.fills);
1368
+ sig.variantStroke = paintSig(variant.strokes, vbv.strokes);
1369
+ var vr = radiusSig(variant);
1370
+ if (vr !== undefined) sig.variantRadius = vr;
1371
+ } catch(e) {}
1372
+ // Non-paint tokens on the variant (padding, gap, size). Diff-only.
1373
+ sig._tokens = boundTokens(variant);
1374
+
1375
+ // Auto-layout on the variant itself, so axes like Alignment or Density
1376
+ // that only change layout don't diff as identical. Diff-only.
1377
+ sig._layout = null;
1378
+ try {
1379
+ if (variant.layoutMode && variant.layoutMode !== 'NONE') {
1380
+ sig._layout = {
1381
+ layoutMode: variant.layoutMode,
1382
+ primaryAxisAlignItems: variant.primaryAxisAlignItems,
1383
+ counterAxisAlignItems: variant.counterAxisAlignItems,
1384
+ itemSpacing: variant.itemSpacing,
1385
+ paddingTop: variant.paddingTop,
1386
+ paddingRight: variant.paddingRight,
1387
+ paddingBottom: variant.paddingBottom,
1388
+ paddingLeft: variant.paddingLeft
1389
+ };
1390
+ }
1391
+ } catch(e) {}
1392
+
1272
1393
  // Nested layers, keyed by path. State changes often sit below the
1273
1394
  // first child (a checked radio swaps the icon instance; its vector's
1274
1395
  // fill token changes), which the fields above never see. Only used
@@ -1277,6 +1398,7 @@ figma.ui.onmessage = async (msg) => {
1277
1398
  var layerCount = 0;
1278
1399
  async function walkLayers(parent, prefix, depth) {
1279
1400
  if (!parent.children || depth > 4) return;
1401
+ var parentAuto = parent.layoutMode && parent.layoutMode !== 'NONE';
1280
1402
  var seen = {};
1281
1403
  for (var li = 0; li < parent.children.length && layerCount < 300; li++) {
1282
1404
  var ln = parent.children[li];
@@ -1288,13 +1410,36 @@ figma.ui.onmessage = async (msg) => {
1288
1410
  layerCount++;
1289
1411
  try {
1290
1412
  var lbv = ln.boundVariables || {};
1291
- var ft = resolveBoundColor(lbv.fills);
1292
- var st = resolveBoundColor(lbv.strokes);
1293
- entry.fill = ft || (ln.fills && ln.fills.length > 0 && ln.fills[0].color ? colorHex(ln.fills[0].color) : null);
1294
- entry.stroke = st || (ln.strokes && ln.strokes.length > 0 && ln.strokes[0].color ? colorHex(ln.strokes[0].color) : null);
1413
+ entry.fill = paintSig(ln.fills, lbv.fills);
1414
+ entry.stroke = paintSig(ln.strokes, lbv.strokes);
1295
1415
  entry.strokeWeight = entry.stroke ? (typeof ln.strokeWeight === 'number' ? ln.strokeWeight : null) : null;
1296
1416
  entry.opacity = ln.opacity < 1 ? Math.round(ln.opacity * 100) / 100 : null;
1297
1417
  entry.visible = ln.visible !== false;
1418
+ entry.radius = radiusSig(ln);
1419
+ entry.tokens = boundTokens(ln);
1420
+ // Size always; position only where auto-layout doesn't place
1421
+ // the layer (a tooltip's pointer moving between corners).
1422
+ entry.width = round2(ln.width);
1423
+ entry.height = round2(ln.height);
1424
+ if (!parentAuto || ln.layoutPositioning === 'ABSOLUTE') {
1425
+ entry.x = round2(ln.x);
1426
+ entry.y = round2(ln.y);
1427
+ }
1428
+ entry.rotation = ln.rotation ? round2(ln.rotation) : undefined;
1429
+ if (ln.type === 'ELLIPSE' && ln.arcData) {
1430
+ entry.shape = 'arc ' + round2(ln.arcData.startingAngle) + ' ' + round2(ln.arcData.endingAngle) + ' ' + round2(ln.arcData.innerRadius);
1431
+ } else if (ln.type === 'VECTOR' && ln.vectorPaths) {
1432
+ entry.shape = 'path#' + shortHash(JSON.stringify(ln.vectorPaths));
1433
+ }
1434
+ if (ln.type === 'TEXT') {
1435
+ entry.text = textValue(ln.characters, function(c) { return c.length > 80 ? c.slice(0, 80) + '…' : c; });
1436
+ entry.fontSize = textValue(ln.fontSize, round2);
1437
+ entry.font = textValue(ln.fontName, function(f) { return f.family + ' ' + f.style; });
1438
+ entry.textDecoration = textValue(ln.textDecoration);
1439
+ entry.textCase = textValue(ln.textCase);
1440
+ entry.lineHeight = textValue(ln.lineHeight, unitValue);
1441
+ entry.letterSpacing = textValue(ln.letterSpacing, unitValue);
1442
+ }
1298
1443
  } catch(e) {}
1299
1444
  if (ln.type === 'INSTANCE') {
1300
1445
  try {
@@ -1456,6 +1601,7 @@ figma.ui.onmessage = async (msg) => {
1456
1601
  if (sig.fillHex !== defaultSig.fillHex && !diff.fillToken) diff.fillHex = sig.fillHex;
1457
1602
  if (sig.strokeHex !== defaultSig.strokeHex && !diff.strokeToken) diff.strokeHex = sig.strokeHex;
1458
1603
  if (sig.textHex !== defaultSig.textHex && !diff.textToken) diff.textHex = sig.textHex;
1604
+ if (sig.cornerRadius !== defaultSig.cornerRadius) diff.cornerRadius = sig.cornerRadius === undefined ? null : sig.cornerRadius;
1459
1605
  if (JSON.stringify(sig.children) !== JSON.stringify(defaultSig.children)) {
1460
1606
  diff.children = {
1461
1607
  count: sig.children.length,
@@ -1472,11 +1618,36 @@ figma.ui.onmessage = async (msg) => {
1472
1618
  diff.visibilityChanges[vk] = sig._visible[vk];
1473
1619
  }
1474
1620
  }
1475
- if (sig._mainPath && sig.variantOpacity !== defaultSig.variantOpacity) diff.variantOpacity = sig.variantOpacity === null ? 1 : sig.variantOpacity;
1621
+ if ((sig._mainPath || defaultSig._mainPath) && sig.variantOpacity !== defaultSig.variantOpacity) diff.variantOpacity = sig.variantOpacity === null ? 1 : sig.variantOpacity;
1622
+ // When both use the variant as the main layer, fillToken/strokeToken
1623
+ // above already report these.
1624
+ if (sig._mainPath || defaultSig._mainPath) {
1625
+ if (sig.variantFill !== defaultSig.variantFill) diff.variantFill = sig.variantFill;
1626
+ if (sig.variantStroke !== defaultSig.variantStroke) diff.variantStroke = sig.variantStroke;
1627
+ if (sig.variantRadius !== defaultSig.variantRadius) diff.variantRadius = sig.variantRadius === undefined ? null : sig.variantRadius;
1628
+ }
1629
+ var tokenDiff = diffTokens(sig._tokens, defaultSig._tokens);
1630
+ if (tokenDiff) diff.tokens = tokenDiff;
1476
1631
 
1477
1632
  // Nested layer changes, skipping values the fields above already
1478
1633
  // report so one change isn't listed twice.
1479
- var layerProps = ['fill', 'stroke', 'strokeWeight', 'opacity', 'visible', 'component'];
1634
+ if (sig._layout || defaultSig._layout) {
1635
+ var la = sig._layout || {};
1636
+ var lb = defaultSig._layout || {};
1637
+ var layoutDiff = null;
1638
+ var layoutKeys = ['layoutMode', 'primaryAxisAlignItems', 'counterAxisAlignItems', 'itemSpacing', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'];
1639
+ for (var lk = 0; lk < layoutKeys.length; lk++) {
1640
+ if (la[layoutKeys[lk]] !== lb[layoutKeys[lk]]) {
1641
+ if (!layoutDiff) layoutDiff = {};
1642
+ layoutDiff[layoutKeys[lk]] = la[layoutKeys[lk]] === undefined ? null : la[layoutKeys[lk]];
1643
+ }
1644
+ }
1645
+ if (layoutDiff) diff.layout = layoutDiff;
1646
+ }
1647
+
1648
+ var layerProps = ['fill', 'stroke', 'strokeWeight', 'opacity', 'visible', 'component', 'radius', 'width', 'height', 'x', 'y', 'rotation', 'shape', 'text', 'fontSize', 'font', 'textDecoration', 'textCase', 'lineHeight', 'letterSpacing'];
1649
+ // Reported for the main layer by fillToken/strokeToken/opacity/cornerRadius.
1650
+ var mainCovered = { fill: 1, stroke: 1, strokeWeight: 1, opacity: 1, radius: 1 };
1480
1651
  for (var lp in sig._layers) {
1481
1652
  var dl = defaultSig._layers[lp];
1482
1653
  if (!dl) continue;
@@ -1486,13 +1657,18 @@ figma.ui.onmessage = async (msg) => {
1486
1657
  for (var pi = 0; pi < layerProps.length; pi++) {
1487
1658
  var prop = layerProps[pi];
1488
1659
  if (prop === 'visible' && isTop) continue;
1489
- if (lp === sig._mainPath && prop !== 'visible' && prop !== 'component') continue;
1660
+ if (lp === sig._mainPath && mainCovered[prop]) continue;
1490
1661
  if (lp === sig._textPath && prop === 'fill') continue;
1491
1662
  if (sl[prop] !== dl[prop]) {
1492
1663
  if (!ld) ld = {};
1493
1664
  ld[prop] = sl[prop] === undefined ? null : sl[prop];
1494
1665
  }
1495
1666
  }
1667
+ var ltd = diffTokens(sl.tokens, dl.tokens);
1668
+ if (ltd) {
1669
+ if (!ld) ld = {};
1670
+ ld.tokens = ltd;
1671
+ }
1496
1672
  if (ld) {
1497
1673
  if (!diff.layers) diff.layers = {};
1498
1674
  diff.layers[lp] = ld;
@@ -995,7 +995,7 @@
995
995
  window.analyzeComponentSet = (nodeId) => {
996
996
  return window.sendPluginCommand('ANALYZE_COMPONENT_SET', {
997
997
  nodeId: nodeId
998
- }, 30000)
998
+ }, 115000)
999
999
  .catch(function(err) { return { success: false, error: err.message || String(err) }; });
1000
1000
  };
1001
1001
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "figma-console-mcp",
3
- "version": "1.41.3",
3
+ "version": "1.41.5",
4
4
  "description": "The most comprehensive MCP server for Figma — design tokens, variables, components, write tools, version history diff, accessibility audits, FigJam, Slides, and more. Local (WebSocket Desktop Bridge plugin) and Cloudflare Workers (paired + remote) modes.",
5
5
  "type": "module",
6
6
  "main": "dist/local.js",