[BUG] Figma MCP OAuth: state lost between turns on Windows

Status Open
Reported on v2.1.220
Maintainer reply None cached
Activity 1 comment · opened Jul 25, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Complete_authentication always returns 'No OAuth flow is in progress' on Windows because PKCE state is not persisted between conversation turns.

What Should Happen?

  • The PKCE OAuth state (code verifier + state parameter) generated by authenticate should be persisted to disk (e.g., in ~/.claude/) rather than stored only in memory. This way, when complete_authentication is called in the next conversation turn, the state is still available and the token exchange can complete successfully.
  • Alternatively, the local callback server on port 3118 (which already handles the browser redirect and shows "Authentication successful") should store the obtained token in .credentials.json AND clear the mcp-needs-auth-cache.json entry atomically, so that complete_authentication is not needed at all when the browser flow succeeds.

Error Messages/Logs

Steps to Reproduce

  1. Install Figma plugin: claude plugin install figma@claude-plugins-official
  2. Call mcp__plugin_figma_figma__authenticate → get authorization URL
  3. Open URL in browser → authorize on Figma → browser redirects to localhost:3118/callback → shows "Authentication successful"
  4. Paste callback URL back into Claude Code chat
  5. Call mcp__plugin_figma_figma__complete_authentication with callback URL

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.220 (Claude Code)

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Windows Terminal

Additional Information

_No response_

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗