Kimi code 用不了 Figma?看这里解决

一个 403 引发的血案

那天我在 Kimi Code 里配 Figma Remote MCP:

json 复制代码
{
  "mcpServers": {
    "figma": {
      "url": "https://mcp.figma.com/mcp"
    }
  }
}

然后执行 /mcp-config login figma。浏览器弹出来,授权,跳转......

javascript 复制代码
HTTP 403: Invalid OAuth error response: SyntaxError: Unexpected token 'F', "Forbidden" is not valid JSON. Raw body: Forbidden

连个 JSON 错误都懒得给,直接甩一个 Forbidden 字符串。

我在 Kimi Code 的 repo 提了个 issue #134,然后转头去查怎么回事。

不是 Bug,是门禁

Figma 的 Remote MCP Server(https://mcp.figma.com/mcp)使用 OAuth 2.0 with PKCE 进行认证。但它有一个关键限制:OAuth 动态注册的客户端名称必须在 Figma 的白名单(allowlist)中

目前谁在白名单里?OpenAI Codex 。这就是为什么 Codex CLI 的 codex mcp login figma 一路通畅------注册时 client_name: "Codex" 在 allowlist 里。

而其他 MCP 客户端(Kimi Code、OpenCode、Cline 等)注册时用的都是自己的名字,不在白名单中,Figma 直接返回 403 Forbidden

Figma 正在逐步开放 MCP,但到目前为止,通过 allowlist 限制已知客户端是他们的安全策略。相关的讨论和跟踪:

一个聪明(且合理)的"钻空子"

社区很快找到了一个优雅的 workaround:既然 Figma allowlist 只检查 client_name,那动态注册的时候把名字设成 Codex 不就行了?

OAuth 2.0 动态客户端注册(RFC 7591)允许客户端在注册时指定自己的名称。Figma 的 OAuth 端点的白名单逻辑只校验 client_name 字段,并不验证申请者是否真的是 Codex。一旦注册成功,access token 就是标准的 OAuth token------它不绑定到某个特定客户端工具。

这个发现最早出自 @connorads 的 opencode fork,然后被 @sdaoudi 封装成了独立的 CLI 工具 mcp-auth-helper,专门解决 Figma MCP 的认证问题。也有 pi-figma-remote-auth 这样的 Pi 扩展。

思路简单到极致------核心就改一个字符串:

typescript 复制代码
const reg = await fetch(meta.registration_endpoint, {
  body: JSON.stringify({
    client_name: "Codex",          // ← 关键:冒充 Codex
    redirect_uris: [callbackUri],
    grant_types: ['authorization_code', 'refresh_token'],
    token_endpoint_auth_method: 'none',
  }),
});

然后走标准的 PKCE 流程拿到 token,存本地。之后任何 MCP 客户端拿着这个 token 去连 Figma 都行------token 不校验来源。

等等,那为什么还要写个 CLI?

这里有个关键点:改 client_name 本身只是一行代码,但为了完成 OAuth 握手,你必须有一整套基础设施

  • 从 Figma 的 .well-known 端点发现 OAuth 配置
  • 动态注册客户端
  • 生成 PKCE code challenge
  • 启动一个本地 HTTP 服务器接收回调
  • 打开浏览器让用户授权
  • 接收授权码后交换 access token
  • 把 token 持久化到本地

这些事不属于任何 MCP 客户端的配置范畴------MCP 客户端的 OAuth 处理是内置的,不会让你覆盖 client_name。所以必须有一个独立于客户端之外的认证工具来做这件事。

mcp-auth-helper、pi-figma-remote-auth 都是干这个的。本质上它们不解决 Figma API 调用的问题,也不是 MCP Server 的替代品------它们只跑一次 OAuth,拿到 token,你的客户端拿着 token 去直连 mcp.figma.com 就好。

具体怎么用

目前有几套现成的工具:

figma-cli(推荐)

bash 复制代码
npm install -g @boltdoggy/figma

# 一键 OAuth 登录
figma auth oauth-login   # 自动打开浏览器完成 PKCE 授权

# 查看认证状态
figma auth status

# 启动 MCP 代理供 AI Agent 使用
figma mcp               # stdio 模式,把全部 Figma MCP 工具透传给 Agent

在 Claude Code 中配成 stdio MCP Server:

json 复制代码
{
  "mcpServers": {
    "figma": {
      "command": "npx",
      "args": ["-y", "@boltdoggy/figma", "mcp"]
    }
  }
}

也可以直接在终端调用 Figma MCP 工具,无需 Agent 中间层:

bash 复制代码
figma call get_screenshot --arg.fileKey=abc123 --arg.nodeId=1-2
figma call search_design_system --arg.fileKey=abc123 --arg.query=button

mcp-auth-helper

适合 OpenCode 用户,token 写入 OpenCode 默认路径:

bash 复制代码
git clone https://github.com/sdaoudi/mcp-auth-helper.git
cd mcp-auth-helper && npm install && npm run build
node dist/index.js auth figma --url https://mcp.figma.com/mcp

pi-figma-remote-auth

Pi 生态用户可以直接安装:

bash 复制代码
pi install npm:pi-figma-remote-auth
pi install npm:pi-mcp-adapter
/figma-remote-auth login

注意: Figma Remote MCP Server 目前仍处于 Beta 阶段。Starter 免费版账户每月限制 6 次 MCP 工具调用。OAuth token 有有效期,注意刷新。

一点思考

这个 workaround 巧妙的地方在于它不 hack 任何协议------OAuth 2.0 的动态注册就是这么设计的,Figma 的 allowlist 也是这么设计的,它只是把两个规范之间留出的灰色地带利用了一下。

Figma 如果真想堵这个洞,要么引入 client_id 签名验证,要么走应用审核流程。但话说回来,堵了之后没有 Codex 的用户用什么呢?所以可以理解这个 allowlist 更多是一个"君子协定"式的过渡方案。

不过在那之前,结果就是谁用谁知道。


相关项目:

相关推荐
冬奇Lab6 小时前
MCP 系列(08):企业治理——Registry、路由与可观测性
人工智能·llm·mcp
weigangwin6 小时前
agent-workspace-linux 不是远程桌面:Linux AI 工作区的隔离边界验收
linux·xvfb·mcp·桌面隔离·权限边界·bubblewrap·agent-workspace
码哥字节10 小时前
Anthropic 官方的 7 种 Claude Code 自定义方式,你可能只用对了 1 种
ai编程·claude·mcp
Flynt17 小时前
MCP让Claude连上外部世界,我踩了5个坑才跑通
ai编程·claude·mcp
MateCloud微服务19 小时前
从 prompt 直连反模式到企业 AI 中台:一次架构演进的完整拆解算力、模型、智能体、技能、MCP 五件套自持
人工智能·架构·prompt·架构设计·mcp·太一企业版·ai中台
To_OC1 天前
调用远程MCP,手搓一个能查酒店、自动打开浏览器的 Agent
人工智能·agent·mcp
To_OC1 天前
跑通第一个 MCP Server 后,我终于搞懂它到底解决了什么问题
人工智能·agent·mcp
阿宇的技术日志1 天前
Shell、Terminal、CLI 三者清晰区分
shell·cli·terminal
浮生望2 天前
远程 MCP 多 Server 编排:一个指令让 Agent 同时操控地图、浏览器和文件系统
mcp
冬奇Lab2 天前
MCP 系列(07):企业级部署——安全、认证与版本管理
人工智能·llm·mcp