Skip to content

Troubleshooting

Start with csharp_diagnose: it reports the active configuration, whether the bridge is listening, which files have a live plugin session, the state of the snapshot cache and any closed quota buckets.

"The plugin is not connected"

Every write tool and every plugin-first read needs a running plugin in that file. Open the file in Figma Desktop and start Plugins → Development → Snail Bridge, then check figma_get_status. The plugin attaches to every server it finds on the port range, so another instance cannot steal the connection; if the server still does not see it, check the plugin's status pill and log panel — see Plugin setup.

ERR_CONNECTION_REFUSED lines in the DevTools console

Chrome prints its own net::ERR_CONNECTION_REFUSED line for every probe of a closed port — no JavaScript can suppress it. With at least one live connection the plugin does not probe at all, so a quiet console is the normal connected state. The lines appear only while no server is running: every 3 seconds for the first half minute after the plugin loads (or after the last server goes away), then once per 30 seconds. That is the discovery loop waiting for a server to start, not a failure — the Pause button silences it completely.

Reads return source: "cache-stale"

Figma was unreachable — usually the quota — so the last known snapshot was served instead of failing. The content may be older than the file. Force a fresh read with source: "plugin" when the plugin is running.

429 and a Retry-After of many hours

A daily plan quota, not a burst limit. The endpoint bucket is closed locally until it expires and further requests are refused without touching the network; csharp_diagnose lists the closed buckets under rateLimit. Renders live in the same expensive bucket, so during a block take pictures through the plugin — figma_take_screenshot or figma_get_component_image with a live session.

Variables come back as 403

The Figma Variables REST API is Enterprise-only. Read variables through the plugin instead (figma_get_token_values, or figma_get_variables with a live session) — that works on any plan.

The server reports an old state after a rebuild

A running process keeps the assembly it started with. Restart the MCP server in your client; figma_reconnect and figma_reload_plugin only restart the plugin inside Figma, not the server process.

Nothing works and stdout looks wrong

The server speaks JSON-RPC over stdio, so nothing but protocol messages may reach stdout; logs go to stderr. If a client reports a parse error, capture stderr and check for a stray write. The repository guards this with StdioContractTests, which runs the built server as a real process and fails on the first non-JSON line.