Troubleshooting Guide
Connection Drops or “Not Connected”? Start Here
This is the most common issue, and as of v1.31.0 it is fixed at the source. If the bridge keeps dropping and only comes back when you close the plugin, restart your MCP client, or kill ports by hand, you were hitting zombie MCP server processes squatting the WebSocket port range (9223–9232) after a bad shutdown. Each fresh server got bumped to a port with no plugin attached, so status read “not connected.” v1.31.0 makes those zombies impossible to create and reaps any that already exist — and the plugin now reconnects itself.
Step 1 — Update and re-import the plugin (required, one time)
The fix lives in both the server and the redesigned Desktop Bridge plugin, so you need both halves:- Update the package so your MCP client launches v1.31.0+ (NPX users get it automatically on next launch; pinned versions should bump to
figma-console-mcp@1.31.0or later). - Re-import the plugin — Figma caches plugin files at the application level, so restarting your MCP client alone will not pick up the new plugin UI:
- Figma Desktop → Plugins → Development → Import plugin from manifest…
- Select
~/.figma-console-mcp/plugin/manifest.json(the stable path the server maintains automatically)
- Run the Desktop Bridge plugin in your file. It auto-connects.
You only have to do this once. After you’re on v1.31.0+, future updates go back to not needing a re-import unless a release explicitly says so.
Step 2 — Let it reconnect itself (no more restart ritual)
Once you’re on v1.31.0+, you should rarely touch the connection again. Three things now keep it alive automatically:- Server-side self-healing. Stale/zombie MCP servers are force-killed (
SIGTERM→SIGKILL) on startup and swept every 5 minutes, so the port range stays clean. A hung shutdown can no longer leave an orphan behind. - Auto-reconnect watchdog. If the plugin ever shows disconnected, it re-probes every ~12 seconds and reattaches the instant a server is available — no restart needed, even if you opened the plugin before your MCP client started.
- One-click Reconnect. The plugin’s main button becomes Reconnect when a connection drops unexpectedly (and Pause/Resume when connected). Click it for an instant retry instead of reopening the plugin.
figma_get_status (or figma_diagnose). The plugin’s log header also shows a live N server(s) badge — if that number is higher than the number of MCP clients you’re running, you have stale processes (and the reaper will clear them).
Last resort — manually clear leftover zombies (rarely needed)
You should only need this once, right after upgrading, to clear pre-v1.31.0 zombies that were already running before the new reaper existed (it cleans up on the next server start, but old processes from before the upgrade may still be holding ports). After that, the automatic reaper handles it.$TMPDIR → /var/folders/…, not /tmp, so both paths are listed.) To inspect what’s holding the range without killing anything: lsof -i :9223-9232 | grep LISTEN.
Common Issues and Solutions
Issue: Claude Code OAuth Completes But Connection Fails
Symptoms:- Using Claude Code with
claude mcp add --transport sse - OAuth opens in browser and you authorize successfully
- Connection never establishes after OAuth
- Server shows “figma-console: not connected” in
/mcp
mcp-remote package instead of Claude Code’s native SSE transport:
~/.claude.json manually:
/mcp to reconnect) — mcp-remote will open a browser for OAuth, and the connection will work correctly.
Alternative: If you’re using Claude Code, consider using Local Mode instead. It provides the full feature set including the Desktop Bridge plugin, and doesn’t require OAuth (uses a Personal Access Token).
Plugin Debugging: Simple Workflow ✅
For Plugin Developers in Local Mode:FIRST-TIME SETUP:✅ Re-importing the manifest after a package update is optional. Most upgrades stay wire-compatible with the previous plugin — you’ll still get all functional changes. Re-import only when release notes specifically call for it (typical for plugin-side method additions), or when you want the latest cosmetic touches (status-pill copy,
- Open Figma Desktop normally (no special flags needed)
- Go to Plugins → Development → Import plugin from manifest…
- Select
~/.figma-console-mcp/plugin/manifest.json(stable path created automatically by the MCP server)- Run the plugin in your Figma file — it auto-connects via WebSocket
pluginVersionreporting).
How to Verify Setup is Working
Before trying to get console logs, verify your setup:"valid": false, the AI will provide step-by-step setup instructions.
WebSocket Bridge Troubleshooting
Plugin Shows “Disconnected”
Cause: MCP server is not running (it hosts the WebSocket server on ports 9223–9232). Fix: Start or restart your MCP client (Claude Code, Cursor, etc.) so the MCP server process starts.Plugin Not Appearing in Development Plugins
Cause: Plugin manifest not imported. Fix: Go to Figma → Plugins → Development → Import plugin from manifest… → selectfigma-desktop-bridge/manifest.json.
Port 9223 Already in Use
Cause: Another MCP server instance or orphaned process is running on port 9223. Fix: The server automatically cleans up orphaned MCP processes on startup and falls back to the next available port in the range 9223–9232. The plugin scans the whole range on launch and picks up whichever port the server bound to.Plugin Shows “MCP scanning” or “Retry”
Cause: The MCP server is not running yet, or all ports 9223–9232 are occupied. Fix: Start your MCP client (Claude Code, Cursor, etc.) so the MCP server process starts. On v1.31.0+ the plugin’s watchdog keeps probing and connects on its own the moment a server appears — you don’t need to restart anything. If ports are jammed by stale processes from before you upgraded, see Start Here → Last resort; going forward the server’s reaper clears orphans on startup and every 5 minutes automatically.Plugin Shows “No MCP server found”
Cause: The plugin scanned every port in 9223–9232 and got no response. Fix: Make sure an MCP client is running with figma-console-mcp configured. Checkfigma_get_status from your AI client.
Orphaned MCP Processes Filling Port Range
Cause: MCP clients can leave orphaned MCP server processes running after tabs/windows close (a known Claude Desktop issue, and the original root cause of the recurring “not connected until restart” reports). Fix (v1.31.0+): The server now force-kills orphans it finds — escalatingSIGTERM → SIGKILL so even a hung process that ignores a graceful shutdown is cleared — on startup and on a 5-minute background sweep. A shutdown backstop also prevents a server from zombifying in the first place. In normal use you should never need to intervene. To inspect (not kill) what’s holding ports: lsof -i :9223-9232 | grep LISTEN. To force-clear leftovers from before you upgraded, see Start Here → Last resort.
Stable plugin path: The MCP server automatically copies plugin files to ~/.figma-console-mcp/plugin/ on startup. Import from this path instead of the volatile npx cache path. Re-importing after a package update is optional — only required when the release notes call for it.
Running in Docker
Cause: The WebSocket server binds tolocalhost by default, which is unreachable from the Docker host.
Fix: Set FIGMA_WS_HOST=0.0.0.0 in your container environment and expose the port with -p 9223:9223.
Plugin Connected but Commands Timeout
Cause: Plugin may be running in a different Figma file than expected. Fix: The MCP server routes commands to the active file. Make sure the Desktop Bridge Plugin is running in the file you want to work with. Usefigma_get_status to see which file is connected.
The Simplest Workflow - No Navigation Needed!
Once setup is complete, just ask your AI to check console logs:[Main], [Swapper], [Serializer], etc. plugin logs immediately:
Issue: No Console Logs Captured
Symptoms:figma_get_console_logs()returns empty array- Log count is 0
- The Desktop Bridge plugin isn’t running in the file you expect
- The plugin hasn’t produced output yet
- Logs are being filtered out by level
Verify the plugin is connected
bridge.connected should be true, and bridge.file.name should match the file you’re working in.
Re-run the plugin in Figma
The Desktop Bridge plugin capturesconsole.log/warn/error/info/debug from its own QuickJS sandbox. Open the file, run Plugins → Development → Figma Console Desktop Bridge, then trigger your work.
Check log levels
Cloud Mode note: In Local Mode figma_get_console_logs reads from the Desktop Bridge plugin’s QuickJS sandbox. In Cloud Mode the Cloudflare-hosted server launches a headless browser via the Browser Rendering API and captures logs from there. Plugin-sandbox logs from a paired Desktop Bridge plugin are not currently captured in Cloud Mode — use Local Mode for that.
Issue: Screenshot Returns Empty Data
Symptoms:figma_take_screenshotsucceeds but image is blank- Base64 data is present but doesn’t render
- The target node ID is stale (node IDs are session-specific)
- The node is off-canvas or hidden
- The Desktop Bridge plugin isn’t connected to the right file
figma_get_status and make sure the node belongs to it.
Issue: Claude Desktop Not Seeing Tools
Symptoms:- MCP server connected but no tools visible
- Tools list is empty
Check Configuration
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
https://figma-console-mcp.southleft.com/sse (note the /sse endpoint).
Restart Claude Desktop
After changing configuration:- Quit Claude Desktop completely
- Restart it
- Check the tools menu
Verify mcp-remote
Make suremcp-remote is installed:
Workflow Best Practices
Recommended Workflow
Tips
1. Always Verify the Bridge Firstfigma_get_statusshows whether the Desktop Bridge plugin is connected and to which file- If
bridge.connectedisfalse, open the plugin in Figma Desktop
- Node IDs are session-specific and become stale across conversations
- Run
figma_search_componentsbefore screenshotting or instantiating
- Prevents old logs from mixing with new ones
figma_clear_console()orfigma_reload_plugin({ clearConsole: true })
- Figma Desktop caches plugin files at the application level
- Re-importing is optional for most updates (wire-compatible upgrades) and only required when the release notes specifically say so (e.g. when the plugin adds new methods)
- When required: re-import
~/.figma-console-mcp/plugin/manifest.json(Plugins → Manage plugins → re-import)
- Errors are prefixed
[figma-console-mcp]so you can tell them apart from other MCPs - Most include the next step to try
Getting Help
If you’re still experiencing issues:-
Check Error Message Details
- Error messages include specific troubleshooting steps
- Follow the hints provided
-
Run
figma_diagnose- Returns a structured report of mode, bridge state, OAuth status, and likely causes for common failures
-
Verify Cloud Deployment
-
Report Issues
- GitHub Issues: https://github.com/southleft/figma-console-mcp/issues
- Include error messages
- Include
figma_get_statusandfigma_diagnoseoutput
Technical Details
Console Log Buffer
- Size: 1000 logs (circular buffer)
- Capture: Real-time via WebSocket from the Desktop Bridge plugin’s QuickJS sandbox
- Source Detection: Plugin
console.log/warn/error/info/debugcalls are tagged with source:figma
Screenshot Format
- Formats: PNG (lossless), JPEG (with quality control)
- Encoding: Base64 for easy transmission
- Targets: Specific node IDs via the Plugin API (
figma.getNodeByIdAsync)