Access Figma designs via MCP or Chrome. Use when asked about Figma files, design mockups, wireframes, or UI designs. Trigger words - figma, design, mockup, wireframe, UI design, FigJam.
Access Figma files via MCP (Model Context Protocol) or REST API.
The figma-mcp CLI uses OAuth tokens stored by Claude Code to make authenticated MCP calls.
OAuth is handled automatically when you run /mcp in Claude Code and connect to Figma. Tokens are stored in macOS keychain under "Claude Code-credentials".
# List available MCP tools
~/.claude/skills/figma/scripts/figma-mcp list-tools
# Call any MCP tool
~/.claude/skills/figma/scripts/figma-mcp call <tool_name> '{"arg": "value"}'
# Debug: check token
~/.claude/skills/figma/scripts/figma-mcp token
| Tool |
|---|
| Description |
|---|
generate_diagram | Create FigJam diagrams from mermaid syntax |
generate_figma_design | Capture web pages into Figma |
get_design_context | Get design info for a node |
get_screenshot | Screenshot a Figma node |
get_metadata | Get node/page metadata |
whoami | Get authenticated user info |
The MCP can capture HTML pages and convert them to editable Figma designs.
<script src="https://mcp.figma.com/mcp/html-to-design/capture.js" async></script>
cd /path/to/html && uv run python -m http.server 8765
~/.claude/skills/figma/scripts/figma-mcp call generate_figma_design \
'{"outputMode": "newFile", "planKey": "team::TEAM_ID", "fileName": "My Design"}'
open "http://localhost:8765/page.html#figmacapture=CAPTURE_ID&figmaendpoint=https%3A%2F%2Fmcp.figma.com%2Fmcp%2Fcapture%2FCAPTURE_ID%2Fsubmit&figmadelay=1000"
~/.claude/skills/figma/scripts/figma-mcp call generate_figma_design '{"captureId": "CAPTURE_ID"}'
WARNING: Just copying the URL does NOT make it viewable. You MUST change sharing settings first.
Just copying https://www.figma.com/design/FILE_ID/... without changing settings = link won't work for others. The default is "Only those invited" which blocks everyone.
To invite specific people (requires moving out of Drafts):
For direct API access without MCP.
PAT stored in ~/.claude/secrets.env as FIGMA_PAT.
source ~/.claude/secrets.env
curl -H "X-Figma-Token: $FIGMA_PAT" "https://api.figma.com/v1/files/FILE_ID"
From URL: https://www.figma.com/design/FILE_ID/File-Name
# Get file metadata
curl -H "X-Figma-Token: $FIGMA_PAT" "https://api.figma.com/v1/files/$FILE_ID"
# Get specific node
curl -H "X-Figma-Token: $FIGMA_PAT" "https://api.figma.com/v1/files/$FILE_ID/nodes?ids=NODE_ID"
# Export images
curl -H "X-Figma-Token: $FIGMA_PAT" "https://api.figma.com/v1/images/$FILE_ID?ids=NODE_ID&format=png&scale=2"
For UI automation (sharing, clicking buttons):
# Find Figma tabs
~/.claude/skills/chrome-control/scripts/chrome tabs | grep -i figma
# Click Share button via JS
~/.claude/skills/chrome-control/scripts/chrome js TAB_ID "
const shareBtn = Array.from(document.querySelectorAll('button')).find(b => b.textContent.trim() === 'Share');
shareBtn?.click();
"
# Type in input fields
~/.claude/skills/chrome-control/scripts/chrome js TAB_ID "
const input = document.querySelector('input[type=\"text\"]');
input.focus();
input.value = '[email protected]';
input.dispatchEvent(new Event('input', {bubbles: true}));
"
Note: Figma uses React - must use dispatchEvent for input changes to trigger form validation.
mcpOAuth.figma*~/.claude/secrets.env as FIGMA_PATOAuth expires ~30 days, PAT expires 90 days max.
| File | ID | Description |
|---|---|---|
| Dashboard Design Test | YBa11Wdnf4J1ZHqfLqt7kO | Test dashboard captured from HTML |
| Astro App File | iHUDBKtiDYin9cMhrL9vt2 | Stargazer app wireframes |