An MCP request crosses stdio, WebSocket, and the Figma plugin. If every failure became an empty response or generic error, users could not tell whether to fix setup, connection, or selection.
Claude Code, Windsurf, and Codex use different MCP registration and runtime setups. User-correctable states such as Figma not running, no selection, and multiple client connections also needed to remain distinguishable.
The team implementation kept disconnected, empty-selection, and multi-client states distinct. I reproduced real calls in each client and documented Codex setup and verification steps in the README.
- Reviewed server-to-plugin failure categories with the team.
- Reproduced registration and tool calls in Claude Code, Windsurf, and Codex.
- Documented global versus project Codex setup.
I verified real tool calls in Claude Code, Windsurf, and Codex and recorded reproducible steps in the public README. Automated tests for connection-failure scenarios are not yet in place.
I learned that an integration tool needs failure contracts that guide the user's next action, not only a successful response.