figma-free-mcp
# π¨ Figma MCP for Free Plan
https://smithery.ai/servers/haju-xp/figma-free-mcp
> Connect Claude to Figma with zero friction.
> No paid plan. No channel ID copy-paste. Just works.
[](https://www.npmjs.com/package/figma-free-mcp)
[](https://smithery.ai/server/haju-xp/figma-free-mcp)
[](./LICENSE)
---
## β¨ Why this exists
| | Figma Official MCP | ClaudeTalkToFigma | **figma-free-mcp** |
|---|---|---|---|
| Free plan | β Paid only | β
| β
|
| Auto-connect | β
| β Manual channel ID | β
**Auto-detect** |
| Tools | Many | 70+ | **100+** |
| One-line install | β | β | β
|
---
## π Quick Start
### Step 1 β Install (once per PC)
```bash
npx -y figma-free-mcp@latest install
```
Or just tell Claude Code: **"νΌκ·Έλ§ μ€μΉν΄μ€"** β after the first install the `/figma-connect` skill knows how.
This will:
- β
Register the MCP for **all folders** in Claude Code (`-s user`), pinned to this version
- β
Copy the Figma plugin to `~/.figma-free-mcp/plugin/` and open that folder
- β
Install the `/figma-connect` skill to `~/.claude/skills/`
- β
Clean up older setups (folder-only registrations, old global installs)
Run the same command again to **update**.
### Step 2 β Import the Figma plugin (once per PC)
Figma Desktop β **Plugins** β **Development** β **Import plugin from manifest...** β pick `manifest.json` in the folder Step 1 opened.
Then **restart Claude Code**.
### Every time
1. In Figma: **Plugins** β **Development** β **Figma Free MCP**
2. In Claude: `/figma-connect`
The relay server **starts by itself** when Claude connects β no terminal to keep open.
---
## π¬ Usage
Once everything is running, just talk to Claude naturally:
```
"Figmaμ λ²νΌ μ»΄ν¬λνΈ λ§λ€μ΄μ€"
"μ€λ³΅ νμ΄μ§ μ°Ύμμ μ 리ν΄μ€"
"globals.css μμ ν ν°μ Figma λ³μλ‘ μ±ν¬ν΄μ€"
"μ΄ React μ»΄ν¬λνΈλ₯Ό Figma νλ μμΌλ‘ λ³νν΄μ€"
```
Claude automatically detects your open Figma file β **no channel ID needed!**
---
## ποΈ Working with Multiple Files (Concurrent Editing)
Edit several Figma files in one session β still **no channel IDs**, just file names.
**Setup:** open each file and run the plugin in it (one plugin instance per file β a Figma limitation: a plugin can only touch the file it runs in).
```
"μ΄λ€ Figma νμΌλ€μ΄ μ΄λ € μμ΄?" β list_active_channels (shows file & page names)
"λ―Έλ€λ§μΌ μ£Όλ¬Έ νμΌμ λ²νΌ λ§λ€μ΄μ€" β connect_to_file then edit, or run_on_file
"λ―Έλ€λ§μΌμ ν€λ, μ μ°κ΄λ¦¬μ ν©κ³ ν
μ€νΈ λ£μ΄μ€" β runs on both files concurrently
```
| Tool | When to use |
|------|-------------|
| `connect_to_file("name")` | Focus one file β following commands all go there |
| `run_on_file("name", cmd, params)` | Send one command to a specific file **without** switching β repeat across files to edit them concurrently |
> β οΈ Each file you want to edit must have its own running plugin instance. A file that's only open in the background (no plugin) cannot be edited.
---
## π οΈ All Tools (100+)
### π Auto-Connect & Multi-File
| Tool | Description |
|------|-------------|
| `auto_connect` | Auto-detect active Figma sessions and connect |
| `list_active_channels` | List open Figma plugin sessions **with their file & page names** |
| `connect_to_file` | Connect by **file name** instead of channel ID (switches the active file) |
| `run_on_file` | Run one command on a specific file **without switching** β enables concurrent multi-file editing |
### π Document & Pages
`get_document_info`, `get_pages`, `get_selection`, `get_node_info`, `get_nodes_info`, `scan_text_nodes`, `get_styles`, `get_local_components`, `get_remote_components`, `get_variables` and more
### πΌοΈ Creation
`create_frame`, `create_rectangle`, `create_ellipse`, `create_text`, `create_page`, `create_component_from_node`, `create_component_instance`, `create_component_set` and more
### βοΈ Modification
`set_fill_color`, `set_stroke_color`, `set_text_content`, `set_font_size`, `set_corner_radius`, `set_auto_layout`, `move_node`, `resize_node`, `delete_node`, `clone_node` and more
### π¨ Design System Sync
| Tool | Description |
|------|-------------|
| `sync_css_to_figma` | CSS variables β Figma variable collections |
| `sync_figma_to_css` | Figma variables β CSS custom properties |
| `compare_design_tokens` | Diff report between CSS and Figma |
| `apply_design_system` | Apply design policy doc to Figma |
| `audit_design_consistency` | Find policy violations in Figma file |
### π Page Manager
| Tool | Description |
|------|-------------|
| `list_all_pages_detailed` | All pages + frame count + duplicate detection |
| `deduplicate_pages` | Auto-merge/remove duplicate pages |
| `organize_pages` | Sort pages by number or alphabetically |
| `cleanup_empty_pages` | Remove empty pages |
### β‘ Code to Figma
| Tool | Description |
|------|-------------|
| `react_to_figma` | React/TSX component β Figma frame |
| `css_class_to_figma_style` | CSS classes β Figma local styles |
| `generate_component_variants` | Generate hover/active/disabled variants |
---
## ποΈ Architecture
```
Claude Desktop
β
β stdio (MCP)
βΌ
figma-free-mcp server (100+ tools)
β
β WebSocket (port 3055)
βΌ
Figma Plugin (auto-connect)
β
β Figma API
βΌ
Your Figma File β¨
```
---
## βοΈ Commands Reference
```bash
npx -y figma-free-mcp@latest install # install or update everything
npx -y figma-free-mcp@latest doctor # what is installed and connected
npx -y figma-free-mcp@latest uninstall # remove the Claude registration
npx -y figma-free-mcp@latest socket # start the relay by hand (normally automatic)
```
---
## π Upgrading from v1.0.7 or earlier
βββββββββββββββββββββββββββββ
If you see a recurring **"MCP figma-free-mcp-socket: Server disconnected"** error in Claude Desktop, run this once:
```bash
npx -y figma-free-mcp@latest install
```
Then restart Claude Desktop. The error will be gone.
βββββββββββββββββββββββββββββ
---
## β FAQ
**Q. Do I need a paid Figma plan?**
A. No. Works with free Figma accounts.
**Q. Do I need Claude Pro?**
A. Any Claude Desktop plan works.
**Q. The plugin shows "Disconnected"**
A. Run `/figma-connect` in Claude β it starts the relay if needed. Then re-run the plugin. Still stuck: `npx -y figma-free-mcp@latest doctor`
**Q. Multiple Figma files are open**
A. `list_active_channels` shows each session with its file & page name. Use `connect_to_file("name")` to focus one, or `run_on_file("name", ...)` to edit several files concurrently β no channel IDs needed. Each file must have its own running plugin instance.
**Q. Port 3055 is already in use**
A. Kill the existing process: `netstat -ano | findstr :3055` then `taskkill /PID [number] /F`
---
## β οΈ License & Usage
MIT License β free to use and modify.
β
Personal & commercial use allowed
β
Modification allowed
β Claiming as your own work prohibited
β Removing author credit prohibited
Β© 2026 [haju-xp](https://github.com/haju-xp)
---
## π Credits
Built on top of [claude-talk-to-figma-mcp](https://github.com/arinspunk/claude-talk-to-figma-mcp) by arinspunk (MIT License).
TDQS
Scored across 100 tools
Many tools target the same resource with fine-grained operations (e.g., multiple fill-setting tools, many text property setters, and get_node_info vs get_nodes_info). While descriptions clarify distinctions, the sheer number of tools increases risk of misselection, especially between set_image and set_image_fill, or among text manipulation tools.
Most tools follow a verb_noun pattern (e.g., set_fill_color, create_rectangle, delete_node). A few outliers like boolean_operation and css_class_to_figma_style break the pattern, but these are rare. Overall naming is predictable and clear.
100 tools is very heavy for an MCP server. While the scope (Figma design, FigJam, variables, CSS) is broad, many tools could be combined (e.g., all text property setters could be a single set_text_properties). This count overwhelms the agent and exceeds typical expectations for a coherent tool set.
The tool set covers the full lifecycle of Figma objects: create, read, update, delete for frames, pages, components, instances, styles, variables, and more. Also includes design system audit, CSS sync, and FigJam-specific tools. No obvious gaps for common design tasks.