{"name":"io.github.arimunandar/figsnap-mcp","slug":"arimunandar-figsnap-mcp","title":null,"description":"The Figma file you have open, as MCP tools. Extract, edit, and keep a saved set.","url":"https://mcp.market/server/arimunandar-figsnap-mcp","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"scraping","tags":["scraping","media"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":39,"last_push_at":"2026-09-07T03:59:20.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/arimunandar/figsnap-mcp","website":null,"version":"0.2.0","remotes":[],"packages":[{"registryType":"npm","identifier":"figsnap-mcp","version":"0.2.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Where the figsnap-mcp daemon is listening. Default http://127.0.0.1:3058; only needed if you moved it.","format":"string","name":"FIGSNAP_MCP_URL"},{"description":"The daemon's token. Not normally set: the server reads ~/.figsnap-mcp/agent-token, which the daemon writes itself.","format":"string","isSecret":true,"name":"FIGSNAP_MCP_TOKEN"}]}],"tools":[{"name":"figma_apply_style","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_bind_variable","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_clone_node","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_component_properties","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_create_ellipse","description":"Creates an ellipse. Equal width and height give a circle — an avatar, a dot, a radio button.","write_action":true,"price_micros":0,"input_schema":null},{"name":"figma_create_frame","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"figma_create_instance","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"figma_create_rectangle","description":"Creates a rectangle. The workhorse shape: dividers, bars, backgrounds, placeholders. Omit the fill for an empty one.","write_action":true,"price_micros":0,"input_schema":null},{"name":"figma_create_svg","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"figma_create_text","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"figma_delete_node","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"figma_export_png","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_extract","description":"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\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_find_nodes","description":"Finds layers by type, by name and by the words in them. Every filter is optional and they narrow together.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_get_children","description":"The direct children of one node, by id. The cheap way to explore a page a branch at a time.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_get_selection","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_get_tree","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_group","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_insert_image","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"figma_ios_spec","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_list_library","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_list_saved","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_move_node","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_pages","description":"list — every page in the file, and which is current. open — switch to one, by pageId or by name.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_resolve_url","description":"Turns one or more Figma links into the nodes they name, without exporting anything.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_save_version","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_saved","description":"Read and change the designer’s shortlist of nodes in this file, and the folders it is grouped into. One action argument:","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_select","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_auto_layout","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_bounds","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_corner_radius","description":"Sets one radius for every corner, or each corner on its own.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_effects","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_fill","description":"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 t","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_instance_properties","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_layout_sizing","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_node_name","description":"Renames a layer. Layer names are what the generated code turns into class names, so tidying them is a real change and not cosmetic.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_stroke","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_text","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_text_style","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figma_set_visibility","description":"Sets opacity, visibility and lock. Hidden layers are skipped by extraction, which is often the point.","write_action":false,"price_micros":0,"input_schema":null},{"name":"figsnap_skill","description":"Whether this project has the figsnap skill installed, and the skill itself when it does not.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-20T00:29:13.259Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:29:13.240Z","components":{"code":{"score":25,"max":25,"notes":["15 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 13 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"figsnap-mcp","version":"0.2.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-09-07T03:59:43.417Z","repositoryUrl":"git+https://github.com/arimunandar/figsnap-mcp.git","weeklyDownloads":39}],"repo":{"found":true,"owner":"arimunandar","repo":"figsnap-mcp","archived":false,"pushedAt":"2026-09-07T03:59:20Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/12929878?v=4","ownerCreatedAt":"2015-06-17T03:24:43Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/12929878?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":39,"license":"MIT","lastPushAt":"2026-09-07T03:59:20.000Z","score":23}}}},"grade_history":[],"reviews":[]}