Kimi code Figma mcp 403

10 阅读1分钟

1. 问题现象

~/.kimi-code/mcp.json 中配置了 Figma 远程 MCP:

{
  "mcpServers": {
    "figma": {
      "transport": "http",
      "url": "https://mcp.figma.com/mcp"
    }
  }
}

服务器显示 needs-auth,执行登录(如 /mcp-configmcp__figma__authenticate)后报错:

failed to start OAuth flow for "figma": HTTP 403: Invalid OAuth error response:
SyntaxError: Unexpected token 'F', "Forbidden" is not valid JSON. Raw body: Forbidden

浏览器授权页面根本不会弹出——请求在 OAuth 动态客户端注册(RFC 7591) 这一步就被拒了。

2. 根因

Figma 的 Remote MCP Server 使用 OAuth 2.0 + PKCE 认证,但对动态注册的客户端做了

client_name 白名单。目前白名单内只有 Codex(OpenAI Codex CLI 注册时用的名字),

这就是 codex mcp login figma 一路通畅的原因。

其他 MCP 客户端(Kimi Code、OpenCode、Cline 等)注册时发送自己的名字,不在白名单中,

Figma 的注册端点(https://api.figma.com/v1/oauth/mcp/register)直接返回 403。

Kimi Code 侧的情况(从其二进制确认):

  • 注册时固定发送 client_name: "kimi-code (<serverName>)"没有配置项可以修改

  • 因此无法通过配置绕过,只能在客户端外部完成 OAuth 流程,再把 token 交给 Kimi Code 使用。

3. 修复原理

社区(最早出自 @connorads 的 opencode fork,后由 @sdaoudi 封装为 mcp-auth-helper)发现:

  • Figma 的白名单只校验注册请求里的 client_name 字符串,并不验证申请者是否真的是 Codex;

  • RFC 7591 允许客户端在动态注册时自报名称,所以注册时填 client_name: "Codex" 即可通过;

  • 注册成功后拿到的是标准 OAuth token,不绑定具体客户端工具,任何 MCP 客户端都能使用。

于是修复思路为:在 Kimi Code 之外,以 Codex 之名手动跑一遍标准

"动态注册 → PKCE 授权码 → 换 token" 流程,然后把注册信息与 token 按

Kimi Code 原生的凭据格式写入它的凭据目录。Kimi Code 下次启动时会像对待自己完成的

登录一样读取这些凭据,包括后续的 refresh token 自动续期。

4. 快速修复(TL;DR)

前置条件:Node.js ≥ 18(用到全局 fetch),无需任何 npm 依赖;已按上文配置好 mcp.json

node figma-mcp-auth.mjs
  1. 脚本会自动打开浏览器(macOS;其他平台请手动复制输出的 AUTHORIZATION_URL= 之后的链接);

  2. 在浏览器中登录 Figma 并点击 Allow

  3. 看到 DONE 即成功,凭据已写入 ~/.kimi-code/credentials/mcp/

  4. 在 Kimi Code 中 /new 开新会话(或重启 kimi-code)——MCP 服务器在会话启动时加载,

figma 工具会以 mcp__figma__* 的形式出现。

环境变量:

  • KIMI_CODE_HOME:若你自定义了 Kimi Code 的数据目录,脚本会跟随该变量;

  • SERVER_NAME:必须与 mcp.json 里的服务器名一致(默认 figma)。改了名字的,

例如 "figma-remote": { ... },运行时用 SERVER_NAME=figma-remote node figma-mcp-auth.mjs

附件📎

- 修复脚本: figma-mcp-auth.mjs