Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.neozhehan/figma-edit-mcp

NPM · FIGMA-EDIT-MCP

Programmatically read, create, and modify Figma designs via MCP.

Available components

−3 this week 87 Trust /100

Last scanned (51 minutes ago)

Scores higher than 91% of npm servers

Category Design and Media

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security80
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects @modelcontextprotocol/sdk 1.29.0, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 84 of 205 dependencies flagged as unhealthy (1 deprecated). View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to neozhehan/figma-edit-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 92 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability84
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6389 tokens (~127/item across 50 items; 45 tools + 5 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management77
  • Stability observed for 23 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 47 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 −4
    • Stability: pass → 0.77 functional
  • 30 Oct 26 +1
    • Stability: 0.97 → pass security
  • 29 Oct 26 −1
    • CVE-2026-118663 affects this package: high ▼ security
    • Stability: pass → 0.97 functional
  • 28 Oct 26 0
    • GHSA-f897-62hf-6gxq affects this package: high ▼ security
  • 24 Oct 26 0
    • CVE-2023-54404 affects this package: high ▼ security
  • 23 Oct 26 +1
    • Stability: 0.97 → pass security
  • 21 Oct 26 −1
    • CVE-2026-111771 affects this package: high ▼ security
    • CVE-2026-111768 affects this package: high ▼ security
    • CVE-2026-111769 affects this package: high ▼ security
    • CVE-2026-111767 affects this package: high ▼ security
    • Stability: pass → 0.93 functional
  • 17 Oct 26 +4
    • Stability: 0.77 → pass security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed npm/figma-edit-mcp@2.3.3

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo neozhehan/figma-edit-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/neozhehan/figma-edit-mcp/.github/workflows/publish.yml@refs/tags/v2.3.3
Rekor log index 2339133716
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:bc99ac7e913f4ad3f8f781f7f82c385f44d621ade3cca668274b72d630c8e52ea94cf0ad3405fed158216af0e811c16ec5f2ae1d07f2ae3438bfb7945

Background: How many MCP packages publish verified provenance →

Vulnerabilities 11 findings
ID CVE Severity Vector Fix available
GHSA-rmxm-3fg6-px4f CVE-2026-118663 medium CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N yes
GHSA-22jm-h49p-29qw CVE-2026-111767 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L yes
GHSA-46jr-4wx8-v453 CVE-2026-111768 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-6prh-2h8m-c8cw CVE-2026-111769 medium CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N yes
GHSA-6qxp-vccf-f47h CVE-2026-104850 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N yes
GHSA-f897-62hf-6gxq high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-rvq5-wwqv-78pq CVE-2026-111771 medium CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N yes
GHSA-5v7r-6r5c-r473 CVE-2026-31808 medium CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L yes
GHSA-58qx-3vcg-4xpx CVE-2026-45736 medium CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:N/A:N yes
GHSA-96hv-2xvq-fx4p CVE-2026-48779 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes
GHSA-mrhx-c7xc-m3w5 CVE-2023-54404 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 205 packages
Packages resolved 205
Deprecated 1
Stale 84
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 45 exposed · ~6,181 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
annotation_list ~153

Read the native annotations on a page or node (and subtree); exactly one of pageId or nodeId is required. The file's annotation categories are returned by default; pass includeCategories: false to omit them. Page loading is bounded; a page-scoped failure returns its structured error directly and successful reads include `coverage`.

NameTypeReqDescription
includeCategoriesboolean–Include the file's global annotation categories in the result. Defaults to true; pass false to omit them.
nodeIdstring–The node ID to get annotations from. Exactly one of pageId or nodeId is required.
pageIdstring–The page ID to get annotations from. Exactly one of pageId or nodeId is required.
NameTypeReqDescription
annotatedNodesarray–Grouped annotations, preserving the owning node in page and node modes
categoriesarray–List of global annotation categories
coverage––Page-scan coverage; partial read data remains usable when complete is false
errorobject––

No examples provided.

annotation_set ~130

Append native annotations to one or more nodes in a batched call. If the status is 'partial_success', treat it as an incomplete operation and report the failed and skipped items to the user. Appending is NOT idempotent and a 'failed' row may already have appended its annotation (verified counts differ, or outcomeUnknown is true when post-state is unreadable; both carry partialMutation: true) — before retrying any non-success item, call annotation_list and compare the labels already on the node, or you will create a duplicate.

NameTypeReqDescription
annotationsarrayyesArray of annotations to set
NameTypeReqDescription
errorobject––
failedCountnumber–Number of failed annotations
requestedCountnumber–Number of requested annotations
resultsarray–Detailed execution results with before/after annotation counts (one row per input, in input order)
skippedCountnumber–Number of skipped annotations
statusstring–Overall status of the batch operation
succeededCountnumber–Number of succeeded annotations
successboolean–Whether all annotations were set successfully

No examples provided.

channel_join ~37

Join a plugin channel to establish the live connection to the Figma document.

NameTypeReqDescription
channelstringyesThe name of the channel to join
NameTypeReqDescription
allowEditNode––false | 'page' | 'node'
allowEditStyleboolean–Whether style edits are allowed
allowEditVariableboolean–Whether variable edits are allowed
channelstring–Channel name
documentIdstring–Figma document ID
documentNamestring–Figma document name
editableScopeTypestring–readonly, page, or node
errorobject––
errorCodestring–Error code if status is error
errorDetails––Structured error context if status is error and the underlying failure carried any
errorMessagestring–Error message if status is error
nodeobject––
pageCountnumber–Number of pages in the document
pagesarray––
pluginVersionstring–Self-reported bound Figma plugin build version (present on every successful join)
scopeRootId––Editable scope root node ID
serverVersionstring–Self-reported MCP server build version (present on every successful join)
statusstring–Connection status

No examples provided.

component_delete_property ~83

Remove a component-property definition from a main component or variant set; propagates to every instance.

NameTypeReqDescription
nodeIdstringyesID of the COMPONENT or COMPONENT_SET
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
propertyNamestringyesThe human-readable name of the property to delete
NameTypeReqDescription
errorobject––
idstring–ID of the component/component set
namestring–Name of the component/component set
propertyNamestring–The deleted property name
results––Detailed execution results
successboolean–Whether property deletion was successful

No examples provided.

component_list ~131

List components in the document, with filtering and scope options. Document scans isolate page failures and report them in `coverage`; page-scoped failures return their structured error directly.

NameTypeReqDescription
filterstring–Filter components by origin: 'local' (created in this file) or 'remote' (library components). If omitted, returns all.
pageIdstring–The ID of the page to query when scope is 'page'
scopestring–Scope of the search: 'page' (queries a specific page, requiring pageId) or 'document' (entire file, default).
NameTypeReqDescription
componentsarray–List of component objects
countnumber–Total count of components
coverage––Page-scan coverage; partial read data remains usable when complete is false
errorobject––

No examples provided.

component_manage_property ~247

Add or edit a component-property definition (BOOLEAN/TEXT/INSTANCE_SWAP) on a main component or variant set. Deleting is `component_delete_property`.

NameTypeReqDescription
actionstringyesAction to perform
defaultValue––Required for ADD: Default value for the property. For INSTANCE_SWAP, this must be a component node ID.
newDefaultValue––For the EDIT action, to change the default value. For INSTANCE_SWAP, this must be a component node ID.
newPropertyNamestring–For EDIT, the optional replacement property name. It must be non-empty when supplied; omit it to leave the existing property name unchanged.
nodeIdstringyesID of the COMPONENT or COMPONENT_SET
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
preferredValuesarray–Array of preferred values for INSTANCE_SWAP properties during ADD or EDIT.
propertyNamestringyesFor ADD, the required new property name, which must be non-empty. For EDIT, the existing property's exact lookup name.
propertyTypestring–Required for ADD: The type of property
NameTypeReqDescription
actionstring–The action that was performed (ADD/EDIT)
errorobject––
idstring–ID of the component/component set
namestring–Name of the component/component set
propertyNamestring–The affected property name
results––Detailed execution results
successboolean–Whether property management was successful

No examples provided.

create_component ~58

Convert an existing frame into a main component.

NameTypeReqDescription
nodeIdstringyesThe ID of the frame to convert to a component
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
NameTypeReqDescription
errorobject––
idstring–ID of the created component
namestring–Name of the created component
parentIdstring–ID of the parent the component was placed into — confirm containment without a follow-up read

No examples provided.

create_component_set ~132

Combine components into a component set (variants) with property definitions.

NameTypeReqDescription
componentSetNamestring–Optional non-empty name for the component set
componentsarrayyesArray of component objects
parentIdstringyesID of the appendable parent container (frame, group, page, section, etc.) to place the set in; discover it with node_info
parentNodeNamestringyesThe parent node's current exact name, passed back verbatim from `node_info`.
propertiesarrayyesArray of property names (e.g. ['Size', 'State'])
NameTypeReqDescription
childCountnumber–Number of variants in the set
errorobject––
idstring–ID of the created component set
namestring–Name of the component set
parentIdstring–ID of the parent the set was placed into — confirm containment without a follow-up read
typestring–Node type (COMPONENT_SET)
variantPropertiesobject–Variant properties definition
warningstring–Warning message if some properties could not be read

No examples provided.

create_frame ~367

Create a frame (container) with optional fill/stroke and full auto-layout configuration.

NameTypeReqDescription
counterAxisAlignItemsstring–Counter axis alignment for auto-layout frame
fillColorobject–Fill color in RGBA format
heightnumberyesHeight of the frame
itemSpacingnumber–Distance between children in auto-layout frame. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN.
layoutModestring–Auto-layout mode for the frame
layoutSizingHorizontalstring–Horizontal sizing mode for auto-layout frame
layoutSizingVerticalstring–Vertical sizing mode for auto-layout frame
layoutWrapstring–Whether the auto-layout frame wraps its children
namestring–Optional non-empty name for the frame
paddingBottomnumber–Bottom padding for auto-layout frame
paddingLeftnumber–Left padding for auto-layout frame
paddingRightnumber–Right padding for auto-layout frame
paddingTopnumber–Top padding for auto-layout frame
parentIdstringyesParent node ID to append the frame to
parentNodeNamestringyesThe parent node's current exact name, passed back verbatim from `node_info`.
primaryAxisAlignItemsstring–Primary axis alignment for auto-layout frame. Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced.
strokeColorobject–Stroke color in RGBA format
strokeWeightnumber–Stroke weight
widthnumberyesWidth of the frame
xnumberyesX position
ynumberyesY position
NameTypeReqDescription
errorobject––
idstring–ID of the created frame
namestring–Name of the created frame
parentIdstring–ID of the parent the node was placed into — confirm containment without a follow-up read

No examples provided.

create_instance ~124

Instantiate a component (by `componentKey` or `componentId`) at a position.

NameTypeReqDescription
componentIdstring–Node ID of the component to instantiate (preferred for local components)
componentKeystring–Key of the component to instantiate (for remote/library components)
parentIdstringyesParent node ID to append the instance to
parentNodeNamestringyesThe parent node's current exact name, passed back verbatim from `node_info`.
xnumberyesX position
ynumberyesY position
NameTypeReqDescription
componentIdstring–ID of the component the instance was created from
errorobject––
idstring–ID of the created component instance
namestring–Name of the component instance
parentIdstring–ID of the parent the instance was placed into — confirm containment without a follow-up read

No examples provided.

create_shape ~323

Create a rectangle, ellipse, polygon, or star via `type`, with position/size and optional `fillColor`/`strokeColor`. Shape-specific params (`arcData`; `pointCount`/`innerRadius`) validated by `type`. `pointCount` = sides (polygon) or points (star), native count — no even-parity rule.

NameTypeReqDescription
arcDataobject–Optional arc data for creating arcs/donuts (ELLIPSE only)
fillColorobject–Fill color in RGBA format
heightnumberyesHeight of the shape
innerRadiusnumber–0.0–1.0, star sharpness (default: 1.0). STAR only.
namestring–Optional non-empty name for the shape
parentIdstringyesParent node ID to append the shape to
parentNodeNamestringyesThe parent node's current exact name, passed back verbatim from `node_info`.
pointCountnumber–Number of sides (polygon) or points (star), ≥3. Required for POLYGON and STAR.
strokeColorobject–Stroke color in RGBA format
typestringyesThe type of shape to create
useAbsolutePositionboolean–If true and parent is an auto-layout frame, forces absolute positioning to prevent layout shifts.
widthnumberyesWidth of the shape
xnumberyesX position
ynumberyesY position
NameTypeReqDescription
errorobject––
idstring–ID of the created shape
namestring–Name of the created shape
parentIdstring–ID of the parent the node was placed into — confirm containment without a follow-up read

No examples provided.

create_svg ~99

Create a node from an SVG markup string.

NameTypeReqDescription
namestring–Optional non-empty name for the new node
parentIdstringyesParent ID to append to
parentNodeNamestringyesThe parent node's current exact name, passed back verbatim from `node_info`.
svgstringyesThe SVG XML string
xnumber–X position
ynumber–Y position
NameTypeReqDescription
errorobject––
idstring–ID of the created node
namestring–Name of the created node
parentIdstring–ID of the parent the node was placed into — confirm containment without a follow-up read

No examples provided.

create_text ~165

Create a text node with content and optional font size/weight/color.

NameTypeReqDescription
fontColorobject–Font color in RGBA format
fontSizenumber–Font size, minimum 1 (default: 14)
fontWeightinteger–Font weight: 100–900 in increments of 100 (default: 400)
namestring–Optional non-empty semantic layer name for the text node
parentIdstringyesParent node ID to append the text to
parentNodeNamestringyesThe parent node's current exact name, passed back verbatim from `node_info`.
textstringyesText content
xnumberyesX position
ynumberyesY position
NameTypeReqDescription
errorobject––
idstring–ID of the created text node
namestring–Name of the created text node
parentIdstring–ID of the parent the node was placed into — confirm containment without a follow-up read

No examples provided.

instance_get_overrides ~45

Read the override properties from a source instance, to later apply them to other instances.

NameTypeReqDescription
nodeIdstringyesThe ID of the component instance to get overrides from.
NameTypeReqDescription
errorobject––
mainComponentIdstring–ID of the main component
messagestring–Status message
overridesCountnumber–Number of overrides found
sourceInstanceIdstring–Source instance ID
successboolean–Whether overrides retrieval was successful

No examples provided.

instance_set_overrides ~100

Apply previously-read overrides to target instances; targets are swapped to the source component and all overrides applied. If the status is 'partial_success', treat it as an incomplete operation, report the failed and skipped items to the user, and retry every non-success item (both failed and skipped).

NameTypeReqDescription
sourceInstanceIdstringyesID of the source component instance
targetNodesarrayyesArray of target instances with their expected names for verification.
NameTypeReqDescription
errorobject––
failedCountnumber–Number of failed targets
requestedCountnumber–Number of requested targets
resultsarray–Results per target node (one row per input, in input order)
skippedCountnumber–Number of skipped targets
statusstring–Overall status of the batch operation
succeededCountnumber–Number of succeeded targets
successboolean–Whether overrides application was successful

No examples provided.

instance_set_property ~112

Set one property on an instance — boolean toggle, text override, instance swap, or variant selection.

NameTypeReqDescription
nodeIdstringyesThe ID of the instance node
nodeNamestringyesThe instance's current exact name, passed back verbatim from `node_info`.
propertyNamestringyesThe human-readable name of the component property to change
value–yesThe new value for the property. For INSTANCE_SWAP properties, this must be a component key (the stable library identifier).
NameTypeReqDescription
errorobject––
results––Execution details
successboolean–Whether property update was successful

No examples provided.

node_apply_style ~120

Link a node to a shared library style (paint/text/effect/grid) by `styleId`. Use the raw `node_set_*` setters for ad-hoc values not backed by a style.

NameTypeReqDescription
nodeIdstringyesThe ID of the node to apply style to
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
styleIdstringyesThe ID of the style to apply
styleTypestringyesType of style to apply (target property)
NameTypeReqDescription
errorobject––
namestring–Name of the modified node
successboolean–Whether the style was applied successfully

No examples provided.

node_bind_variable ~300

Bind a variable to a node property, or set an explicit variable mode. Use instead of a literal `node_set_*` when the value should track a design token. Ordering rules: set auto-layout before binding padding/spacing; set a solid fill before binding a colour token.

NameTypeReqDescription
bindVariablesobject–Map of property names to variable IDs (to bind) or null (to unbind). Valid fields: fills, strokes, height, width, characters, itemSpacing, paddingLeft, paddingRight, paddingTop, paddingBottom, visibl…
explicitVariableModesobject–Map of variable collection IDs to mode IDs. E.g., { 'VariableCollectionID:1:2': 'ModeID:1:3' }
nodeIdstringyesThe ID of the node to bind variables to
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
NameTypeReqDescription
errorobject––
messagestring–Status message
namestring–Name of the modified node
successboolean–Whether the variables were bound successfully

No examples provided.

node_clone ~95

Duplicate an existing node, optionally at a new `x`/`y`. Produces a new node id.

NameTypeReqDescription
nodeIdstringyesThe ID of the node to clone
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
xnumber–New X position for the clone
ynumber–New Y position for the clone
NameTypeReqDescription
errorobject––
idstring–ID of the new cloned node
namestring–Name of the cloned node
parentIdstring–ID of the parent the clone was placed into — confirm containment without a follow-up read

No examples provided.

node_delete ~78

Delete one or more nodes in a single batched, per-item-validated call. No API undo. If the status is 'partial_success', treat it as an incomplete operation, report the failed and skipped items to the user, and retry every non-success item (both failed and skipped).

NameTypeReqDescription
nodesarrayyesArray of nodes to delete
NameTypeReqDescription
errorobject––
failedCountnumber–Number of failed deletions
requestedCountnumber–Number of requested deletions
resultsarray–Detailed deletion results (one row per input, in input order)
skippedCountnumber–Number of skipped deletions
statusstring–Overall status of the batch operation
succeededCountnumber–Number of succeeded deletions
successboolean–Whether all deletions succeeded

No examples provided.

node_export_visual ~138

Render a node to an image (PNG/JPG/SVG/PDF) at a given scale. Read-only; the canonical way to visually verify edits. SVG returns raw XML in `svg` (directly readable); PNG/JPG/PDF return base64 in `imageData` (PDF is a delivery artifact — prefer PNG/SVG for inspection).

NameTypeReqDescription
formatstring–Export format
nodeIdstringyesThe ID of the node to export
scalenumber–Export scale, between 0.1 and 4.0 (e.g. 1, 2, 0.5)
NameTypeReqDescription
errorobject––
formatstring–Image format
imageDatastring–Base64-encoded binary data (PNG/JPG/PDF)
mimeTypestring–MIME type of the exported image
nodeIdstring–ID of the exported node
scalenumber–Export scale used
svgstring–Raw SVG XML markup (returned instead of imageData when format=SVG)

No examples provided.

node_flatten ~68

Flatten a node and its children into a single vector. Lossy — original structure is not recoverable.

NameTypeReqDescription
nodeIdstringyesThe ID of the node to flatten
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
NameTypeReqDescription
errorobject––
idstring–ID of the flattened node
namestring–Name of the flattened node
parentId––ID of the container the flattened node was placed in — the source node's original parent, so D11 containment is confirmable from this response without a follow-up node_info
typestring–Type of the flattened node (usually VECTOR)

No examples provided.

node_group ~63

Wrap multiple nodes in a new group node.

NameTypeReqDescription
namestring–Optional non-empty name for the new group. Omit to accept Figma's default; `""` is refused rather than silently substituted.
nodesarrayyesArray of nodes to group
NameTypeReqDescription
childCountnumber–Number of children in the group
errorobject––
idstring–ID of the new group node
namestring–Name of the new group node

No examples provided.

node_info ~220

Read one or more nodes — recursive subtree traversal with `properties` selection, `filter`, and `maxDepth`. Returns only the requested properties (incl. resolved `boundVariables`/`explicitVariableModes`) under each node's `properties` key. A node whose containing page could not be read is listed in `pageFailedNodes` with that page's ID, and the page's structured reason is in `coverage.pageErrors` — other pages still return normally. The workhorse read; start here before any write.

NameTypeReqDescription
concurrencyLimitinteger–Concurrency limit for parallel subtree walk (default: 4)
filterobject–Optional filter criteria.
maxDepthinteger–Maximum depth for recursive child traversal. 0 = self only, 1 = self and immediate children, etc.
nodeIdsarray–Array of node IDs to inspect. If empty, uses editable scope.
propertiesarray–Array of property names to return (populates each node's `properties` object in the response).
NameTypeReqDescription
coverage––Page-scan coverage; partial read data remains usable when complete is false
errorobject––
missingNodeIdsarray–Requested IDs that weren't found
nodesarray–Node entries (id/name/type + optional properties/children/path/descendantCount)
pageFailedNodesarray–Requested nodes that exist but could not be read because their containing page failed; omitted when none

No examples provided.

node_insert_child ~152

Reparent a node under a new parent at an optional `index`. Valid range is 0 to parent's child count. Omit `index` to append.

NameTypeReqDescription
childIdstringyesID of the child node to reparent
childNodeNamestringyesThe child node's current exact name, passed back verbatim from `node_info`.
indexnumber–Position in parent's children array (default: append). The output index reports the actual resolved position (same-parent reorder shifts indices).
parentIdstringyesID of the new parent node
parentNodeNamestringyesThe parent node's current exact name, passed back verbatim from `node_info`.
NameTypeReqDescription
childIdstring–ID of the reparented child node
errorobject––
indexnumber–Index at which the child was inserted
newParentIdstring–ID of the new parent node

No examples provided.

node_rename ~97

Rename a node (sets `name` to an exact value).

NameTypeReqDescription
namestringyesNew non-empty name for the node. Figma normalizes an empty name to a type default, so `""` is refused rather than silently substituted.
nodeIdstringyesThe ID of the node to rename
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
NameTypeReqDescription
errorobject––
namestring–The new name of the node
oldNamestring–The old name of the node

No examples provided.

node_set_auto_layout ~330

Configure a frame's auto-layout (mode, padding, spacing, alignment, sizing) in one unified setter.

NameTypeReqDescription
counterAxisAlignItemsstring–Counter axis alignment (MIN/MAX = top/bottom in horizontal, left/right in vertical)
counterAxisSpacingnumber–Distance between wrapped rows/columns. Only works when layoutWrap is set to WRAP.
itemSpacingnumber–Distance between children. Note: This value will be ignored if primaryAxisAlignItems is set to SPACE_BETWEEN.
layoutModestring–Layout mode for the frame
layoutSizingHorizontalstring–Horizontal sizing mode (HUG for frames/text only, FILL for auto-layout children only)
layoutSizingVerticalstring–Vertical sizing mode (HUG for frames/text only, FILL for auto-layout children only)
layoutWrapstring–Whether the auto-layout frame wraps its children
nodeIdstringyesThe ID of the frame to modify
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
paddingBottomnumber–Bottom padding value
paddingLeftnumber–Left padding value
paddingRightnumber–Right padding value
paddingTopnumber–Top padding value
primaryAxisAlignItemsstring–Primary axis alignment (MIN/MAX = left/right in horizontal, top/bottom in vertical). Note: When set to SPACE_BETWEEN, itemSpacing will be ignored as children will be evenly spaced.
NameTypeReqDescription
errorobject––
namestring–Name of the modified frame

No examples provided.

node_set_corner_radius ~104

Set a node's corner radius — uniform or per-corner.

NameTypeReqDescription
cornersarray–Optional array of 4 booleans to specify which corners to round [topLeft, topRight, bottomRight, bottomLeft]
nodeIdstringyesThe ID of the node to modify
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
radiusnumberyesCorner radius value
NameTypeReqDescription
errorobject––
namestring–Name of the modified node

No examples provided.

node_set_effects ~109

Set a node's effect array (shadows, blurs). Use `node_apply_style` to link a shared effect style instead.

NameTypeReqDescription
effectsarrayyesArray of strict per-variant Figma effects: DROP_SHADOW/INNER_SHADOW or LAYER_BLUR/BACKGROUND_BLUR
nodeIdstringyesThe ID of the node to modify
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
NameTypeReqDescription
errorobject––
namestring–Name of the modified node

No examples provided.

node_set_fill ~191

Set a node's fill to a literal RGBA color, an image, or clear it. Use `node_apply_style` to link a shared paint style, or `node_bind_variable` to bind a color token.

NameTypeReqDescription
anumber–Alpha component (0-1)
bnumber–Blue component (0-1)
clearboolean–Set to true to clear all fills. Must provide exactly one of solid color, image, or clear:true.
gnumber–Green component (0-1)
imageobject–Optional image payload. Must provide exactly one of solid color or image.
nodeIdstringyesThe ID of the node to modify
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
rnumber–Red component (0-1)
NameTypeReqDescription
errorobject––
namestring–Name of the modified node
warningsarray–Warnings from the operation (e.g., resizing)

No examples provided.

node_set_stroke ~187

Set a node's stroke color and weight; supports uniform or per-side weights.

NameTypeReqDescription
anumber–Alpha component (0-1)
bnumberyesBlue component (0-1)
gnumberyesGreen component (0-1)
nodeIdstringyesThe ID of the node to modify
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
rnumberyesRed component (0-1)
strokeBottomWeightnumber–Bottom side stroke weight
strokeLeftWeightnumber–Left side stroke weight
strokeRightWeightnumber–Right side stroke weight
strokeTopWeightnumber–Top side stroke weight
weightnumber–Uniform stroke weight (used when individual side weights are not provided)
NameTypeReqDescription
errorobject––
namestring–Name of the modified node

No examples provided.

node_transform ~112

Move and/or resize a node by setting absolute `x`/`y`/`width`/`height` (any subset).

NameTypeReqDescription
heightnumber–New height
nodeIdstringyesThe ID of the node to transform
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
widthnumber–New width
xnumber–New X position
ynumber–New Y position
NameTypeReqDescription
errorobject––
heightnumber–Resulting height
idstring–ID of the transformed node
namestring–Name of the transformed node
widthnumber–Resulting width
xnumber–Resulting X position
ynumber–Resulting Y position

No examples provided.

node_ungroup ~65

Dissolve a group, promoting its children to the parent. Removes the group container.

NameTypeReqDescription
nodeIdstringyesThe ID of the group to ungroup
nodeNamestringyesThe group's current exact name, passed back verbatim from `node_info`.
NameTypeReqDescription
errorobject––
parentId––ID of the parent node (null if the group had no parent)
ungroupedChildrenarray–List of ungrouped child nodes

No examples provided.

page_info ~82

List the document's pages; no args → all pages (no children), or pass `pageIds` → those pages with their top-level children. Batch ≤25 ids/call. Inspect `coverage`: a failed page is omitted with a structured `pageErrors` row while other pages still return.

NameTypeReqDescription
pageIdsarray–Array of page IDs to inspect
NameTypeReqDescription
coverage––Page-scan coverage; partial read data remains usable when complete is false
documentIdstring–ID of the Figma document
documentNamestring–Name of the Figma document
errorobject––
missingPageIdsarray–Every requested page ID absent from `pages`, whatever the cause; `coverage.pageErrors` carries the structured reason for each
pageCountnumber–Total page count
pagesarray–List of page objects

No examples provided.

reaction_list ~36

Read prototype reactions from one or more nodes and their descendants.

NameTypeReqDescription
nodeIdsarrayyesArray of node IDs to get reactions from
NameTypeReqDescription
errorobject––
nodesarray–List of node entries with their reactions
nodesCountnumber–Number of inspected nodes
nodesWithReactionsnumber–Number of nodes found that have reactions

No examples provided.

reaction_update ~84

Replace a node's prototype reactions with a full new reactions array (read first via `reaction_list`).

NameTypeReqDescription
nodeIdstringyesThe ID of the node to update reactions for
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
reactionsarrayyesThe full array of Reaction objects to set
NameTypeReqDescription
errorobject––
successboolean–Whether the reactions were updated successfully

No examples provided.

style_delete ~67

Delete a local style by id. Detaches consumers — they keep their resolved values and lose only the style link.

NameTypeReqDescription
styleIdstringyesID of style to delete
styleNamestringyesThe style's current exact name, passed back verbatim from `style_list`.
NameTypeReqDescription
errorobject––
messagestring–Success/failure status message
successboolean–Whether style was successfully deleted

No examples provided.

style_list ~23

List all local styles (paint/text/effect/grid) in the document.

Input schema present but exposes no named parameters.

NameTypeReqDescription
colorsarray–List of paint/color styles
effectsarray–List of effect styles
errorobject––
gridsarray–List of grid styles
textsarray–List of text styles

No examples provided.

style_manage ~232

Create a named style (paint/text/effect/grid), or update an existing one when `styleId` is given. UPDATE requires currentStyleName.

NameTypeReqDescription
bindVariablesobject–Map of field names to variable IDs (to bind) or null (to unbind). For PAINT styles, valid fields include 'color'. For TEXT styles, fields include 'fontSize', 'fontFamily', etc.
currentStyleNamestring–REQUIRED for UPDATE when styleId is supplied — the style's **current exact** name, passed back verbatim from `style_list`
descriptionstring–Description of the style
namestring–Style name. Must be non-empty when supplied. REQUIRED for CREATE; omit it on UPDATE to leave the current style name unchanged.
propertiesobject–Style properties to set; which subset applies depends on `type` (TEXT/PAINT/EFFECT/GRID).
styleIdstring–ID of the style to update (if not creating a new one)
typestringyesType of style to create or update
NameTypeReqDescription
errorobject––
idstring–ID of the style
namestring–Name of the style
typestring–Type of the style

No examples provided.

text_set_content ~78

Set the text of one or more text nodes in a single batched, per-item-validated call. If the status is 'partial_success', treat it as an incomplete operation, report the failed and skipped items to the user, and retry every non-success item (both failed and skipped).

NameTypeReqDescription
textarrayyesArray of text objects
NameTypeReqDescription
errorobject––
failedCountnumber–Number of failed text replacements
requestedCountnumber–Number of requested text replacements
resultsarray–Detailed results per node (one row per input, in input order)
skippedCountnumber–Number of skipped text replacements
statusstring–Overall status of the batch operation
succeededCountnumber–Number of succeeded text replacements
successboolean–Whether all replacements succeeded

No examples provided.

text_set_style ~185

Set any combination of typography properties (font, size, weight, spacing, decoration, …) on a text node.

NameTypeReqDescription
fontNameobject–Font family and style
fontSizenumber–Font size
letterSpacingobject–Letter spacing settings
lineHeight––Line height settings
nodeIdstringyesThe ID of the text node to modify
nodeNamestringyesThe node's current exact name, passed back verbatim from `node_info`.
paragraphIndentnumber–Paragraph indent in pixels
paragraphSpacingnumber–Paragraph spacing in pixels
textAlignHorizontalstring–Horizontal text alignment
textAlignVerticalstring–Vertical text alignment
textCasestring–Case transformation on the text
textDecorationstring–Text decoration
NameTypeReqDescription
errorobject––
namestring–Name of the modified node
successboolean–Whether style was set successfully

No examples provided.

variable_delete ~178

Delete specific variables or an entire collection. Runs a full-document consumer check first, before any removal: if a target is still in use the call is refused with VARIABLE_IN_USE, whose `details.variablesInUse` lists every consumer; if any page cannot be loaded and read it is refused with DOCUMENT_SCAN_INCOMPLETE, because a page error can never mean zero consumers.

NameTypeReqDescription
collectionIdstring–ID of a variable collection to delete. Mutually exclusive with variableIds.
collectionNamestring–Name of the collection to delete, for safety verification. Required if collectionId is used.
variableIdsarray–Array of variable IDs to delete. Mutually exclusive with collectionId.
variableNamesarray–Array of variable names corresponding to variableIds, for safety verification. Required if variableIds is used.
NameTypeReqDescription
errorobject––
messagestring–Status message
successboolean–Whether variables were deleted successfully

No examples provided.

Install

How do I install the io.github.neozhehan/figma-edit-mcp server?

io.github.neozhehan/figma-edit-mcp runs locally as an npm package, launched with npx -y figma-edit-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · figma-edit-mcp

# add to Claude Code
claude mcp add neozhehan-figma-edit-mcp -- npx -y figma-edit-mcp
Common questions

What is the io.github.neozhehan/figma-edit-mcp server?

io.github.neozhehan/figma-edit-mcp is listed in the public MCP registry as io.github.neozhehan/figma-edit-mcp. Programmatically read, create, and modify Figma designs via MCP. This page covers its npm package (figma-edit-mcp).

Is the io.github.neozhehan/figma-edit-mcp server safe to use?

io.github.neozhehan/figma-edit-mcp scores 87 out of 100 on VerifyMCP. We recorded 11 known advisories against it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.neozhehan/figma-edit-mcp server expose?

io.github.neozhehan/figma-edit-mcp exposes 45 tools: page_info, node_info, node_transform, node_rename, node_delete, and 40 more. Their descriptions and schemas cost roughly 6,181 tokens of context every time the server is loaded.

Is the io.github.neozhehan/figma-edit-mcp server still maintained?

io.github.neozhehan/figma-edit-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.neozhehan/figma-edit-mcp server under?

io.github.neozhehan/figma-edit-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.