Skip to content

feat: add Figma Buzz support with 13 new MCP tools#50

Open
abhijitchirde wants to merge 6 commits intosouthleft:mainfrom
abhijitchirde:feature/figma-buzz-support
Open

feat: add Figma Buzz support with 13 new MCP tools#50
abhijitchirde wants to merge 6 commits intosouthleft:mainfrom
abhijitchirde:feature/figma-buzz-support

Conversation

@abhijitchirde
Copy link
Copy Markdown

Summary

  • Add 13 new Buzz-specific MCP tools for asset workflows, canvas management, and grid layout (get/set canvas view, focus assets, create frames, move nodes, manage asset types).
  • These work in combination other Figma Design tools in Buzz to create assets.
  • Update Desktop Bridge plugin manifest to support the Buzz editor type.
  • Add editor-type guards in plugin startup to gracefully handle missing APIs and ensure safe bootstrapping in the Buzz context.

New Tools

Tool Description
figma_buzz_get_canvas_grid Get the 2D canvas grid layout for the current Figma Buzz file.
figma_buzz_create_canvas_row Create a new row in the Figma Buzz canvas grid.
figma_buzz_move_nodes_to_coord Move one or more nodes to a specific coordinate in the Figma Buzz canvas grid.
figma_buzz_get_canvas_view Get the current Figma Buzz canvas view (grid or single-asset).
figma_buzz_set_canvas_view Set the Figma Buzz canvas view to either grid or single-asset.
figma_buzz_get_focused_asset Get the currently focused asset in single-asset view.
figma_buzz_focus_asset Focus a specific asset in a Figma Buzz file.
figma_buzz_create_frame Create a grid-aware frame using Figma Buzz's native frame creation API.
figma_buzz_get_asset_type Get the Buzz asset type assigned to a node.
figma_buzz_set_asset_type Set the Buzz asset type on a node.
figma_buzz_smart_resize Smart resize a Buzz node using Figma Buzz's native resize API.
figma_buzz_get_text_content Extract serialized Buzz text fields from an asset.
figma_buzz_get_media_content Extract serialized Buzz media fields from an asset.

Changes

File What
manifest.json Add "buzz" to editorType
code.js Editor type detection, guarded variables bootstrap, and 13 Buzz command handlers
ui.html methodMap entries + result forwarding for Buzz commands
websocket-server.ts editorType handling, getEditorType() method, and safe bootstrap guards
figma-connector.ts Buzz method signatures on IFigmaConnector interface
websocket-connector.ts Buzz command methods
cloud-websocket-connector.ts Buzz command methods (cloud relay)
figma-desktop-connector.ts Stub methods for legacy CDP (clear error)
buzz-tools.ts Shared MCP tool definitions for 13 new Buzz tools for local + cloud mode
local.ts / index.ts Register Buzz tools
tests/* Unit tests covering all Buzz tools, connector commands, and bootstrap safety
docs/buzz.md Figma Buzz feature documentation

Tests

  • npm test — 555 tests pass (531 existing + 24 new)
  • Build compiles cleanly with npm run build:local
  • Open a Figma Slides file and run the Desktop Bridge plugin
  • Verify plugin loads without error (no variables fetch failure)
  • Open a Figma Slides file and run the Desktop Bridge plugin
  • Manual testing in Buzz: all tools operate on assets and grid correctly
  • Manual testing in Design/Slides: existing tools work, Buzz tools return clear rejection

@tpitre
Copy link
Copy Markdown
Contributor

tpitre commented Mar 27, 2026

Thanks for the Buzz support PR, @abhijitchirde. 13 new tools with tests and docs is a solid contribution.

A few questions before we review in depth:

  1. How stable is the Buzz Plugin API? Is it production-ready or still evolving?
  2. The editorType guards in code.js — do these affect startup performance for non-Buzz editors?
  3. Are there any Buzz-specific quirks with the variables API or auto-layout that we should be aware of?

We want to make sure we're not shipping Buzz support before the API surface is stable enough.

@abhijitchirde
Copy link
Copy Markdown
Author

Thanks @tpitre! It passed what I tested last time. Let me stress test it more. Figma themselves have buzz currently in open beta with some limited functionality (yet to reach Canva's level). I will update the request based on what results I find.

@abhijitchirde
Copy link
Copy Markdown
Author

@tpitre
Brief points for the questions above:

How stable is the Buzz Plugin API? Is it production-ready or still evolving?

Buzz Plugin API is still evolving as it's in Beta, the code deliberately works around that.

  • set_asset_type tool passes assetType as a raw string rather than a typed enum, its mentioned in buzz-tools.ts:287-289 as: "Asset type is passed through as a string so the runtime can validate the current Buzz API set." This is to safeguard by not hardcodig valid asset type values in the MCP layer, the tools won't break if Buzz adds/renames/removes asset types in upcoming Plugin API changes.
  • Similarly, figma_buzz_get_text_content and figma_buzz_get_media_content are read-only in this version (buzz-tools.ts:347, buzz-tools.ts:380) specifically because the mutation API surface is not stable yet. The tools are currently functional for grid layout, frame creation, asset focus, and metadata read, but write paths for text or media are intentionally deferred.
  • The tools are currently functional for grid layout, frame creation, asset focus, and metadata read, but write paths for text/media fields are intentionally deferred.

The editorType guards in code.js — do these affect startup performance for non-Buzz editors?

No, there is zero startup cost for non-Buzz editors.

  • The guard is a single assignment at plugin load time in figma-desktop-bridge/code.js:70: var __editorType = figma.editorType || 'figma';.
  • All 13 Buzz message handlers only run when a Buzz tool is explicitly called, they're dead code in any non-Buzz session
  • The one startup check is on line 147 of code.js, the variables fetch is skipped when editorType is 'buzz' (same as done for figjam/slides). This is a performance gain for Buzz editors, not a cost for others.

Are there any Buzz-specific quirks with the variables API or auto-layout that we should be aware of?

Few known quirks are already handled in the code:

  • Variables API is fully skipped in Buzz files -> As Buzz doen't surface standard Figma variables model. Any call to the variables tools while connected to a Buzz file will return empty. So code.js:147 bails out of the variables fetch for buzz editor type (similar to figjam and slides).
  • Auto-layout is not used, Buzz has canvas grid API -> Instead of Figma's auto-layout frames, Buzz exposes figma.getCanvasGrid(), figma.buzz.createFrame(row, col), and figma.viewport.canvasView.
  • The figma_buzz_smart_resize uses figma.buzz.smartResize() rather than standard resize(), because Buzz frames can have content that needs reflow awareness. Standard resizeNode from the generic figma tools would bypass that.

@abhijitchirde abhijitchirde force-pushed the feature/figma-buzz-support branch from b072c52 to 50cbaa8 Compare April 1, 2026 17:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants