Bug: Figma plugin's Cloud MCP shows "Connected" but no MCP client is instantiated, so no figma-* tools are available to agents

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Settings → Tools → Cloud → Figma shows “Connected” with a fresh OAuth token. The plugin’s skills (figma-use, figma-create-new-file, etc.) are correctly cached and surfaced via <plugin_info> system reminders to agents. However, no figma-* MCP tools are ever exposed to agents. Any agent call to e.g. figma-whoami returns Tool execution error. Tool figma-whoami not found, available tools: … and the available tools list contains no figma-* entries.

Steps to Reproduce

  1. Open Cursor 3.3.16 (or later) on macOS with a Figma account available.

  2. Open Settings → Tools → Cloud.

  3. Click Add MCP (or the equivalent in your build) and select the Figma plugin.

  4. Complete the Figma OAuth flow in the browser; return to Cursor.

  5. Confirm the Figma row in the Cloud panel shows “Connected” with a green status dot, and the toggle is on.

  6. Open a new agent chat in any workspace, with any model that supports MCP tool calls.

  7. Ask the agent (or trigger programmatically via CallMcpTool) any figma-* tool — figma-whoami is the simplest:

     Call the figma whoami MCP tool with no arguments.
    
  8. Observe the response.

  9. (Optional, for confirmation) On the user’s machine, inspect the most recent Cursor session log:

     LATEST=$(ls -dt ~/Library/Application\ Support/Cursor/logs/* | head -1)
     grep createClient "$LATEST"/window*/workbench.mcp.allowlist.log
    

Expected Behavior

  • Step 7: the agent successfully calls figma-whoami and receives the user’s plan list (the Figma whoami MCP response).

  • Step 9: the createClient grep returns a line for Figma (e.g. createClient: identifier="plugin-figma-figma", serverName="figma"), parallel to the existing Firebase line for users with the Firebase plugin connected.

Operating System

MacOS

Version Information

3.3.16 (commit d3a7897d2f9fafe337ec9b067831a6cade914773d823f28250c50dbf4be3429c)

Additional Information

  • Step 7: the agent reports Tool execution error. Tool figma-whoami not found, available tools: ..., and the printed tool list contains zero figma-* entries (other plugin MCPs such as plugin-firebase-firebase-* ARE present).

  • Step 9: the createClient grep returns lines for every other connected MCP (user-context7, user-dart, user-codacy, plugin-firebase-firebase) but no line for Figma at all.

  • This persists across all of the workarounds listed below.

Diagnostic evidence

From ~/Library/Application Support/Cursor/logs/<session>/window<N>_<wb>/workbench.mcp.allowlist.log after a fresh app launch:

12:05:15 createClient: identifier="user-context7",            serverName="context7"
12:05:15 createClient: identifier="user-dart",                serverName="dart"
12:05:15 createClient: identifier="user-codacy",              serverName="codacy"
12:05:20 createClient: identifier="plugin-firebase-firebase", serverName="firebase"

Firebase, which uses the same Cloud-MCP-via-plugin architecture as Figma, registers correctly. Figma never appears in createClient at all — not as plugin-figma-figma, not under any other identifier. The OAuth log (workbench.mcp.oauth.log) shows the expected none → initializing → error → connected state-machine transitions for Firebase but zero state transitions for Figma.

When the agent attempts a Figma tool call, the permissions service correctly evaluates the request as allowed (shouldBlockMcp: ALLOWED (auto-run, no team block)), but the call fails because no MCP client is registered to route it to.

Things tried (all failed to fix)

  • Toggling Figma off/on in the Cloud panel.

  • Removing and re-adding the Figma MCP plugin in Cursor.

  • Logout + Login from the Cloud panel’s Figma row.

  • Revoking the “Cursor MCP Client” OAuth grant from Figma’s account settings (https://www.figma.com/settings), then re-OAuthing from Cursor.

  • Full Cursor quit (⌘Q) + relaunch.

After each attempt, the result was identical: Cloud panel shows “Connected”, no createClient line for Figma, no figma-* tools available to agents.

Diagnosis

The bug is at the layer where Cursor’s plugin loader translates a connected Cloud-MCP plugin entry into an MCP service createClient call. The Figma plugin entry is silently dropped at that step. Firebase, which uses the same architecture, works.

Does this stop you from using Cursor

No - Cursor works, but with this issue

This is a well-documented bug report, thanks for the thorough diagnostics. The core issue is clear: the Figma plugin’s OAuth flow completes (showing “Connected”), but the MCP client is never instantiated, so no tools are available.

To help us narrow down exactly where the pipeline breaks, could you run a couple of diagnostics?

1. Check if the Figma plugin has a valid MCP config file:

# Find the Figma plugin install directory and check for mcp.json
find ~/Library/Application\ Support/Cursor/User/globalStorage -path "*figma*" -name "*.json" 2>/dev/null | grep -i mcp

If no mcp.json or .mcp.json is found in the Figma plugin directory, that confirms the config is missing (which would explain why tools never appear).

2. Check the Cursor Agent output channel for plugin load errors:

Go to View > Output, then select Cursor Agent from the dropdown. Look for any lines mentioning “figma” or “plugin” around startup time. If available, also check the MCP Logs channel.

3. Check if the Figma plugin directory exists and what it contains:

ls ~/Library/Application\ Support/Cursor/User/globalStorage/cursor-plugins/*/figma* 2>/dev/null || \
ls ~/Library/Application\ Support/Cursor/User/globalStorage/*/figma* 2>/dev/null

This will help confirm whether the plugin installed correctly with all required files.

In the meantime, one thing worth trying: uninstall the Figma plugin completely (remove it from Settings > Tools > Cloud), restart Cursor, then reinstall it fresh from the marketplace. The issue may be a corrupted or incomplete initial clone of the plugin package.

Steps completed: uninstalled, full Cursor restart, reinstalled fresh from the marketplace, re-OAuthed. Bug reproduces identically. New session log (20260507T172242) shows the same BackendMarketplaceClient: Adding enabled plugin: figma … at undefined line, while Firebase loaded in the same call shows at .. No figma-* tools available to agents; figma-whoami returns Tool not found.

Updated diagnostic report (with the workaround test result appended) is below. The corruption appears to be in the marketplace record for the Figma plugin’s path field, the local reinstall just re-fetched the same broken record.

Found the smoking-gun line in ~/Library/Application Support/Cursor/logs/<session>/window<N>_<wb>/exthost/anysphere.cursor-agent-exec/Cursor Plugins.<timestamp>.log:

17:17:29.237 [info] BackendMarketplaceClient: Adding enabled plugin: figma    from 3590366424deba5651026319b71b291d10004f1b at undefined
17:17:29.237 [info] BackendMarketplaceClient: Adding enabled plugin: firebase from bec78e7dace12670b3b3c5c63d7124cca5c2c8c9 at .

For Firebase the marketplace record has at . (a valid path). For Figma it’s at undefined. The absence of this field causes downstream MCP client instantiation to silently fail.

The plugin cache itself loads correctly:

loadFromMarketplaceSource: Found cached plugin: figma at /Users/[username]/.cursor/plugins/cache/cursor-public/figma/3590366424deba5651026319b71b291d10004f1b

…and the plugin’s skills side registers all 19 skills (CursorPluginsAgentSkillsService load completed: ruleCount=19, skillCount=19). The failure is specifically at the MCP-server registration step, which depends on the path field that is undefined for Figma.

Confirming corollary in Mcp FileSystem Writer.<timestamp>.log: fetchAndWrite: lease returned 80 tools across 6 clients — the six being cursor-app-control, cursor-ide-browser, user-context7, user-dart, user-codacy, plugin-firebase-firebase. Figma is not the seventh because no client is ever instantiated.

Other diagnostics that came back as expected per your suggestions:

  • find ~/Library/Application Support/Cursor/User/globalStorage -path "*figma*" -name "*.json" | grep -i mcp → empty (no mcp.json for Figma anywhere in globalStorage; no figma-related files at all in globalStorage).

  • ls ~/Library/Application Support/Cursor/User/globalStorage/cursor-plugins/*/figma* → “no matches” (path doesn’t exist).

  • ls ~/Library/Application Support/Cursor/User/globalStorage/*/figma* → “no matches” (path doesn’t exist).

  • The plugin actually lives at ~/.cursor/plugins/cache/cursor-public/figma/<hash>/, where the only contents are skills/ and .git/. No mcp.json, no manifest.json, no package.json.

The Firebase plugin cache, by contrast, contains a .mcp.json at its root (declaring command: npx, args: [-y, firebase-tools@latest, mcp, --dir, .]), which is presumably what at . in the BackendMarketplaceClient: Adding enabled plugin: firebase … at . log line refers to. The Figma plugin cache has no .mcp.json, no .cursor-plugin/, no manifest of any kind — only skills/, .git/, and an empty .cache-complete marker. The marketplace tarball for the Figma plugin appears to be shipping an incomplete payload (skills only, no MCP-server declaration), which is why the path field is undefined and why no MCP client is ever instantiated.

Thanks for the thorough diagnostics. We were able to reproduce and confirm the issue.

Your plugin cache has an incomplete install that persists across uninstall/reinstall cycles. To fix it, delete the stale cache and reinstall:

rm -rf ~/.cursor/plugins/cache/cursor-public/figma/

Then restart Cursor and reinstall the Figma plugin from Settings > Tools > Cloud.

I’ve filed a bug for the underlying issue — uninstalling a plugin should clear its cache so reinstalls start fresh.

This has been resolved. It looked like there was a new option in settings (after a restart/update) to enable Figma for each local repo, instead of just in Cloud mode. Switching it on for the local repo worked.

Glad to hear it’s working! The per-repo toggle you found is separate from the Cloud mode connection, so that’s a good alternative path.