Skip to content

docs: record why Figma MCP is blocked in the CI rail but works on the box - #33

Open
mcarter-astronautdev wants to merge 1 commit into
mainfrom
docs/figma-mcp-ci-blocked
Open

docs: record why Figma MCP is blocked in the CI rail but works on the box#33
mcarter-astronautdev wants to merge 1 commit into
mainfrom
docs/figma-mcp-ci-blocked

Conversation

@mcarter-astronautdev

Copy link
Copy Markdown
Member

Adds docs/figma-mcp-in-ci.md. Docs only — no reusable changes, no tag, no wave.

Closes out the "add Figma MCP to --allowedTools in claude.yml" to-do as not doable, and records why so it isn't re-researched.

Why it can't be done

Three findings, each verified against primary sources rather than inferred:

  1. Headless is not credential-less. A claude -p run can't complete a first-time OAuth consent, but it reuses one already completed. Confirmed by calling mcp__figma__whoami against the remote server headlessly — real identity and seat returned, no personal access token anywhere. This is why the box works.
  2. Account connectors never reach CI. They're gated on the user:mcp_servers OAuth scope, and claude setup-token is inference-only by design. The docs say it outright: CLAUDE_CODE_OAUTH_TOKEN "can only make model requests, so it can't ... fetch claude.ai connectors." The ANTHROPIC_API_KEY fallback is excluded by a separate precedence rule. Both of claude.yml's auth paths are therefore closed.
  3. The remaining path needs a credential Figma won't issue. An explicit --mcp-config entry needs a static token. mcp.figma.com is OAuth-only; Figma Support has said PAT auth "cannot be enabled" — a refusal, not a gap. Plan Access Tokens authenticate against the REST API only.

Also notes that --allowedTools only permits a tool and never provides one — mcp__github_inline_comment__* works only because the action bundles that server and prefix-checks the allow-list to decide whether to install it.

What the doc is careful about

  • The box gets Figma as a claude.ai account connector, so the prefix is mcp__claude_ai_Figma__, not mcp__figma__. Adding a local ~/.claude.json entry there would grant nothing and fail silently — the 2026-07-09→15 outage shape. The doc says don't.
  • driver-bonsai-mcp/pipeline/triage.job.env withholds CLAUDE_CODE_OAUTH_TOKEN deliberately for exactly the reason in finding 2. Worth not "tidying" later.
  • Design→code is already solved by capturing Figma context into the issue body at triage — see the "Figma-bearing tickets" section of orchestrator.md. This doc is just the fleet-side record of why claude.yml carries no Figma wiring.

Why claude.yml is untouched

Editing it puts all 23 repo@branch pairs out of content parity and turns tools/fleet-pin-audit.sh --stale red fleet-wide until a re-copy wave — a real wave for a comment. The doc suggests letting a one-line caveat ride along with the next edit that needs a wave anyway (the queued canonical-blockquote re-copy + DRIVER_AGENTS_REF bump).

Re-open tripwire

Only if Figma ships non-interactive auth for mcp.figma.com. The doc records the exact wiring for that day — inline JSON only (a file path is silently dropped when the action contributes its own inline config), read tools only, and the lint.yml quote gate moving 4 → 6.

Separates two environments that fail for different reasons, and records why the
implementer rail is the one that cannot have it.

The box: a headless `claude -p` is not credential-less. It cannot complete a
first-time OAuth consent, but it reuses one already completed. Verified —
mcp__figma__whoami against the remote server returned a real identity and seat,
headless, no personal access token. The production box gets Figma a second way,
as a claude.ai account connector on the agents' account, which is why its prefix
is mcp__claude_ai_Figma__ and why driver-bonsai-mcp/pipeline/triage.job.env
deliberately withholds CLAUDE_CODE_OAUTH_TOKEN. Adding a local ~/.claude.json
entry there would grant nothing and fail silently.

The CI rail: account connectors are gated on the user:mcp_servers OAuth scope,
and `claude setup-token` is inference-only by design — the docs state that
CLAUDE_CODE_OAUTH_TOKEN "can only make model requests, so it can't ... fetch
claude.ai connectors." The ANTHROPIC_API_KEY fallback is excluded by a separate
precedence rule. A fresh runner also has no credential store, and the remaining
path (explicit --mcp-config) needs a static credential Figma will not issue.

Design->code is already solved by capturing Figma context into the issue body at
triage, which orchestrator.md implements; this doc is the fleet-side record of
why claude.yml carries no Figma wiring.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant