Troubleshooting Guide
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:✅ One-time import. The plugin uses a bootloader architecture that dynamically loads the latest UI from the MCP server each time it opens. You never need to re-import the manifest when the MCP server updates — the bootloader handles it automatically.
- 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
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: As of v1.14.0, the server automatically cleans up orphaned MCP processes on startup and falls back to the next available port in the range 9223–9232. The bootloader plugin scans all ports automatically — no manual intervention needed.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. If you have many stale processes holding ports, restart Claude Desktop to clear them — the next MCP server startup will clean up any remaining orphans automatically.Plugin Shows “No MCP server found”
Cause: The bootloader scanned all ports and found no live MCP server. 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: Claude Desktop can leave orphaned MCP server processes running after tabs close (known Claude Desktop issue). Fix: As of v1.14.0, the server automatically detects and terminates orphaned figma-console-mcp processes on startup. If you need to manually clean up, run:lsof -i :9223-9232 | grep LISTEN to see what’s holding ports.
How the bootloader works: The Desktop Bridge plugin uses a thin bootloader that dynamically loads the full plugin UI from the MCP server each time it opens. Figma caches the bootloader (which never needs updating), and the actual UI code is always fetched fresh from the running server. This eliminates the need to re-import the manifest when the MCP server updates.
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.
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:
For Cloud Mode (Figma Web)
If you’re using cloud mode or need to navigate to a specific file:- Monitors main page console (Figma web app)
- Monitors all Web Worker consoles (Figma plugins)
- Automatically detects when workers are created/destroyed
- Merges all console logs into a single stream
- Tags logs with source:
'plugin','figma','page'
-
Check timing: Make sure you run the plugin AFTER navigating
-
Check worker count: Use
figma_get_status()to verify workers are detected -
Check log levels: Use
level: 'all'to ensure nothing is filtered
- Enumerate existing workers via
page.workers() - Listen for new workers via
page.on('workercreated') - Attach console listeners to each worker
- Tag worker logs with
source: 'plugin'
Issue: “Browser isn’t currently running”
Symptoms:- Error message: “The browser isn’t currently running”
figma_get_statusshowsbrowser.running: false
figma_navigate yet to initialize the browser.
Solution:
Always start with figma_navigate:
- Launches the headless Chrome browser
- Initializes console monitoring
- Navigates to your Figma file
browser.running: trueinitialized: trueconsoleMonitor.isMonitoring: true
https://figma-console-mcp.southleft.com, browser launch is handled automatically and should work without issues.
Issue: “Failed to retrieve console logs”
Symptoms:- Error: “Console monitor not initialized”
- Error: “Make sure to call figma_navigate first”
Issue: Screenshot Returns Empty Data
Symptoms:- Screenshot tool succeeds but image is blank
- Base64 data is present but doesn’t render
- Page hasn’t fully loaded yet
- Plugin UI isn’t visible
- Timing issue
'full-page'- Entire page including scrollable areas'viewport'- Currently visible area'plugin'- Plugin UI only (may need to be visible first)
Issue: No Console Logs Captured
Symptoms:figma_get_console_logs()returns empty array- Log count is 0
- Plugin hasn’t executed yet
- Plugin doesn’t produce console output
- Logs are being filtered out
Check Plugin Execution
Check Log Levels
Try different level filters:Check Timing
Issue: “Connection timed out” or Network Errors
Symptoms:- Claude Desktop shows connection timeout
- Tools take very long to respond
- Intermittent failures
- Cloudflare Workers cold start
- Browser initialization takes time
- Figma page load is slow
Allow More Time
The first call tofigma_navigate can take 10-30 seconds:
- Browser needs to launch
- Figma needs to load
- Console monitoring needs to initialize
Use figma_get_status
This is a lightweight call that doesn’t require browser initialization:Check Server Health
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 Navigate Firstfigma_navigatemust be the first call- It initializes everything
- Subsequent calls will fail without it
- Lightweight and fast
- Shows browser state
- Shows log count without retrieving logs
- Prevents old logs from mixing with new ones
figma_clear_console()orfigma_reload_plugin({ clearConsole: true })
- Browser launch takes time
- First navigation is slowest
- Subsequent operations are faster
- Error messages include helpful hints
- Often suggest the next step to try
- Include troubleshooting tips
Getting Help
If you’re still experiencing issues:-
Check Error Message Details
- Error messages include specific troubleshooting steps
- Follow the hints provided
-
Verify Deployment
-
Check Cloudflare Status
- Visit status.cloudflare.com
- Browser Rendering API status
-
Report Issues
- GitHub Issues: https://github.com/southleft/figma-console-mcp/issues
- Include error messages
- Include steps to reproduce
- Include figma_get_status output
Technical Details
Browser Session Lifecycle
-
First Call to figma_navigate:
- Launches Puppeteer browser (10-15s)
- Initializes console monitoring
- Navigates to Figma URL
- Starts capturing logs
-
Subsequent Calls:
- Reuse existing browser instance
- Much faster (1-2s)
- Logs accumulated in circular buffer
-
Session Timeout:
- Browser kept alive for 10 minutes
- After timeout, automatically relaunches on next call
Console Log Buffer
- Size: 1000 logs (configurable)
- Type: Circular buffer (oldest logs dropped when full)
- Capture: Real-time via WebSocket (Desktop Bridge Plugin)
- Source Detection: Automatically identifies plugin vs Figma logs
Screenshot Format
- Formats: PNG (lossless), JPEG (with quality control)
- Encoding: Base64 for easy transmission
- Targets:
full-page: Entire page with scrollable contentviewport: Currently visible area onlyplugin: Plugin iframe only (experimental)
Environment Variables
For local development or custom deployments:Advanced Configuration
Create~/.config/figma-console-mcp/config.json:
https://figma-console-mcp.southleft.com uses sensible defaults that work for most use cases.