figma-mcp-poor

figma-mcp-poor

AI assistants can read and inspect Figma design context locally via a plugin, without external API keys or rate limits.

Category
Visit Server

README

figma-mcp-poor

npm version License: MIT

A Figma MCP (Model Context Protocol) bridge that lets AI assistants read design context from Figma. Uses the Figma Plugin API (local, no network) instead of the REST API — no API keys, no rate limits, no blown context windows.

AI IDE  ←—MCP stdio—→  MCP Server (Node.js)  ←—WebSocket—→  Figma Plugin (figma.* API)

Quick Start

1. Set up your MCP client

Add the server to your MCP client config (see Client Configuration below).

2. Install the Figma plugin

Option A — Download pre-built (recommended):

  1. Go to Releases and download figma-plugin-vX.Y.Z.zip
  2. Unzip somewhere stable on your disk
  3. In Figma: open any design file → Plugins → Development → Import plugin from manifest... → select manifest.json from the unzipped folder

Option B — Build from source:

git clone https://github.com/whoistus/figma-mcp-poor
cd figma-mcp-poor
npm install
npm run build:plugin

Then in Figma: Plugins → Development → Import plugin from manifest... → select figma-plugin/manifest.json.

Run the plugin — it will connect to the MCP server via WebSocket on localhost:3055.

3. Start designing with AI

Select elements in Figma and use your AI assistant to inspect them. The recommended first call is get_dev_summary — it returns structure, text content, colors, components, and a screenshot in one request.

MCP Client Configuration

Claude Code

In your project's .mcp.json or global ~/.claude.json:

{
  "mcpServers": {
    "figma": {
      "command": "npx",
      "args": ["-y", "figma-mcp-poor"]
    }
  }
}

Cursor

In .cursor/mcp.json:

{
  "mcpServers": {
    "figma": {
      "command": "npx",
      "args": ["-y", "figma-mcp-poor"]
    }
  }
}

VS Code (Copilot)

In .vscode/mcp.json:

{
  "servers": {
    "figma": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "figma-mcp-poor"]
    }
  }
}

Windsurf

In ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "figma": {
      "command": "npx",
      "args": ["-y", "figma-mcp-poor"]
    }
  }
}

Custom port

Set the FIGMA_MCP_PORT environment variable to change the WebSocket port (default: 3055):

{
  "mcpServers": {
    "figma": {
      "command": "npx",
      "args": ["-y", "figma-mcp-poor"],
      "env": {
        "FIGMA_MCP_PORT": "4000"
      }
    }
  }
}

Note: If you change the port, you also need to update the Figma plugin's manifest.jsonnetworkAccess.devAllowedDomains to match.

Available Tools

Tool Description Token Cost
get_dev_summary Start here. Complete summary: structure, texts, colors, components, screenshot Medium
get_document_info File name, pages, current page Low
get_selection Selected nodes with CSS properties, optional text flattening and screenshot Low–Medium
get_node_by_id Inspect a specific node by ID with CSS properties. Paginates large children lists Low–Medium
get_styles Local paint/text/effect/grid styles as CSS values Low
get_variables Design tokens/variables (colors, numbers, strings, booleans) Low
get_components Local components with property definitions Low–Medium
get_design_context Design brief (markdown) or detailed context (JSON) for a node Medium
get_flows Prototype flows: starting points, interactions, navigation connections Low–Medium
get_screenshot Export a node as PNG, JPG, or SVG Medium
get_user_flow_context Structured FlowGraph JSON: nodes, edges, BFS paths, explicit no-flow signal Low–Medium

How It Works

  1. The MCP server starts a WebSocket server on localhost:3055
  2. The Figma plugin connects to this WebSocket from inside Figma
  3. When an AI tool is called, the server sends a request through WebSocket to the plugin
  4. The plugin reads data using the Figma Plugin API (figma.*) and sends it back
  5. The server formats raw Figma data into developer-friendly CSS-like output and returns it to the AI

Key design decisions:

  • Default depth=1 for node traversal prevents context explosion. Use get_node_by_id to drill deeper.
  • Formatting is server-side — the plugin sends raw data, the server transforms it. Formatting changes don't require reloading the plugin.
  • Smart truncation — responses exceeding the token budget are truncated with hints guiding the AI to drill deeper.
  • Multi-instance safe — the first MCP process to start becomes the primary (owns port 3055 + proxy port 3056). Subsequent processes (e.g. Codex starting alongside Claude Code) automatically become secondaries and forward requests through the primary. Only one Figma plugin connection is ever active.

Development

# Install dependencies
npm install

# Build everything
npm run build

# Dev mode (MCP server with auto-reload)
npm run dev:server

# Watch mode (Figma plugin)
npm run watch -w figma-plugin

Troubleshooting

Plugin won't connect

  • Make sure the MCP server is running before starting the plugin
  • Check that port 3055 (or your custom port) isn't in use: lsof -i :3055
  • The plugin only connects to localhost — no remote connections

"No selection" responses

  • Select at least one element in Figma before calling selection-based tools
  • Make sure the plugin UI is open (the WebSocket client runs in the plugin UI)

WebSocket errors

  • Only one Figma file can connect at a time (single-connection design)
  • If you switch files, restart the plugin in the new file

Multiple AI tools conflict / port already in use

  • Starting in v0.4.0, multiple MCP instances co-exist automatically. The first instance owns port 3055; subsequent ones proxy through it on port 3056.
  • If you see EADDRINUSE errors, an old server process may still be running: lsof -i :3055 -i :3056 to find and kill it.

Large designs timing out

  • Use get_node_by_id with specific node IDs instead of scanning entire pages
  • Reduce depth parameter (default is 1, max is 5)
  • Screenshots are capped at 800px width by default — use max_width to adjust

Changelog

0.4.0 (2026-05-05)

  • New tool: get_user_flow_context — structured FlowGraph JSON for deterministic AI navigation analysis
    • Returns nodes, edges, paths (BFS from prototype starting points), and metadata.hasFlow
    • Explicit no-flow signal (hasFlow: false, empty edges/paths) when no prototype connections exist — no hallucination
    • Optional includeInference: true adds heuristic-inferred edges (action-keyword buttons, list→detail patterns) when no real flow exists, clearly separated from real edges
    • maxDepth param (default 10, max 20) controls BFS traversal depth; paths capped at 200 to protect token budget
  • Multi-instance support — run Claude Code + Codex (or any two MCP clients) simultaneously without port conflicts
    • First process becomes primary: owns Figma plugin WS on port 3055 + proxy listener on port 3056
    • Subsequent processes become secondaries: connect to proxy port, forward all tool calls through the primary
    • No changes to existing tool behaviour; no manual configuration required

0.3.0 (2026-04-15)

Fixes for fetching large design areas with minimal data loss.

  • Pagination on get_node_by_id — new childrenOffset and childrenLimit params let AI fetch children in chunks for large frames. Response includes pagination: { offset, limit, total, hasMore }.
  • Raised children capMAX_CHILDREN bumped from 100 → 200 per node. Fewer silent truncations on real-world designs.
  • Fixed componentName bugget_dev_summary previously reported the instance's node name as the component name. Now correctly resolves the master component name via getMainComponentAsync(). Renamed instances now group properly: PrimaryButton x5: "Save", "Cancel", ....
  • Colors inside instancesget_dev_summary.colors now walks into instances for fill colors (previously missed custom fill overrides).
  • Configurable depth on get_dev_summary — was hardcoded to 2, now accepts depth param (default 2, max 5) for deeply nested screens.
  • Cap on flatten_text — 500-entry default cap prevents token budget blow-ups on text-heavy pages.
  • Cap on get_flows — new limit param (default 200, max 1000) with clear truncation hint in output.
  • get_design_context brief truncation signal — 16000-char cap now includes an explicit hint instead of silently cutting mid-content.

0.2.0 (2026-04-15)

  • New tool: get_flows — prototype flow support
    • Returns flow starting points (page.flowStartingPoints)
    • Collects all prototype connections from node trees
    • Supports all trigger types (click, hover, press, drag, mouse enter/leave, timeout)
    • Supports all action types (navigate, swap overlay, open URL, back, close, set variable)
    • Includes transition animations (dissolve, smart animate, slide, push, etc.) with duration and easing
  • Node-level reactions — every serialized node now includes reactions[] when it has prototype interactions, visible in get_node_by_id, get_selection, and other node tools
  • Compact arrow format for interactions: Button --click--> Login Screen (smart-animate 300ms)

0.1.0 (2026-04-15)

  • Initial public release
  • 9 MCP tools: get_dev_summary, get_document_info, get_selection, get_node_by_id, get_styles, get_variables, get_components, get_design_context, get_screenshot
  • CSS-like formatting for colors, typography, layout (flexbox), spacing
  • Smart truncation with drill-deeper hints
  • Depth-controlled serialization with auto depth bonus for COMPONENT_SET (+2) and INSTANCE (+1)
  • Screenshot export with configurable max width
  • Text flattening and color collection utilities

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured