Skip to main content
Glama
Rompni

figma-rest-mcp

by Rompni

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FIGMA_TEAM_IDNoOptional Figma team ID used for listing projects and project files.
FIGMA_ACCESS_TOKENYesYour Figma personal access token (required for all API calls).
FIGMA_BRIDGE_TOKENNoShared token for the optional write bridge when enabled.
FIGMA_ENABLE_WRITE_BRIDGENoSet to enable the optional write bridge (e.g., '1').

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
whoamiA

GET /v1/me — the user that owns FIGMA_ACCESS_TOKEN. Does not include team_id; pass a team URL or id to list_projects (or set FIGMA_TEAM_ID).

get_fileB

GET /v1/files/{key} — file JSON. depth defaults to 2. mode=trim|summary|full shrinks node payloads (see README).

get_nodesB

GET /v1/files/{key}/nodes?ids=... — specific nodes by id. Supports mode=trim|summary|full.

get_design_context_liteA

REST-only codegen snapshot for a subtree: identity, bbox, best-effort CSS flex from auto-layout, text + typography, fill/stroke summaries, component/instance ids. Optional include_tokens attaches a compact token summary (variables or labeled fallback). Not official MCP get_design_context. Image fills are refs — use get_images or bundle_image_fills for pixels.

get_imagesA

GET /v1/images/{key}?ids=&format= — render nodes to short-lived image URLs (png default). Distinct from get_image_fills (uploaded fill assets).

get_image_fillsA

GET /v1/files/{key}/images — download URLs for images already uploaded as fills (imageRef). Not a node render; use get_images to rasterize frames.

bundle_image_fillsA

Design-to-code helper: GET /v1/files/{key}/images then download each fill (Figma/S3 hosts only). Returns imageRef → { contentType, byteLength, dataUri }. Skips assets over max_bytes (default 250KB). Not canvas mutation.

render_nodes_as_data_uriA

GET /v1/images/{key} then download renders (Figma/S3 only) as data URIs. Same size/SSRF caps as bundle_image_fills. For design-to-code, not writing back to Figma.

get_file_metaA

GET /v1/files/{key}/meta — lightweight file metadata (name, folder, thumbnail, role). Scope: file_metadata:read.

get_file_versionsA

GET /v1/files/{key}/versions — version history. Auto-follows pagination.next_page. Scope: file_versions:read.

list_projectsA

GET /v1/teams/{team_id}/projects — projects visible to the PAT. Pass team (id or team URL) or set FIGMA_TEAM_ID. Scope: projects:read.

list_project_filesA

GET /v1/projects/{project_id}/files — files in a project. Scope: projects:read.

get_commentsA

GET /v1/files/{key}/comments — Figma returns the full comment list (not cursor-paginated). Optional as_md.

post_commentA

POST /v1/files/{key}/comments — add a comment or reply (comment_id of a root comment). Scope: file_comments:write.

delete_commentA

DELETE /v1/files/{key}/comments/{comment_id} — only the author can delete. Scope: file_comments:write.

get_comment_reactionsC

GET /v1/files/{key}/comments/{comment_id}/reactions — auto-follows pagination.next_page.

post_comment_reactionB

POST /v1/files/{key}/comments/{comment_id}/reactions — emoji shortcode such as :heart: or :+1:.

delete_comment_reactionA

DELETE /v1/files/{key}/comments/{comment_id}/reactions?emoji= — only the author can delete.

get_file_componentsB

GET /v1/files/{key}/components — published components in a file library. Scope: library_content:read.

get_file_component_setsB

GET /v1/files/{key}/component_sets — published component sets in a file library.

get_file_stylesB

GET /v1/files/{key}/styles — published styles in a file library. Scope: library_content:read.

get_team_componentsA

GET /v1/teams/{team_id}/components — published team library components. Auto-paginates meta.cursor.after. Scope: team_library_content:read.

get_team_component_setsA

GET /v1/teams/{team_id}/component_sets — published team library component sets. Auto-paginates meta.cursor.after. Scope: team_library_content:read.

get_team_stylesA

GET /v1/teams/{team_id}/styles — published team library styles. Auto-paginates meta.cursor.after. Scope: team_library_content:read.

get_componentA

GET /v1/components/{key} — metadata for a published component key (library key, not a file key). Scope: library_assets:read.

get_styleA

GET /v1/styles/{key} — metadata for a published style key (library key, not a file key). Scope: library_assets:read.

find_nodesA

Utility (not a REST endpoint): fetch a file tree then return only { id, name, type, absoluteBoundingBox, parentId } matches. Requires name and/or type. Prefer this over dumping get_file to locate a frame.

extract_textB

Utility: walk TEXT nodes and return { id, name, characters, parentId } copy. Default depth 8.

get_local_variablesA

GET /v1/files/{key}/variables/local — raw REST (local + consumed remote). Enterprise + file_variables:read. Prefer get_variable_defs for codegen shape and automatic fallback.

get_published_variablesA

GET /v1/files/{key}/variables/published — raw REST published names (no valuesByMode). Enterprise + file_variables:read. Prefer get_variable_defs.

get_variable_defsA

Preferred token path (REST, not official Desktop get_variable_defs). Tries local Figma variables first (Enterprise + file_variables:read), shapes { collections, modes, variables: [{ id, name, resolvedType, valuesByMode, scopes }] }, resolves aliases one level. If variables 403/empty and fallback is on (default), uses file styles + inferred subtree tokens labeled inferred: true. Pass node_id so fallback can resolve style usage and infer colors/type/radii/spacing.

get_design_tokens_fallbackA

Skip the variables API. Build labeled tokens from file styles (library_content:read) plus optional inferred fills/type/radii/spacing from a subtree. Every inferred token has inferred: true — not real Figma variables.

get_dev_resourcesA

GET /v1/files/{key}/dev_resources — Dev Mode links on nodes. Scope: file_dev_resources:read.

create_dev_resourcesC

POST /v1/dev_resources — attach a Dev Mode URL to a node. Scope: file_dev_resources:write.

update_dev_resourcesA

PUT /v1/dev_resources — update name/url by dev resource id. Scope: file_dev_resources:write.

delete_dev_resourceA

DELETE /v1/files/{key}/dev_resources/{id}. Scope: file_dev_resources:write.

list_webhooksA

GET /v2/webhooks — list Webhooks v2 for a context (team/project/file) or plan_api_id. Auto-paginates next_page. Scope: webhooks:read. 403 usually means missing scope or plan without webhooks.

get_webhookA

GET /v2/webhooks/{id}. Scope: webhooks:read. Passcode is redacted by Figma.

create_webhookA

POST /v2/webhooks — Figma sends a PING on create unless status=PAUSED. Scope: webhooks:write. Requires passcode for endpoint verification.

update_webhookB

PUT /v2/webhooks/{id}. Scope: webhooks:write. Empty description deletes it.

delete_webhookA

DELETE /v2/webhooks/{id} — irreversible. Scope: webhooks:write.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 41 tools

Disambiguation4/5

Most tools target a unique resource and action, and descriptions explicitly cross-reference sibling functions (get_images vs get_image_fills, get_variable_defs vs fallbacks). However, the variable/token helpers and design-to-code utilities overlap closely enough that an agent could still pick the wrong one without careful attention.

Naming Consistency3/5

The majority use snake_case verb_noun names, but conventions are mixed: list_projects vs get_team_components, post_comment vs create_dev_resources, singular/plural dev_resource(s), plus non-standard utility names like whoami, find_nodes, extract_text, and suffix-based helpers (_lite, _fallback).

Tool Count2/5

41 tools is well beyond the comfortable range and spans many subdomains such as files, nodes, images, comments, libraries, variables, dev resources, and webhooks. This would be more manageable as several focused MCP servers.

Completeness5/5

The server covers the major Figma REST surface: file/project/team reads, node inspection, rendering, images, comments/reactions, component/style libraries, variables, dev resources, and webhook CRUD. Mutation-capable resources have read/write/update/delete covered, so agents are unlikely to hit dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues