figma-opencode-mcp
README.md
# figma-opencode-mcp
**Local-first MCP server for OpenCode/Codex** that connects AI coding agents to the currently open Figma file through a local plugin bridge.
> No Figma API token required. No Figma REST API in default mode. All communication stays on your machine.
**Version: v0.2.2** ā fix docs URL in CLI help. Run with a single `npx` command.
## Key Features
- š **No Figma API token required** in default mode
- š **No data leaves your machine** ā local WebSocket bridge
- š **Read current selection** ā get node data from Figma
- š **Export selection as JSON** ā structured data for design-to-code
- āļø **Create frames and text** ā basic write operations
- š **Audit selection** ā design system heuristics (spacing, typography, layout)
- š§© **Works with OpenCode and Codex** via MCP stdio transport
- š¦ **Run with a single `npx` command** ā no clone or install needed
## Important Limitations
> ā ļø This does **not** magically access any private Figma file by URL.
>
> - You still need to **open the Figma file** in Figma.
> - You must **run the local plugin bridge** inside the file.
> - The plugin can only access what Figma Plugin API allows in the current file/session.
## Architecture
```
OpenCode/Codex ā MCP stdio ā WebSocket (127.0.0.1:3845) ā Plugin UI ā Plugin Main ā Figma API
```
See [docs/architecture.md](docs/architecture.md) for details.
## Quick Start
### Option A: Install with npx (recommended)
Run the MCP server directly ā no clone or local build needed:
```bash
npx -y figma-opencode-mcp@latest
```
#### Configure OpenCode/Codex
**OpenCode:**
```bash
opencode mcp add figma-opencode-mcp -- npx -y figma-opencode-mcp@latest
```
**Codex:**
```bash
codex mcp add figma-opencode-mcp -- npx -y figma-opencode-mcp@latest
```
**.mcp.json (any MCP client):**
```json
{
"mcpServers": {
"figma-opencode-mcp": {
"command": "npx",
"args": ["-y", "figma-opencode-mcp@latest"]
}
}
}
```
> **Note:** The npm/npx command only installs the MCP server.
> You still need to import and run the Figma plugin separately (see step 4).
### Option B: Local clone (for development)
```bash
git clone <repo-url> figma-opencode-mcp
cd figma-opencode-mcp
npm install
npm run build
```
**Start MCP Server:**
```bash
# Development mode (hot reload)
npm run dev
# Production mode
node dist/index.js
```
**Local MCP config:**
```json
{
"mcpServers": {
"figma-opencode-mcp": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/figma-opencode-mcp/dist/index.js"]
}
}
}
```
### 4. Run Figma Plugin (required for both options)
1. Build the plugin: `npm run build:plugin` (skip if using npx ā download the plugin from [releases](https://github.com/laivannha0202/figma-opencode-mcp/releases))
2. In Figma: **Plugins ā Development ā Import plugin from manifest**
3. Select `plugin/manifest.json`
4. Run the plugin in your Figma file
5. The plugin will connect to `ws://127.0.0.1:3845`
6. Back in OpenCode/Codex, call `figma_ping`
## Tools
| Tool | Description |
| ----------------------------- | ------------------------- |
| `figma_ping` | Check connection status |
| `figma_get_selection` | Get selected nodes |
| `figma_get_current_page` | Get current page info |
| `figma_get_node_tree` | Get node tree |
| `figma_export_selection_json` | Export as structured JSON |
| `figma_create_frame` | Create a frame |
| `figma_create_text` | Create a text node |
| `figma_audit_selection` | Audit for design issues |
See [docs/tools.md](docs/tools.md) for detailed documentation.
## Example Prompts
```
Use figma_ping to check connection.
Use figma_get_selection to read my current selected frame.
Use figma_export_selection_json and generate a React/Vite component.
Use figma_audit_selection and suggest design-system improvements.
```
## Project Structure
```
figma-opencode-mcp/
āāā src/ # MCP server source
ā āāā index.ts # Entry point
ā āāā mcp/ # MCP layer (server, tools, schemas, handlers)
ā āāā bridge/ # WebSocket bridge (WS server, client, pending requests)
ā āāā shared/ # Shared types (protocol, errors, logger, serialize)
āāā plugin/ # Figma plugin (manifest, code, UI, types)
āāā docs/ # Documentation
āāā examples/ # MCP config examples
āāā scripts/ # Dev/build/verify scripts
āāā README.md
```
## Security
- No token, no REST API in default mode.
- WebSocket binds only to `127.0.0.1`.
- No data sent to external servers.
- No eval or shell execution.
- No `.env` with secrets.
See [docs/security.md](docs/security.md).
## Roadmap
### v0.2.0 ā
- npm package packaging with `npx` support
- `--version` and `--help` CLI flags
- Plugin packaging (`plugin.zip`)
- Documentation updates for npx install
### v0.3.0
- `figma_extract_design_tokens`
- `figma_generate_react_spec`
- `figma_compare_code_with_design`
- `figma_create_component`
- `figma_apply_auto_layout`
- `figma_export_svg_png`
### v0.4.0
- Integration profile for `opencode-power-kit`
- `/figma-setup` slash command
- `/figma-to-react` workflow
- `/figma-audit` workflow
- `figma-design-system` skill
### v1.0.0
- Stable no-token local bridge
- Better plugin session management
- Better schema docs
## License
MIT
TDQS
A3.6/5.0
Scored across 8 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: ping for health, getters for page/selection/tree, creators for frame/text, audit for design issues, and export for JSON. No overlap.
Naming Consistency5/5
All tools follow a consistent 'figma_verb_noun' snake_case pattern, making them predictable and easy to navigate.
Tool Count5/5
8 tools is well-scoped for a Figma design assistant, covering essential reading, creation, auditing, and health checking without being excessive.
Completeness3/5
Missing update/delete operations for nodes, lack of shape variety (only frame and text), and no style manipulation tools, leaving notable gaps for full design workflows.
Maintenance
ActivityInactive
ResponsivenessNo issues