github / github/copilot-cli

MCP: Figma remote server (mcp.figma.com) fails to load — `-32601` on `server/discover` treated as fatal (works in VS Code)

Open
#4,870 1 comment 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

triage
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

Description

Figma MCP server fails to register tools — CLI marks it fatally failed on -32601 from server/discover

Summary

The Figma hosted MCP server (https://mcp.figma.com/mcp) authenticates and initializes
successfully, but the CLI never registers its tools. The CLI's discovery probe receives
-32601 Method not found, records it as a fatal server failure, and enters a
discover_and_start_root full-host-rebuild loop. Other HTTP MCP servers (e.g. MObbin) hit
the same discovery path but recover via "legacy initialize"; Figma's stricter -32601
response trips the fatal path, so Figma tools are never loaded.

Environment

  • GitHub Copilot CLI: 1.0.85 (Homebrew/npm install: /opt/homebrew/bin/copilot -> @github/copilot)
  • OS: macOS (arm64)
  • Figma MCP server negotiated protocol version: 2026-07-28 (fallback 2025-11-25)
  • Figma server advertises tools: tools: Some(ToolsCapability { list_changed: Some(true) })

Not the cause (ruled out)

  • Auth is fine. Logs show Successfully authenticated with figma; OAuth flow status success;
    valid client registration; keychain token present.
  • Endpoint is healthy. curl -i -X POST https://mcp.figma.com/mcp returns 401 with a
    valid www-authenticate OAuth challenge (scope="mcp:connect",
    authorization_uri="https://api.figma.com/.well-known/oauth-authorization-server").
  • Not fixed by enable/disable toggling, re-auth, or full CLI restart.

Observed log sequence (per retry cycle)

[WARNING] mcp::client: server/discover returned an unusable JSON response; retrying with legacy initialize
[INFO]    rmcp::service: Service initialized as client { protocol_version: "2026-07-28",
          capabilities: ... tools: Some(ToolsCapability { list_changed: Some(true) }) ... }
[INFO]    rmcp::service: serve finished { quit_reason: "Cancelled" }
[DEBUG]   rt_mcp::native_host: Recorded failure for server figma: MCP error -32601: Method not found.
[WARNING] copilot_runtime::session::mcp::agent_host: MCP error -32601: Method not found. { server: "figma" }
[DEBUG]   session::mcp::session_host: mcp discover_and_start_root { force: true }
[DEBUG]   session::mcp::session_host: mcp discover_and_start_root: full replace_host path
... loop repeats; figma transport worker crashes repeatedly:
[ERROR]   rmcp::transport::worker: worker quit with fatal: Transport channel closed,
          when Client(OAuthChallenge { ... mcp.figma.com ... status_code: 401 })

In one ~40s post-restart window: ~27 figma transport-worker crashes and ~14 full host rebuilds.

Root cause (hypothesis)

Figma upgraded its MCP server to protocol 2026-07-28, which returns a JSON-RPC
-32601 Method not found for the CLI's server/discover probe. CLI 1.0.85 treats that
-32601 on discovery as a fatal failure for the server (instead of falling back to legacy
initialize, as it does for a malformed/"unusable JSON" discover response). Because Figma is
marked failed, its tools are never registered, and the host is rebuilt in a loop.

Key differentiator: works in VS Code, fails in Copilot CLI (same endpoint)

The identical https://mcp.figma.com/mcp endpoint works in VS Code's MCP client but fails
in Copilot CLI. Standard MCP clients (VS Code, etc.) perform only the standard handshake
(initialize -> tools/list), which Figma answers correctly. Copilot CLI additionally issues
a non-standard server/discover probe first; Figma correctly returns -32601 Method not found for that unknown method, and the CLI records it as a fatal failure — even though its own
fallback initialize succeeds immediately after. This proves the issue is entirely client-side
(Copilot CLI), not an auth, config, network, or Figma-server problem.

Expected behavior

When server/discover returns -32601 Method not found, the CLI should fall back to the
standard initialize handshake (which succeeds here) and register the server's tools,
rather than recording a fatal failure and looping.

Suggested fix

Handle a -32601 response to server/discover the same way as an "unusable JSON" response:
retry with legacy initialize and continue, instead of marking the server fatally failed.

Workaround

Update to a newer CLI build that supports Figma's 2026-07-28 MCP protocol handshake.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Trace the CLI's MCP discovery path and compare handling of a server/discover -32601 Method not found response with the existing unusable-JSON fallback. Reproduce against https://mcp.figma.com/mcp, then verify that standard initialize registers the advertised tools without recording a fatal failure or rebuilding the host repeatedly.

Written by the indexing model from the issue text.

Assessment

Domain
api, cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.