Skip to main content
AllMCPs
BrowseBestCategoriesStackCompareToolsGuidesBlog
Log in Submit MCP

Stay in the loop

Get new MCP servers and top picks in your inbox.

AllMCPs

The open directory for discovering and installing Model Context Protocol servers.

AllMCPs on GitHub (opens in a new tab)
Launched onTiny Startupstinystartups.com
Explore
  • Browse servers
  • Best MCP servers
  • Categories
  • MCP clients
  • Agent prompts
  • Stack Builder
  • Compare servers
  • Random discovery New
  • Submit a server
  • Pricing & Boost Boost
Learn
  • Guides hub
  • What is MCP?
  • Install guide
  • Build an MCP server
  • Deploy an MCP server
  • Security guide
  • Troubleshooting
  • MCP for SEO & AEO
  • Protocol versioning
  • Blog & updates
Tools
  • All developer tools
  • Config generator
  • Config validator
  • Config auditor
  • MCP playground
  • Token calculator
  • OpenAPI โ†’ MCP
  • Badge generator
For agents
  • REST API docs
  • Trust & traffic Live
  • Remote MCP server SSE โ†— (opens in a new tab)
  • llms.txt โ†— (opens in a new tab)
  • Catalog JSON โ†— (opens in a new tab)
Company
  • About
  • Advertise Sponsor
  • Contact
  • GitHub โ†— (opens in a new tab)
  • Terms
  • Privacy
AllMCPs VerifiedAllMCPs VerifiedFeatured on Nick LaunchesFeatured on Nick LaunchesLaunch Llama NewsletterLaunch Llama NewsletterVerified DR - allmcps.comVerified DR - allmcps.comFeatured on SaaSGrowFeatured on SaaSGrowFeatured on Twelve ToolsFeatured on Twelve ToolsFeatured on Saaspa.geFeatured on Saaspa.geFeatured on Findly.toolsFeatured on Findly.toolsFeatured on Startup FameFeatured on Startup FameFeatured on LaunchKiwiFeatured on LaunchKiwiFeatured on ScrollLaunchFeatured on ScrollLaunchFeatured on DailyPingsFeatured on DailyPingsFazier badgeFazier badgeFeatured on NewTool.siteFeatured on NewTool.siteFeatured on saasfame.comFeatured on saasfame.comDR Checker - Domain RatingDR Checker - Domain RatingListed on Turbo0Listed on Turbo0Launched on LaunchBoard - Product Launch PlatformLaunched on LaunchBoard - Product Launch PlatformList on SimilarlabsList on Similarlabshttps://codetrendy.comhttps://codetrendy.comListed on DevTool.ioFeatured on BuildlistFeatured on BuildlistLaunched on Tiny StartupsFeatured on ShowMeBestAIFeatured on ShowMeBestAIFind us on LaunchZoneFind us on LaunchZoneAllMCPs VerifiedAllMCPs VerifiedFeatured on Nick LaunchesFeatured on Nick LaunchesLaunch Llama NewsletterLaunch Llama NewsletterVerified DR - allmcps.comVerified DR - allmcps.comFeatured on SaaSGrowFeatured on SaaSGrowFeatured on Twelve ToolsFeatured on Twelve ToolsFeatured on Saaspa.geFeatured on Saaspa.geFeatured on Findly.toolsFeatured on Findly.toolsFeatured on Startup FameFeatured on Startup FameFeatured on LaunchKiwiFeatured on LaunchKiwiFeatured on ScrollLaunchFeatured on ScrollLaunchFeatured on DailyPingsFeatured on DailyPingsFazier badgeFazier badgeFeatured on NewTool.siteFeatured on NewTool.siteFeatured on saasfame.comFeatured on saasfame.comDR Checker - Domain RatingDR Checker - Domain RatingListed on Turbo0Listed on Turbo0Launched on LaunchBoard - Product Launch PlatformLaunched on LaunchBoard - Product Launch PlatformList on SimilarlabsList on Similarlabshttps://codetrendy.comhttps://codetrendy.comListed on DevTool.ioFeatured on BuildlistFeatured on BuildlistLaunched on Tiny StartupsFeatured on ShowMeBestAIFeatured on ShowMeBestAIFind us on LaunchZoneFind us on LaunchZone
ยฉ 2026 Jackalope Digital LLC. All rights reserved.
  1. Home
  2. ๐Ÿ“ Architecture & Design
  3. Genable
Genable logo
Health: ActiveRecent health check succeeded.Last checked 9/11/2026, 3:00:44 PM

Genable

User RatingsBe the first to rate and review this MCP server!
View Repository1 GitHub StarsTotal stargazers on GitHub for the source repository (1 stars).Visit Website
figmadesign-toolsmcpdesign-systems

Builds and edits native Figma designs through 41 MCP tools backed by the running Genable plugin.

Quick Install

Automated & IDE Setup

Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ€” or use 1-click editor setup below.

Add to CursorAdd to VS Code
Not yet automatically verified

This server is confirmed live โ€” we successfully called its tools/list endpoint directly (see the verified badge above). We haven't yet sandbox-tested the stdio install command below specifically, which is a separate, ongoing check.

Manual Client & Custom JSON ConfigExpand JSON โ–พ

Client Config & Setup

Choose your client or environment
Target File:~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "musepy-genable": {
      "command": "npx",
      "args": [
        "-y",
        "genable-mcp"
      ]
    }
  }
}

๐Ÿ’ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.

Install Tool Schemas (39) Directory Badge Claim listing Alternatives๐Ÿ“ More in Architecture & Design

Overview

musepy/genable MCP server connects an MCP client to the Genable Figma plugin through a local STDIO bridge. It exposes tools for creating JSX-like design trees, inspecting and modifying nodes, managing variables and components, navigating pages, and checking results with screenshots. Reach for it when an agent needs to write editable Figma structure rather than only read a design or generate a flat image. The MCP package uses the model already configured in the client and does not require a second model API key inside Genable.

Use cases

โ€ขCreate editable Figma layouts from structured briefs
โ€ขRefine existing Figma subtrees through canonical JSX
โ€ขBuild reusable components and variant sets
โ€ขAudit and bind design tokens across a subtree
โ€ขVerify generated designs with screenshots and lint inspection

Key features

โ€ขJSX-like atomic tree creation
โ€ขSelective Figma node inspection
โ€ขBatch property and subtree editing
โ€ขVariable and token management
โ€ขComponent and variant workflows
โ€ขScreenshot-based visual verification

Capabilities & Tool Schemas (39) ~20.6k tokensApproximate context cost of this serverโ€™s tool schemas (~4 chars/token), before any tool is called. Actual usage depends on your client and model.Verified live Verified liveCaptured by calling this serverโ€™s live tools/list endpoint.

Inspect callable tools, capabilities, and parameters exposed to AI agents by Genable.

jsx

Create design trees with nested JSX markup. One jsx call builds a complete subtree atomically โ€” nesting is the hierarchy. Keep a single logical unit inside one call; the returned root's children are already built, not stubs to be filled in later. Examples: jsx({markup: "<frame name='Card' layout='column' padding={16} fill='#FFFFFF' w='fill' />"}) jsx({markup: "<frame name='Row' layout='row' gap={8} padding={12} w='fill'><icon name='lucide:settings' size={20} /><text name='Label' w='fill'>Account</text><icon name='lucide:chevron-right' size={16} /></frame>"}) Elements: frame, text, rect, ellipse, line, icon, image, instance, component, group, section, vector Attributes (frame): layout, justify, items, wrap, w, h, minW, maxW, p, gap, bg, fill, rounded, stroke, shadow, blur, bgblur, opacity, layoutPositioning Attributes (grid container): cols, rows, gap, rowGap, colGap, colSizes, rowSizes, autoFlow, autoRows โ€” see "Grid layout" below Attributes (grid child): colSpan, rowSpan, alignX, alignY, rowStart, colStart Attributes (text): size, weight, lineHeight, font, fill, w (w="fill" for wrap), maxLines, textTruncation, paragraphSpacing Multi-paragraph text: put a BLANK LINE between paragraphs inside <text> โ€” it becomes a real paragraph break. A single newline is collapsed to a space (prose wrap); for a hard single-line break write {'\n'}. Pair multi-paragraph body copy with paragraphSpacing={N} for gap between paragraphs. Truncation: maxLines={N} caps a wrapping text at N lines with an ellipsis (needs a bounded width, e.g. w="fill" or w={240}). Advanced text โ€” inline emphasis spans (**bold** *italic* ~~strike~~ in content), coloured/sized spans, vertical trim, hanging indent/punctuation, list spacing โ†’ read skill:typography (don't inline these here). Effects: shadow="0,8,32,0,#0006" or shadow={shadow(0,8,32,0,'#0006')}; blur={10} for layer blur; bgblur={20} for frosted-glass/glassmorphism background blur. Multiple effects merge automatically. Decoration in auto-layout: floating orbs/blobs/decorative shapes inside a row/column parent need layoutPositioning="absolute" so they don't get stacked into the main-axis flow. Full-frame backgrounds: set the parent frame's bg directly. Don't add a separate <rect> backdrop. Supported gradient strings (CSS-like subset, not full CSS): - linear-gradient(<angle>deg, <#hex> <pos>%, ...) e.g. "linear-gradient(135deg, #A 0%, #B 100%)" - linear-gradient(to <direction>, <stops>) directions: top/right/bottom/left and corners (e.g. "to bottom right") - radial-gradient(<stops>) centered, ellipse-fill โ€” no position/shape modifiers - radial-gradient(circle, <stops>) centered, circle shape only - conic-gradient(from <angle>deg, <stops>) Unsupported (will be rejected): "circle at X% Y%", "ellipse at ...", "X% Y%" position syntax, named colors (red/blue/...), hsl(), and numeric stops without a percent sign. Text: <text size={24}>content here</text> Rich text (mixed inline styles in one text node โ€” runtime parses markup per character): **bold** e.g. "Click **here** to continue" *italic* e.g. "Read the *fine print*" ***bold italic*** e.g. "This is ***critical***" ~~strikethrough~~ e.g. "Was ~~$19.99~~" {color:#HEX|text} e.g. "{color:#EF4444|Error}: something failed" {size:N|text} e.g. "{size:32|Big} then normal" Nesting stacks: "{color:#EF4444|**$9.99**}" โ†’ red + bold on the same range. For uniform whole-text styling use the weight / fill / size props instead โ€” markup is only for MIXED styles within one text node. Instance: <instance ref="Button" variant="Size=Large"/> Self-closing: <line w="fill" stroke="#E5E7EB"/> (use line for dividers/separators; rect/ellipse for SMALL pure decoration with no children โ€” page-level backgrounds belong on the parent frame's bg) Arc/Ring: <ellipse w={120} h={120} arc="0 270" fill="#4F46E5"/> (arc="start end innerRadius?" โ€” innerRadius 0-1 makes a donut/ring) Grid layout: `layout="grid"` + `cols={N}`. Omit `rows` for auto-rows (rows grow to fit children); set `rows={M}` for a fixed Nร—M. `gap`, or `rowGap`/`colGap` separately. - Per-track sizing: `colSizes="240px 1fr 1fr"` (fixed sidebar + two flexible columns) or `rowSizes="80px 1fr"` (fixed header row + flexible body). Tokens: `Npx`/`N`=fixed px, `Nfr`=flexible share (`1fr 2fr` โ‡’ 1:2), `hug`=fit-content. Setting `colSizes`/`rowSizes` infers `cols`/`rows` from the token count โ€” don't also pass a conflicting count. - Auto-flow: `autoFlow` packs children row-major into the next free cell (best for galleries/masonry, esp. with mixed spans). `autoRows` lets the grid manage its own row count. - Per-child: `colSpan`/`rowSpan` (cell spanning), `alignX`/`alignY` (start|center|end|auto within the cell), `rowStart`/`colStart` (0-based explicit cell anchor โ€” requires manual placement, so do NOT combine with `autoFlow`). Sizing defaults (lean on them): rows are HUG (cells fit content) and the container HUGS its height automatically, while children default to fill-width / hug-height. So a content gallery needs only `cols` + a `w` (fixed px or `"fill"`) โ€” no `rowSizes`, no height. For equal-height rows (KPI tiles, dashboards) set `rowSizes="1fr 1fr"` (children then FILL the rows); for fixed-height bands use px row sizes. A `rowSpan>1` child fills its span. Gotchas: (1) the container can hug HEIGHT but not WIDTH (columns are FLEX) โ€” always give it a `w` (`"fill"` or px). (2) `justify`/`items` are no-ops on a grid โ€” use per-child `alignX`/`alignY`. (3) for a 1-column stack use `layout="column"`, not grid. Prefer grid for a 2-D matrix (galleries, KPI tiles, pricing tiers, dashboards); use row/column when children differ in width or you need space-between. Variable binding: fill/bg/stroke accept qualified bare-name token strings (e.g. bg="$Theme/Bg/Surface"). Object literals (fill={{variable_id:...}}) drop the binding silently โ€” always use the string form. Swap an existing subtree: jsx({replaceId: "<id>", markup: "..."}) replaces the old node at the same parent and sibling index atomically, preserving position in one call. Markup must have a single root. Use jsx for tree creation; edit for property updates on known nodes.

inspect

Read design node(s) โ€” choose what to surface with `facets`. Default (no facets) returns a skeleton: id, name, type, role, children. For anything else, list the facets you need โ€” nothing else is included. Facets: structure name, type, size, layout shorthand โ€” cheap overview layout layoutMode/gap/padding/align/sizing (row/column, fill/hug, etc.) paint|fill fills + Paint.boundVariables.color (see bound tokens) stroke strokes, strokeWeight, strokeAlign, dashPattern effects shadows, blurs typography|text fontFamily, fontSize, fontWeight, lineHeight, letterSpacing appearance opacity, visible, blendMode, cornerRadius, clipsContent variables node-level boundVariables + explicitVariableModes (token bindings) lint validation view โ€” per-node role + visual/layout summary + issues (severity error/warning/info). Specific node only, depth-3 default; exclusive (ignores other facets). all everything Parameters: node "/" for page root, or node ID from jsx/inspect results (e.g. "100:5"). facets array of facet names listed above. depth Max tree depth (default: 5, max: 10). Selection: when the user prompt carries a `<selected_nodes>[{id,name,type}โ€ฆ]</selected_nodes>` block, those IDs are authoritative (a reference, not a snapshot) โ€” inspect them directly, don't call `get_selection`. Start shallow (depth 1โ€“2); go deeper only when the task needs leaf access โ€” a full-depth dump of a large tree burns thousands of tokens. Examples: inspect({node: "/"}) โ†’ page skeleton inspect({node: "100:5"}) โ†’ one-node skeleton inspect({node: "100:5", facets: ["variables"]}) โ†’ token bindings only inspect({node: "100:5", facets: ["layout", "paint"]}) โ†’ layout + fills inspect({node: "100:5", facets: ["all"]}) โ†’ full properties inspect({node: "100:5", facets: ["lint"]}) โ†’ validate subtree (roles + issues) Use `get_screenshot` for visual verification. Use `facets: ["lint"]` to validate a subtree (roles + issues) rather than read properties.

edit

Batch update properties on nodes. The universal write tool โ€” use for sizing, radius, opacity, effects, instance component-prop overrides, or any property not covered by focused setters. For single-property changes, prefer focused setters (they validate input more strictly): set_text โ€” text content set_fill โ€” fill / background color set_stroke โ€” border set_layout โ€” auto-layout (gap, padding, direction) Use when: - Batch fixes โ€” multiple nodes, mixed properties in one call - Properties not covered by setters: w/h, corner, opacity, blur, shadow, INSTANCE TEXT/BOOLEAN/INSTANCE_SWAP overrides - Need to mix Figma props and component property overrides in the same node entry Returns (per node): `applied: [keys]` (written), `noop: [keys]` (already that value), `rejected: [{key, reason}]`. Empty arrays are omitted. - Single: { data: { id, name, type, applied?, noop?, rejected? } } - Batch: { data: { count, results: [...], errors?, partial? } } `rejected` is TERMINAL: the property is invalid for that node type (e.g. `corner`/cornerRadius on a TEXT node, `layoutMode` on a vector) or readonly โ€” it will NEVER apply. Do NOT retry a rejected property; choose one valid for that node type, or target a different node. If EVERY requested property is rejected, the call returns `{ error }` โ€” do not re-issue it. `partial: true` (batch) means some entries succeeded and some failed โ€” check `errors[]` for which entries to retry. Skip when: - One property on one node โ€” use the focused setter for clearer errors - Color via variable token โ€” use set_fill/set_stroke (edit silently drops bare-name tokens here) - Need to apply auto-layout โ€” use set_layout Component property overrides: For instances, use property DISPLAY NAMES (e.g. "Label") โ€” edit resolves them to Figma's internal keys automatically. Component props mix with Figma props in the same call. Examples: edit({node: "1:2", props: {corner: 16, opacity: 0.8}}) edit({nodes: [ {node: "1:1", props: {w: "fill", corner: 8}}, // Figma native props {node: "1:2", props: {opacity: 0.6}}, {node: "1:3", props: {Label: "Sign In"}} // instance TEXT prop (by display name) ]})

read_jsx

Read a Figma subtree as canonical JSX text โ€” the same dialect the `jsx` tool accepts as input. Output is line-numbered and byte-stable: slicing a chunk and feeding it as `edit_jsx`'s `old_string` is guaranteed to match. Each existing node carries `id="X:Y"` as the first attribute so edit_jsx can update it in place. Defaults are dropped, vocabulary uses short DSL names (w/h/p/gap/bg/rounded/layout/justify/items/content). When to use: - Before `edit_jsx`: read first to get the exact text to replace - To browse a subtree as code rather than as JSON (inspect facets) - To produce a substring for `search_jsx` to grep against Skip when: - You only need one property value โ†’ use inspect with facets - You need variable bindings or style references โ†’ use inspect's variables/styles facet Example: read_jsx({ node: "1:1" }) โ†’ 0001 <frame id="1:1" name="Login" w={320} h={480} layout="column" gap={12} p={24} bg="#fff"> 0002 <text id="1:2" size={24} weight="Bold">Welcome back</text> 0003 <frame id="1:3" w="fill" h={44} rounded={8} layout="row" justify="center" items="center" bg="#000"> 0004 <text id="1:4" size={14} fill="#fff">Sign In</text> 0005 </frame> 0006 </frame> Output is wrapped in {data:{jsx:"..."}} โ€” pass jsx (with or without line numbers) to edit_jsx.

edit_jsx

Update existing nodes by editing the canonical JSX text of a subtree. Same contract as Claude Code's Edit tool: pass an `old` substring (from read_jsx output) and a `new` substring; the system locates the match, parses the new JSX, and applies property changes to every node whose `id` is preserved across old โ†’ new. Read first, then edit. `old` must come from read_jsx output for the same scope. Uniqueness is enforced unless replace_all is true. Chaining edits โ€” DON'T re-read between edits. On success the response returns the re-serialized scope as `data.jsx` (same line-numbered format as read_jsx, reflecting your change). Slice your next `old` from THAT, not from a stale earlier read. Only call read_jsx again if `data.jsxTruncated` is set (scope too large to echo). Accepted `new` shapes: - Self-closing: `<frame id="1:5" bg="#0066FF" rounded={8} />` โ€” prop-only edit, children untouched - Opening tag only: `<frame id="1:5" bg="#0066FF" rounded={8}>` โ€” auto-converted to self-closing (same semantics as above) - Full element with closing: `<frame id="1:5" ...>...children...</frame>` โ€” touches nested ids too What it does (MVP scope): - For every `<tag id="X:Y" ...>...</tag>` in `new`, set that node's props to match (multi-node, multi-prop in one call). - For text nodes, the children content is treated as the new `characters`. - Defaults are dropped, vocabulary uses short DSL names (w/h/p/gap/bg/rounded/layout/justify/items/content). What it does NOT do yet: - Creating new children (use `jsx` tool โ€” the description tells you what's supported). - Deleting children that disappeared from new (use `delete_node`). - Reparenting / moving (use `move_node`). Example โ€” restyle a button: // 1. Read first read_jsx({ node: "1:1" }) // 2. Edit edit_jsx({ scope: "1:1", old: '<frame id="1:5" w="fill" h={44} rounded={8} bg="#000">', new: '<frame id="1:5" w="fill" h={44} rounded={12} bg="#0066FF">', }) // โ†’ updates node 1:5 with new rounded + bg Example โ€” multi-node edit (one call): edit_jsx({ scope: "1:1", old: '<frame id="1:5" w="fill" h={44} rounded={8} bg="#000">\n <text id="1:6" size={14} fill="#fff">Sign In</text>\n</frame>', new: '<frame id="1:5" w="fill" h={44} rounded={12} bg="#0066FF">\n <text id="1:6" size={16} fill="#fff">Sign Up</text>\n</frame>', }) // โ†’ updates node 1:5 (rounded, bg) AND node 1:6 (size, content) atomically

find_nodes

Search nodes on the current page by name substring or type. Case-insensitive. Scoped to the current page โ€” call switch_page first if your target lives elsewhere. Match logic: a node matches if its NAME contains the query (substring) OR its TYPE equals the query (exact, lowercased). So query "frame" finds both nodes named "Frame 12" and all nodes of type FRAME. Use when: - User refers to a node by name without giving an ID ("the Hero button", "the Footer") - Locating all nodes of a specific type (COMPONENT, TEXT, FRAME, INSTANCE) before bulk operations - Looking up existing nodes before jsx() so you can wire them as <instance>/<component> Returns: { data: { results: [{id, name, type, x, y, width, height}], total, truncated: boolean } } Capped at 20 results โ€” set explicit scope to narrow if truncated. Skip when: - You already have the node ID โ€” call inspect directly - You want the user's current selection โ€” use get_selection - Target is on a different page โ€” call switch_page first Examples: find_nodes({query: "Button"}) // by name substring find_nodes({query: "frame"}) // by type (FRAME) find_nodes({query: "Card", scope: "1:2"}) // scoped to subtree

How Genable works

What musepy/genable MCP server does

musepy/genable MCP server gives an MCP client write access to native Figma structure through the Genable plugin. It is intended for workflows where an agent creates or refines editable frames, text, vectors, components, instances, variables, and pages instead of returning a single rendered image.

The central creation operation is jsx. It accepts a JSX-like design dialect with nested elements such as frames, text, icons, images, components, groups, sections, and vectors. A call can create a complete subtree atomically. Existing subtrees can also be replaced when the markup has one root and a replacement node is supplied.

How it works

The MCP package acts as a local plugin-backed bridge. Keep the Genable plugin running in Figma desktop, configure an MCP client to run the package over STDIO, and issue design operations through the client. The plugin communicates with the Figma scene graph, allowing the agent to create structure, read it back, inspect selected properties, and continue refining the same canvas.

Reading is deliberately split across several tools. inspect returns a skeleton by default and can expose selected facets such as layout, paint, typography, variables, effects, or lint results. read_jsx returns a canonical, line-numbered representation that can be edited with edit_jsx. Search, cloning, moving, deletion, property discovery, and exact bulk replacement are also available.

Setup and configuration

Install the package in an MCP client with:

config.json
{
  "mcpServers": {
    "genable": {
      "command": "npx",
      "args": ["-y", "genable-mcp"]
    }
  }
}

After installation, start the Genable plugin in Figma desktop and ask the client to list pages in the current file. The package documentation provides client-specific setup and the current tool schema. The MCP route uses the model configured in the client; it does not require a separate model API key inside Genable.

The Figma plugin itself supports OpenAI-compatible, Anthropic-compatible, and Gemini provider connections, but those provider settings apply to the plugin workflow. Provider billing and usage limits remain separate from the MCP package.

Tools and capabilities

musepy/genable MCP server covers several design-system and editing tasks:

  • Create nested layouts with JSX, including auto-layout, grid layout, text formatting, gradients, effects, and token references.
  • Inspect nodes selectively, validate subtrees with lint information, search by name or type, and verify the canvas visually with screenshots.
  • Change text, fills, strokes, layout, sizing, effects, component overrides, and other properties through focused setters or the general edit tool.
  • Read and patch canonical JSX, while preserving node IDs for edits that target existing structure.
  • Create, update, bind, inspect, and remove variables and variable collections, including collection modes and aliases.
  • Promote frames or groups to components, combine components into variant sets, create instances, and manage text, boolean, instance-swap, and slot properties.
  • Move, clone, delete, and rename nodes, and apply exact property replacements across a subtree.

Limitations and notes

The bridge depends on the Genable plugin being active in Figma desktop. edit_jsx updates existing nodes whose IDs are preserved; it does not create missing children, delete omitted children, or reparent nodes. Use jsx, delete_node, or move_node for those operations.

Some operations are intentionally destructive. Bulk property replacement has no preview or multi-node undo, and changing a bound variable can affect connected nodes without undo. Inspect or discover values before broad replacements, and use variable-binding operations rather than exact property replacement when working with tokens.

Color variables use fill, stroke, or JSX token syntax, while bind_variable is for FLOAT, BOOLEAN, and STRING properties. A later literal text update can clear a string-variable binding. Gradient input also follows a limited CSS-like grammar; named colors, HSL values, and several positioned gradient forms are rejected.

Read the full README โ†’View source on GitHub โ†’

Related MCP Servers

View all in Architecture & Design View all alternatives
  • Figwright logoFigwright

    Bidirectional Figma server over a local WebSocket relay: turn a selection into framework-aware code (reusing your components and tokens), or author frames, text, styles, variables, and whole screens back onto the canvas. 92 tools, any MCP client, no Dev Mode seat or paid tier.

    ๐Ÿ“ Architecture & Design5 views
    Compare vs Figwright โ†’
  • Figma Context MCP logoFigma Context MCP

    Provide coding agents direct access to Figma data to help them one-shot design implementation.

    ๐Ÿ“ Architecture & Design3 views
    Compare vs Figma Context MCP โ†’
  • Opentakeoff logoOpentakeoff

    Construction plan takeoff on stdio โ€” load a plan PDF, read the title block, adopt the drawing scale (never applied silently), one-click trace rooms, and export real-world quantities (square footage, linear feet, counts) with provenance receipts. Install via NPM: npx -y opentakeoff-mcp

    ๐Ÿ“ Architecture & Design3 views
    Compare vs Opentakeoff โ†’
  • Icon Composer MCP logoIcon Composer MCP

    MCP server for Apple's Icon Composer: programmatically create .icon bundles with Liquid Glass effects (iOS 26+). 12 tools for icon creation, glass effect tuning, dark mode appearances, and App Store export.

    ๐Ÿ“ Architecture & Design1 views
    Compare vs Icon Composer MCP โ†’

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks โ€” not a rating.

GitHub stars
1
Stargazers on the source repository.
npm downloads
233
Package downloads in the last 30 days.
Last commit
1mo ago
Most recent push to the default branch.
Tools exposed
39
Callable tools this server registers over MCP.
Directory activity
4 views
Config copies, upvotes, and views on AllMCPs.

Reviews

No reviews yet โ€” be the first to share how this listing worked for you.

Frequently Asked Questions about Genable

Configure an MCP client to run `npx -y genable-mcp` over STDIO, then keep the Genable plugin running in Figma desktop.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewGenable AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/musepy-genable?style=directory)](https://allmcps.com/mcp/musepy-genable)
HTML Embed
<a href="https://allmcps.com/mcp/musepy-genable"><img src="https://allmcps.com/api/badge/musepy-genable?style=directory" alt="Genable on AllMCPs" /></a>

Technical Specs & Signals

Category๐Ÿ“Architecture & Design
PricingFree
More technical detailsExpand โ–พ
TransportSTDIO
RuntimeNode.js
AuthNo auth required
LicenseMIT
ClientsCursor, Cline / VS Code
Last updatedSep 5, 2026
10/14 checks healthy over the last 32d
Views4
Unique ViewsTotal visits recorded for this listing page on AllMCPs.
Installs0
Installs & Copy ActionsTotal times users copied install commands or configuration snippets for this server.
GitHub stars1
GitHub Star CountTotal stargazers on GitHub representing community popularity (1 stars).
Last commit1mo ago
Last Repository CommitThe most recent commit or push recorded for this server's GitHub repository.Last commit on Jul 14, 2026
npm downloads233/mo
Monthly npm DownloadsAverage monthly package installs recorded from npm registry statistics.
61Quality signal: Good ยท 61/100How this signal is calculated โ–พ
Server availabilityNot measured

Not scored for repo-hosted servers โ€” we can't reach the running server, only its GitHub page. Hosted MCP endpoints are health-checked live.

Verified ownership10/20
Documentation & tools30/30
Adoption & activity5/15
Community engagement1/10

A guidance signal from public completeness & health data โ€” not a user rating. New listings start lower and rise as they add docs, get verified, and grow adoption. Signals we can't observe for a listing are skipped, not counted against it.

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 17d ago via OSV.dev ยท genable-mcp (npm)

โ˜… FeaturedMoxie Docs MCP logo

Moxie Docs MCP

MCP & Agent Skills for Automated Documentation, and codebase conventions + context

Explore Server โ†’

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to unlock edit access and the Official badge โ€” proof is checked automatically, then reviewed by our team.

Free dofollow backlink: add your website and place the AllMCPs badge on it โ€” no claim needed. We detect it automatically and keep it verified as long as the badge stays live.

Claim & get free dofollow

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.

Explore more

More in ๐Ÿ“ Architecture & Design โ†’Alternatives to Genable โ†’Install in Claude DesktopInstall in CursorInstall in VS Code