@bromso/figma-mcp
Bridge between AI MCP clients and Figma. Stdio shim + daemon + bundled bridge plugin.
Versions
1.6.0latest1.5.01.4.01.3.11.3.0+ show 3 moreshow less
1.2.01.1.01.0.0Tools 97
audit_contrast WCAG 2.x contrast audit. Computes the contrast ratio between the node's first SOLID text fill and the first SOLID fill on its ancestors (resolved background). Returns AA / AAA pass/fail flags. Returns null ratio when fill or background is unresolvable (e.g. mixed fills, gradient background, no parent with a solid fill).
audit_target_size WCAG 2.2 target-size audit (Success Criterion 2.5.5). Reads node.absoluteBoundingBox and reports whether min(width, height) is ≥ 24 (passesMinimum) and ≥ 44 (passesEnhanced).
simulate_color_blindness Simulate how a hex color appears to a viewer with the named color-vision deficiency. Pure computation — does not touch the design. Useful for the LLM to check whether a brand color survives the deficiency before accepting it.
set_alt_text Write alt text for a node. Stored in pluginData under `a11y/altText` AND attached as an annotation (categoryless) so the alt text is visible in Figma's annotation panel. Overwrites any existing alt text. Idempotent — calling again with a new value replaces both the pluginData entry and the existing annotation.
get_alt_text Read alt text for a node. First checks pluginData (`a11y/altText`); if absent, falls back to the first annotation whose category is the alt-text category (or, in this implementation, the first categoryless annotation). Returns null if neither source has a value.
set_aria_label Write an ARIA label for a node. Stored in pluginData under `a11y/ariaLabel`. Does NOT attach an annotation (ARIA labels are usually shorter than alt text and clutter the annotation panel; designers can still surface them via `audit_a11y_summary`).
get_aria_label Read the ARIA label for a node. Returns null if not set.
set_landmark_role Tag a node with a WAI-ARIA landmark role. Writes pluginData under `a11y/landmarkRole`. Use to mark headers (`banner`), nav menus (`navigation`), main content regions (`main`), sidebars (`complementary`), footers (`contentinfo`), search forms (`search`), generic forms (`form`), or generic regions (`region`).
get_landmark_role Read the WAI-ARIA landmark role tag for a node. Returns null if not set.
list_annotations Return every annotation attached to a node, with each entry's array index (annotations have no stable ids in the plugin API; the index is the addressing scheme).
add_annotation Append an annotation to a node. The annotation appears in Figma's annotation panel attached to the node. `categoryId` ties it to a category (see `figma.annotations.categories`); omit for a categoryless annotation. Returns the new entry's array index.
remove_annotation Remove the annotation at the given array index. Indices shift after removal — re-list before removing more than one. Throws if `annotationIndex` is out of range.
audit_a11y_summary Walk a node (optionally recursively) and aggregate accessibility checks: contrast, target size, alt text, ARIA label, landmark role. Each check is graded `ok` / `warn` / `error` with a human-readable detail string. The most useful tool when an LLM wants to grade a frame's overall a11y posture in a single call.
create_sticky FigJam-only. Create a sticky note with the given content (and optional author name).
create_section FigJam-only. Create a labeled section that can group nodes.
create_connector FigJam-only. Create a connector linking two existing nodes by id. Both endpoints must exist.
create_code_block FigJam-only. Create a code block with a language label (defaults to 'plaintext').
create_shape_with_text FigJam-only. Create a labeled shape (sticky-note-like surface with a fixed silhouette).
create_table FigJam-only. Create a table with the given row + column count.
set_sticky_content FigJam-only. Replace the content of an existing sticky note.
set_section_name FigJam-only. Replace the name label of an existing section.
move_into_section FigJam-only. Add node ids to a section's children list.
list_section_children FigJam-only. Return the node ids currently inside a section.
extract_styles Extract paint/text/effect styles from a Figma file.
import_variables Stream variables into the current Figma file. Resumable + idempotent. Set atomic:true to roll back on first failure.
export_variables Return local variables, paginated. Pass nextCursor to resume.
update_variables_batch Apply many setValueForMode calls in one request. Non-atomic: per-item failures don't stop the rest.
stream_status Report progress of an in-flight or recently-completed import session.
create_rectangle Create a rectangle node on the current page.
create_frame Create a frame (auto-layout-capable container) on the current page.
create_ellipse Create an ellipse node on the current page.
create_line Create a line node defined by two endpoint coordinates.
create_text Create a text node with the given characters and (optional) font size.
set_text_content Replace the characters of an existing TEXT node.
set_fill Set the fill paint(s) on a node. Phase 8 supports a single SOLID paint.
set_stroke Set the stroke paint and (optional) weight on a node.
resize_node Resize a node's bounding box.
clone_node Clone a node and return the id of the new copy.
delete_node Remove a node from the page.
create_component Wrap an existing node into a reusable component; returns componentId + key.
extract_components Return all local components.
extract_local_variables Return all local variables in the current file.
bridge_status Report daemon liveness, version, and whether a Figma plugin is paired.
get_file_metadata REST. Return narrowed metadata for a Figma file: name, lastModified, version, role, editorType.
get_file_pages REST. Return the page list (CANVAS children) of a Figma file.
get_node_by_id REST. Return the type/name of a node by id (returns found: false when the node does not exist).
get_file_versions REST. Return the version history of a Figma file (paginated via before/after).
get_file_styles REST. Return the file's local styles bucketed by type (paint/text/effect/grid).
get_file_components REST. Return the file's published components.
get_file_component_sets REST. Return the file's published component sets (variants).
get_file_branches REST. Return the file's branches.
get_image_renders REST. Render specified nodes as PNG/SVG/PDF/JPG and return presigned URLs.
get_image_fills REST. Return the file's image fill asset URLs (by hash).
get_user_me REST. Return the authenticated user's profile.
get_file_comments REST. Return the file's comments.
post_file_comment REST. Post a new comment. WRITE — gated behind --enable-write-tools (default off).
delete_file_comment REST. Delete a comment. WRITE — gated behind --enable-write-tools (default off).
get_team_projects REST. Return all projects in a team.
get_project_files REST. Return all files in a project.
get_team_components REST. Return team components (cursor-paginated). Pass nextCursor as cursor to fetch the next page.
get_team_styles REST. Return team styles (cursor-paginated).
get_dev_resources REST. Return dev resources for the file (optionally filtered by node ids).
post_dev_resources REST. Create dev resources. WRITE — gated behind --enable-write-tools (default off).
list_team_webhooks REST. Return all webhooks owned by a team (Figma webhooks v2).
get_webhook REST. Return a single webhook by id (Figma webhooks v2).
get_webhook_requests REST. Return recent delivery attempts for a webhook (Figma webhooks v2).
create_webhook REST. Create a webhook for the given team + event type. WRITE — gated behind --enable-write-tools (default off).
update_webhook REST. Update a webhook's endpoint/passcode/status/description. WRITE — gated behind --enable-write-tools (default off).
delete_webhook REST. Delete a webhook. WRITE — gated behind --enable-write-tools (default off).
create_slide Slides-only. Create a slide. By default, appended to the end of the last row. Pass rowIndex/columnIndex to place explicitly.
create_slide_row Slides-only. Create a slide row. By default, appended to the end of the slide grid.
set_slide_name Slides-only. Set the slide's title (the slide's name). Slides have no separate title placeholder; the BaseFrameMixin name IS the title surface.
set_slide_skipped Slides-only. Toggle whether a slide is skipped during presentation playback (slide.isSkippedSlide). This is the only slide-level metadata flag the plugin API exposes.
set_slide_transition Slides-only. Set the slide-to-slide transition (style + optional duration, curve, timing).
set_slide_background Slides-only. Set the slide's background to a single SOLID paint (writes through to slide.fills).
move_slide Slides-only. Move a slide to (rowIndex, columnIndex). Internally calls figma.setSlideGrid with the mutated grid.
duplicate_slide Slides-only. Clone a slide. The duplicate is appended after the source in the same row.
delete_slide Slides-only. Remove a slide from the deck.
list_slides Slides-only. Enumerate slide ids. With no rowIndex, returns every slide; with a rowIndex, returns just that row's slides.
list_slide_rows Slides-only. Enumerate slide row ids in grid order.
set_active_slide Slides-only. Focus a slide (writes figma.currentPage.focusedSlide). Note: the plugin API has no scrollAndZoomIntoSlide; assigning focusedSlide is the only way to programmatically focus a slide.
get_slide Slides-only. Return a structured summary of a slide: name, isSkipped, transition, isFirst.
set_slides_view Slides-only. Toggle the editor viewport mode. 'grid' shows the whole grid; 'single-slide' zooms in on the focused slide.
get_slide_grid Slides-only. Return the full slide grid as a 2D array of slide ids (outer index = row).
get_console_logs Return recent console entries from the Figma plugin sandbox (all levels).
clear_console Clear the captured console buffer; returns how many entries were dropped.
get_console_errors Return recent console entries at level=error only.
get_console_warnings Return recent console entries at level=warn only.
query_console Filter captured console entries by JS regex on the message text. Pattern compiled with no flags. Pattern is capped at 200 chars; each message is truncated to its first 1000 chars before matching to bound worst-case backtracking.
console_status Report buffer statistics: total, per-level counts, and dropped (overflowed) count.
echo echo
hello say hi
ping ping
plugin_echo uses figma adapter
boom throws a plain Error
slow blocks until external resolution
plugin_ping ping over the WS plugin
Permissions 4
network medium filesystem low shell high env_vars low