io.github.arimunandar/figsnap-mcp
NPM · FIGSNAP-MCP · SCANNED SEP 20
The Figma file you have open, as MCP tools. Extract, edit, and keep a saved set.
Available components
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 Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to arimunandar/figsnap-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 13 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 5758 tokens (~130/item across 44 items; 41 tools + 3 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 Management60
- Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage90
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 70% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 42 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
How do I install the io.github.arimunandar/figsnap-mcp server?
io.github.arimunandar/figsnap-mcp runs locally as an npm package, launched with npx -y figsnap-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 · figsnap-mcp
claude mcp add arimunandar-figsnap-mcp -- npx -y figsnap-mcp
{
"mcpServers": {
"arimunandar-figsnap-mcp": {
"command": "npx",
"args": [
"-y",
"figsnap-mcp"
]
}
}
} {
"servers": {
"arimunandar-figsnap-mcp": {
"command": "npx",
"args": [
"-y",
"figsnap-mcp"
]
}
}
} codex mcp add arimunandar-figsnap-mcp -- npx -y figsnap-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"arimunandar-figsnap-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"figsnap-mcp"
],
"enabled": true
}
}
} openclaw mcp add arimunandar-figsnap-mcp --command npx --arg -y --arg figsnap-mcp
mcp_servers:
arimunandar-figsnap-mcp:
command: "npx"
args: ["-y", "figsnap-mcp"] {
"McpServers": {
"arimunandar-figsnap-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"figsnap-mcp"
]
}
}
} assistant mcp add arimunandar-figsnap-mcp -t stdio -c npx -a -y figsnap-mcp
{
"mcpServers": {
"arimunandar-figsnap-mcp": {
"command": "npx",
"args": [
"-y",
"figsnap-mcp"
]
}
}
} 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.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Sept 26 +1
- Security disclosure: unverified → fail ▼ functional
- 9 Sept 26 0
- Security disclosure: fail → unverified ▼ functional
- 8 Sept 26 +15
- Malware scan: unverified → pass ▲ security
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 20 Sept 2026 · Analysed npm/figsnap-mcp@0.2.0
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 | arimunandar/figsnap-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/arimunandar/figsnap-mcp/.github/workflows/publish.yml@refs/tags/v0.2.0 |
| Rekor log index | 2746654559 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:234efc8eeb7e06d4597411f8185b8576689ec6620f0ba73893e73a6abfcb59c2bbb4a04b51c04be59d3ee9c5e4735534a31a1b0731fed15dea583ebc7 |
Background: How many MCP packages publish verified provenance →
Dependencies 96 packages
| Packages resolved | 96 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
figma_apply_style Apply a shared style ~97
Applies a paint, text or effect style from this file by id, from figma_list_library. The right way to make something "match": the layer follows the style afterwards, where a copied hex code does not.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| styleId | string | yes | From figma_list_library. |
No output schema declared.
No examples provided.
figma_bind_variable Bind a variable ~137
Binds a variable from this file to a property, so the value follows the token rather than being a copy of it. Use "fill" or "stroke" for a colour variable; for a number use the property name, like cornerRadius, itemSpacing, paddingLeft, width or opacity.
| Name | Type | Req | Description |
|---|---|---|---|
| field | string | yes | "fill", "stroke", or a numeric property such as cornerRadius or itemSpacing. |
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| variableId | string | yes | From figma_list_library. |
No output schema declared.
No examples provided.
figma_clone_node Duplicate a layer ~91
Copies a node, with everything inside it, into the same parent or one you name. The cheapest way to make a second row, card or list item that matches the first exactly.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | yes | The node to copy. |
| parentId | string | – | Where the copy goes. Default: beside the original. |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_component_properties What a component exposes ~120
The properties a component, component set or instance has: the variants, and the text, boolean and instance-swap properties, with what this instance currently has them set to. Call this before figma_set_instance_properties. The key that setter needs carries an id suffix for everything but a variant — "Label#8:2", not "Label" — and there is no way to guess it.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | – | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
No output schema declared.
No examples provided.
figma_create_ellipse Add an ellipse ~97
Creates an ellipse. Equal width and height give a circle — an avatar, a dot, a radio button.
| Name | Type | Req | Description |
|---|---|---|---|
| fill | string | – | Hex colour. Omit for no fill. |
| height | number | – | Default 100. |
| name | string | – | – |
| parentId | string | – | – |
| width | number | – | Default 100. |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_create_frame Create a frame ~129
Creates an empty frame, on the current page or inside a parent you name. Returns the new node’s id so the next call can fill it.
| Name | Type | Req | Description |
|---|---|---|---|
| fill | string | – | Hex colour for a solid background. Omit to keep Figma’s default white. |
| height | number | – | Default 100. |
| name | string | – | Layer name. Default "Frame". |
| parentId | string | – | Put it inside this node. Default: the current page. |
| width | number | – | Default 100. |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_create_instance Place a component ~102
Creates an instance of a component in this file. Get the id from figma_list_library. Naming a variant set places its default variant. Prefer this over drawing a lookalike: an instance keeps its link to the component and updates with it.
| Name | Type | Req | Description |
|---|---|---|---|
| componentId | string | yes | From figma_list_library. |
| name | string | – | – |
| parentId | string | – | – |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_create_rectangle Add a rectangle ~120
Creates a rectangle. The workhorse shape: dividers, bars, backgrounds, placeholders. Omit the fill for an empty one.
| Name | Type | Req | Description |
|---|---|---|---|
| cornerRadius | number | – | – |
| fill | string | – | Hex colour. Omit for no fill. |
| height | number | – | Default 100. |
| name | string | – | – |
| parentId | string | – | Put it inside this node. Default: the current page. |
| width | number | – | Default 100. |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_create_svg Draw with SVG ~133
Turns SVG markup into real Figma vectors — not an image, but editable paths in a frame. This is how to add an icon, a logo or any shape the other create tools cannot express. Extraction returns icons as SVG too, so a shape can be read out of one place and drawn into another unchanged.
| Name | Type | Req | Description |
|---|---|---|---|
| height | number | – | – |
| name | string | – | – |
| parentId | string | – | – |
| svg | string | yes | The <svg> markup. |
| width | number | – | Scale it to this width. |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_create_text Add a text layer ~178
Creates a TEXT layer with the words you give it. The font is loaded before anything is typed, and a font this machine does not have is refused rather than substituted. Give a width to make it wrap; without one it hugs its text.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | Hex colour for the text. |
| fontFamily | string | – | Default Inter. |
| fontSize | number | – | – |
| fontStyle | string | – | Weight or style, like "Bold". Default Regular. |
| name | string | – | Layer name. Defaults to the text itself. |
| parentId | string | – | Put it inside this node. Default: the current page. |
| text | string | yes | The characters. |
| width | number | – | Fixed width, so the text wraps. |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_delete_node Delete a layer ~58
Removes a node and everything inside it. One undo step, so the designer can take it back with a single Cmd-Z — but say what you are deleting before you do it.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | yes | The node to delete. |
No output schema declared.
No examples provided.
figma_export_png See the design ~70
Renders one node and returns the picture itself, so a model that can see gets to look at the design rather than read a description of it. Nothing is stored anywhere.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | yes | The node to render. |
| scale | number | – | Render scale. Default 2. |
No output schema declared.
No examples provided.
figma_extract Read a design as code ~468
The full extraction of one node: HTML measured against what Figma draws, byte-exact figmaCss, a React component, plain CSS and CSS modules. Images are inlined and icons come out as real SVG, so the HTML stands on its own. This is the tool that answers "what does this design actually say". Several nodes at once, instead of one call each: nodeIds, urls, selection: true, or saved: true with an optional folder. A batch answers {results:[…]}, one entry per input, each {ok:true,extraction} or {ok:false,error}, so one bad id never sinks the rest. It is capped at 20 entries, and no batch returns an image — ask figma_export_png for a picture, a node at a time.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | – | One folder of the saved set, with saved: true. "" is the root. This is a folder in the panel, not a directory on disk — nothing here writes files; ask for pngData and write the bytes yourself. |
| formats | array | – | Which representations to return. Default html and figmaCss. "png" comes back as a real image you can look at, alongside the text — there is no base64 in the answer, so ask for it freely on a single n… |
| inlineInstances | boolean | – | Expand component instances instead of referencing them. |
| nodeId | string | – | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| nodeIds | array | – | Several node ids, extracted in one call. Up to 20. |
| saved | boolean | – | Extract the designer’s saved set. Narrow it with folder. |
| scale | number | – | Render scale for any image output. Default 2. |
| selection | boolean | – | Extract every layer the designer has selected, not just the first. |
| topLayerOnly | boolean | – | Stop at the selected layer rather than walking into it. |
| url | string | – | A Figma link, as an alternative to nodeId. |
| urls | array | – | Several Figma links, extracted in one call. Up to 20. |
No output schema declared.
No examples provided.
figma_find_nodes Find layers ~242
Finds layers by type, by name and by the words in them. Every filter is optional and they narrow together. This is the cheap way to locate something. Walking with figma_get_tree and figma_get_children costs a round trip per level and returns every sibling; asking here for {types:["INSTANCE"], name:"button"} costs one call. Searches the current page unless you pass nodeId to search inside one branch, or allPages to search the whole file — which is the only way to find something that is not on the page the designer happens to have open.
| Name | Type | Req | Description |
|---|---|---|---|
| allPages | boolean | – | Search every page in the file. Slower, and the answer names the page each row is on. |
| limit | integer | – | Most rows to return. Default 50. |
| name | string | – | Substring of the layer name, case-insensitive. |
| nodeId | string | – | Search inside this branch instead of the whole page. |
| text | string | – | Substring of a text layer’s words, case-insensitive. Implies TEXT. |
| types | array | – | Layer types to keep. Omit for any type. |
No output schema declared.
No examples provided.
figma_get_children Children of one layer ~63
The direct children of one node, by id. The cheap way to explore a page a branch at a time.
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer | – | How many levels to walk. Default 1. |
| nodeId | string | yes | The node whose children to list. |
No output schema declared.
No examples provided.
figma_get_selection What is selected ~52
The layers the designer has selected on the canvas right now, with their ids, names, types and sizes. Start here when the request says "this", "the selected frame", or names nothing at all.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
figma_get_tree Layers on the current page ~66
The top-level layers of the page the designer is looking at. Increase depth to walk further down, but note that a deep page is thousands of rows: prefer figma_get_children on one branch.
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer | – | How many levels to walk. Default 1. |
No output schema declared.
No examples provided.
figma_group Group or ungroup ~138
group — puts nodeIds in a new group, inside the first one’s own parent. ungroup — dissolves a group or frame and returns the children it let go. A group is the honest answer when several layers are one thing but need no layout of their own; reach for figma_create_frame with auto layout when they do.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | Default group. |
| name | string | – | For group: what to call it. |
| nodeId | string | – | For ungroup: the group or frame to dissolve. |
| nodeIds | array | – | For group: the layers to gather, up to 20. |
No output schema declared.
No examples provided.
figma_insert_image Put an image on the canvas ~248
Places a PNG, JPG or GIF, passed as base64. With nodeId it becomes that layer’s fill, which is how a placeholder gets its picture; without one it arrives as a new rectangle at its own pixel size. Base64 rather than a URL on purpose: the plugin’s manifest allows only the relay and the local daemon as network destinations, so the plugin cannot fetch an image from anywhere a designer keeps one. Read the file yourself and send the bytes. The cap is 700KB of base64, which is roughly a 500KB image.
| Name | Type | Req | Description |
|---|---|---|---|
| data | string | yes | The image as base64. A data: URL prefix is accepted and ignored. |
| height | number | – | Default: the image’s own height. |
| name | string | – | – |
| nodeId | string | – | Fill this layer instead of making a new one. |
| parentId | string | – | Where a new rectangle goes. Default: the current page. |
| scaleMode | string | – | How it sits in the frame. Default FILL. |
| width | number | – | Default: the image’s own width. |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_ios_spec The design as node properties ~375
One node and its children as the properties Figma actually holds, in points: per-axis sizing, auto layout with its padding, stroke weight and alignment, corner smoothing, effects, the whole text block, and every fill and stroke marked with whether it is painted. Read this rather than figmaCss when the answer becomes code. Dev Mode CSS answers what a node would look like on the web, which drops what an implementation needs — which side of the bounds a stroke sits on, whether a height was authored or measured, whether the corners are smoothed — and it also reports paint that is never painted: a stroke switched off still comes back as "border: 1px solid". Here a fill or stroke carries `painted`, so a border that is not drawn cannot be mistaken for one that is. A stroke also reports layoutFrame and visualFrame, because a CENTER stroke puts half its weight outside the bounds and UIKit draws borders inside them. Effects report uikitShadowRadius, which is half the blur. And the answer names the scale it read: a 750-wide artboard is a 375pt design drawn at 2x, and treating it as points doubles every number silently. One limit worth knowing: a gradient paint reports its type, opacity and whether it is painted, but not its stops — so you learn a gradient is there and cannot yet reproduce it. Ask figma_export_png for the node and read the colours off the render until that lands.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | – | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| scale | number | – | The scale the artboard was drawn at. Default: inferred from the root width against the widths a phone actually has, and the answer says which it used. |
No output schema declared.
No examples provided.
figma_list_library The design system in this file ~93
The components, styles and variables this file has, with the ids the other tools need. Read this before "make it match our button" or "use our brand colour" — instantiating the real component or binding the real variable is what makes a change survive contact with the design system, rather than a hex code that looks right today.
| Name | Type | Req | Description |
|---|---|---|---|
| only | string | – | Narrow the answer. Default all three. |
No output schema declared.
No examples provided.
figma_list_saved The designer’s saved set ~55
The nodes the designer curated in the panel, by folder. A shortlist of what matters in this file, which is usually a better starting point than the whole page.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | – | Restrict to one folder. |
No output schema declared.
No examples provided.
figma_move_node Reparent or reorder a layer ~91
Moves a node into another parent, or to a different position among its siblings. Index 0 is the back of the canvas and the top of a layer list; leaving it out puts the node last.
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | – | Position among siblings. |
| nodeId | string | yes | The node to move. |
| parentId | string | – | New parent. Default: keep the one it has. |
No output schema declared.
No examples provided.
figma_pages The pages, and which one is open ~159
list — every page in the file, and which is current. open — switch to one, by pageId or by name. Worth calling before concluding something is missing: every other reading tool answers about the current page only, so a frame on another page looks exactly like a frame that does not exist. Opening a page moves the designer’s view, which is the same kind of act as figma_select — nothing in the file changes and there is nothing to undo, so it is not behind the Edits switch.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Which of the two. |
| name | string | – | For open: the page name, if you have no id. |
| pageId | string | – | For open: the page id from list. |
No output schema declared.
No examples provided.
figma_resolve_url What a Figma link points at ~40
Turns one or more Figma links into the nodes they name, without exporting anything.
| Name | Type | Req | Description |
|---|---|---|---|
| urls | array | yes | Figma links to resolve. |
No output schema declared.
No examples provided.
figma_save_version Checkpoint the file ~69
Saves a named point in the file’s version history. Call this before a run that will change several things, so there is one place to fall back to that is not a stack of undos.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | – |
| title | string | yes | What this checkpoint is for. |
No output schema declared.
No examples provided.
figma_saved Curate the saved set ~352
Read and change the designer’s shortlist of nodes in this file, and the folders it is grouped into. One action argument: list, folders, save, unsave, clear, move, newFolder, renameFolder, deleteFolder. list — the entries, optionally in one folder. folders — the folders with their counts; "" is the root. save — add nodeIds, or whatever is selected when you give none. unsave — remove nodeIds. clear — empty one folder, or the whole set when you name none. move — put nodeIds in folder. newFolder / renameFolder / deleteFolder — the folders themselves; deleteFolder keeps the entries and returns them to the root unless deleteEntries is true. This is a bookmark list, not the design: it lives in the plugin’s own storage, so none of it is behind the Edits switch and none of it can be undone with Cmd-Z. Saving what a long job is about is a cheap way to leave the designer something to look at afterwards.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Which of the nine. |
| deleteEntries | boolean | – | For deleteFolder: remove what was in it too, rather than returning it to the root. |
| folder | string | – | For list, save, clear and move. "" is the root; the folder must already exist for move. |
| from | string | – | For renameFolder: the folder as it is called now. |
| name | string | – | For newFolder and deleteFolder. |
| nodeIds | array | – | For save, unsave and move. Omitting them on save means the current selection. |
| to | string | – | For renameFolder: what to call it instead. |
No output schema declared.
No examples provided.
figma_select Show it on the canvas ~146
Selects one or more layers and scrolls the canvas to them, so the designer is looking at whatever you are talking about. Use it before describing a node you found by walking the tree — pointing is faster than naming an id — and after an edit, so the change is on screen. It changes no design data, which is why it works whether or not Edits is on, and why it leaves no undo step. It does move the designer’s viewport, so say what you are showing them.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | – | One node to select and scroll to. |
| nodeIds | array | – | Several, selected together and framed together. Up to 20. |
No output schema declared.
No examples provided.
figma_set_auto_layout Set auto layout on a frame ~161
Turns auto layout on for a frame and sets its direction, spacing, padding and alignment. Pass mode "NONE" to turn it off. Only the properties you name are changed.
| Name | Type | Req | Description |
|---|---|---|---|
| counterAxisAlignItems | string | – | Alignment across the layout direction. |
| itemSpacing | number | – | Gap between children. |
| mode | string | yes | Layout direction. |
| nodeId | string | yes | The frame, component or instance to lay out. |
| padding | number | – | Shorthand: sets all four paddings. |
| paddingBottom | number | – | – |
| paddingLeft | number | – | – |
| paddingRight | number | – | – |
| paddingTop | number | – | – |
| primaryAxisAlignItems | string | – | Alignment along the layout direction. |
No output schema declared.
No examples provided.
figma_set_bounds Move or resize ~103
Sets position and size. Position is ignored inside an auto-layout frame, where the parent decides it — use figma_set_layout_sizing and the parent’s spacing there instead.
| Name | Type | Req | Description |
|---|---|---|---|
| height | number | – | – |
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| width | number | – | – |
| x | number | – | – |
| y | number | – | – |
No output schema declared.
No examples provided.
figma_set_corner_radius Round the corners ~101
Sets one radius for every corner, or each corner on its own.
| Name | Type | Req | Description |
|---|---|---|---|
| bottomLeftRadius | number | – | – |
| bottomRightRadius | number | – | – |
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| radius | number | – | All four corners. |
| topLeftRadius | number | – | – |
| topRightRadius | number | – | – |
No output schema declared.
No examples provided.
figma_set_effects Set shadows and blurs ~99
Replaces a node’s effects with the list you give. An empty list clears them. Elevation in most design systems is a drop shadow, so this is what "make it look raised" means.
| Name | Type | Req | Description |
|---|---|---|---|
| effects | array | yes | In back-to-front order. Empty clears every effect. |
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
No output schema declared.
No examples provided.
figma_set_fill Set a solid fill ~157
Replaces a node’s fills with one solid colour, and answers with the colour read back off the node — so a write that did not land is visible without a screenshot. It replaces every fill the node had, which is worth knowing before pointing it at a gradient or a photograph; the answer names what was there. Borders are strokes, not fills: use figma_set_stroke for those. One call is one undo step, so the designer takes it back with a single Cmd-Z.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | yes | Hex colour, like "#1e88e5". |
| nodeId | string | yes | The node to fill. |
| opacity | number | – | Fill opacity, 0 to 1. Default 1. |
No output schema declared.
No examples provided.
figma_set_instance_properties Set an instance’s properties ~164
Sets which variant an instance is, and the text and booleans its component exposes. Take the keys from figma_component_properties; a key given without its id suffix is matched anyway, and one that matches nothing is refused with the list of what does. This is the difference between placing a component and using it. figma_create_instance gives you the default variant — this is how it becomes the large one, or the disabled one, with the right label.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | – | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| properties | object | yes | Key to value. A variant takes its option name, a boolean property true or false, a text property a string. |
No output schema declared.
No examples provided.
figma_set_layout_sizing Hug, fill or fix a size ~104
How a child behaves inside an auto-layout frame: HUG shrinks to its contents, FILL stretches to the parent, FIXED keeps its size. This, not figma_set_bounds, is how widths are set inside auto layout.
| Name | Type | Req | Description |
|---|---|---|---|
| horizontal | string | – | – |
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| vertical | string | – | – |
No output schema declared.
No examples provided.
figma_set_node_name Rename a layer ~77
Renames a layer. Layer names are what the generated code turns into class names, so tidying them is a real change and not cosmetic.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
No output schema declared.
No examples provided.
figma_set_stroke Set or clear a stroke ~153
Replaces a node’s strokes with one solid colour, and optionally sets the stroke weight. Pass remove: true to take the stroke off entirely. Borders in Figma are strokes, not fills — a row outline or an icon drawn as an outline needs this rather than figma_set_fill.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | Hex colour, like "#1e88e5". Omit only with remove. |
| nodeId | string | yes | The node to stroke. |
| opacity | number | – | Stroke opacity, 0 to 1. Default 1. |
| remove | boolean | – | Remove every stroke instead of setting one. |
| weight | number | – | Stroke weight in pixels. Left alone when omitted. |
No output schema declared.
No examples provided.
figma_set_text Set the characters of a text layer ~69
Replaces the text of one TEXT node. The font is loaded first; a layer whose font is missing from this machine is refused rather than silently retyped in a substitute.
| Name | Type | Req | Description |
|---|---|---|---|
| nodeId | string | yes | The TEXT node to retype. |
| text | string | yes | The new characters. |
No output schema declared.
No examples provided.
figma_set_text_style Set type on a text layer ~174
Font, size, line height, letter spacing, alignment and colour, on a TEXT layer. Only what you name is changed. Prefer figma_apply_style where the file has a text style for it — a named style survives a redesign and a hard-coded 14px does not.
| Name | Type | Req | Description |
|---|---|---|---|
| align | string | – | – |
| autoResize | string | – | – |
| color | string | – | Hex colour. |
| fontFamily | string | – | – |
| fontSize | number | – | – |
| fontStyle | string | – | Weight or style, like "Semi Bold". |
| letterSpacing | number | – | In pixels. |
| lineHeight | number | – | In pixels. |
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
No output schema declared.
No examples provided.
figma_set_visibility Hide, lock or fade a layer ~81
Sets opacity, visibility and lock. Hidden layers are skipped by extraction, which is often the point.
| Name | Type | Req | Description |
|---|---|---|---|
| locked | boolean | – | – |
| nodeId | string | yes | Figma node id, like "21:10314". Omit to use whatever is selected on the canvas. |
| opacity | number | – | – |
| visible | boolean | – | – |
No output schema declared.
No examples provided.
figsnap_skill The skill for reading a design ~265
Whether this project has the figsnap skill installed, and the skill itself when it does not. The skill is what stops the usual mistakes: an agent handed figmaCss gets the geometry right and the type wrong, because Dev Mode CSS cannot say whether a height was authored or measured, which side of the bounds a stroke sits on, or that line-height is a box rather than a font metric. It also carries the artboard-to-device widths, the frame-versus-glyph padding an icon export has to keep, and the fact that a design system’s font is probably not on iOS. install answers with the file and where it goes; it does not write it. Whatever is calling this already asks before it writes into a repository, which is the right place for that question. Statuses are missing, current, or modified — an edited skill is the caller’s, so it is reported rather than replaced.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | Default check. |
| projectDir | string | – | The project to look in. Default: the directory the MCP client is running in, which the bridge names on every call. Failing that, the daemon’s own — which is wherever it was started and usually not th… |
No output schema declared.
No examples provided.
What is the io.github.arimunandar/figsnap-mcp server?
io.github.arimunandar/figsnap-mcp is listed in the public MCP registry as io.github.arimunandar/figsnap-mcp. The Figma file you have open, as MCP tools. Extract, edit, and keep a saved set. This page covers its npm package (figsnap-mcp).
Is the io.github.arimunandar/figsnap-mcp server safe to use?
io.github.arimunandar/figsnap-mcp scores 90 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 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.arimunandar/figsnap-mcp server expose?
io.github.arimunandar/figsnap-mcp exposes 41 tools: figma_get_selection, figma_get_tree, figma_get_children, figma_extract, figma_export_png, and 36 more. Their descriptions and schemas cost roughly 5,697 tokens of context every time the server is loaded.
Is the io.github.arimunandar/figsnap-mcp server still maintained?
io.github.arimunandar/figsnap-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 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.arimunandar/figsnap-mcp server under?
io.github.arimunandar/figsnap-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.