figma-extras-mcp
v1.1.0
Published
MCP server wrapping Figma's comment + reaction REST endpoints. Works with Claude Code, Codex CLI, Gemini CLI, opencode, and any stdio MCP host.
Readme
figma-extras-mcp
A small MCP server wrapping the Figma REST endpoints the official Figma MCP doesn't expose — mostly file-comments + reactions, plus a me sanity check.
Works with Claude Code, Codex CLI, Gemini CLI, opencode, and any stdio MCP host. Published to npm so the install is one line.
Tools
| Tool | Wraps |
| ------------------------ | ------------------------------------------------------- |
| me | GET /v1/me — sanity check the token |
| list_comments | GET /v1/files/:key/comments + filters + compact shape |
| post_comment | POST /v1/files/:key/comments (top-level or reply) |
| delete_comment | DELETE /v1/files/:key/comments/:id |
| list_comment_reactions | GET /v1/files/:key/comments/:id/reactions |
| react_to_comment | POST /v1/files/:key/comments/:id/reactions |
list_comments accepts a file key OR a full Figma URL (figma.com/design/<key>/... or figma.com/board/<key>/...) — the key is extracted automatically. Supports top_level_only, author_handle, node_id, since, and compact filters so heavy files (hundreds of comments) don't overflow MCP token limits.
Setup
1. Generate a Figma Personal Access Token
https://www.figma.com/settings/dev/personal-access-tokens
- Name it something like
figma-extras-mcp - Scopes: at minimum
file_comments:read+file_comments:write. The default "full access" is also fine. - Copy the
figd_…value — you won't see it again.
2. Register the server in your MCP host
Same stdio command across all hosts: bunx -y figma-extras-mcp. Only the registration syntax differs.
Claude Code
claude mcp add figma-extras --env FIGMA_TOKEN=figd_… -- bunx -y figma-extras-mcpCodex CLI
codex mcp add figma-extras --env FIGMA_TOKEN=figd_… -- bunx -y figma-extras-mcpGemini CLI
gemini mcp add figma-extras --env FIGMA_TOKEN=figd_… -- bunx -y figma-extras-mcpopencode
opencode has no mcp add CLI — add this block to your opencode config:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"figma-extras": {
"type": "local",
"command": ["bunx", "-y", "figma-extras-mcp"],
"environment": { "FIGMA_TOKEN": "figd_…" }
}
}
}Manual (any stdio MCP host)
If your host uses the common Claude-style config shape, add this to its mcpServers section:
"figma-extras": {
"type": "stdio",
"command": "bunx",
"args": ["-y", "figma-extras-mcp"],
"env": { "FIGMA_TOKEN": "figd_…" }
}3. Restart your MCP host
Tools appear under mcp__figma-extras__* (Claude naming; other hosts vary). Sanity check:
mcp__figma-extras__meShould return your Figma user info.
Keeping the token out of config files (optional)
The env block above stores your PAT in plain text inside the host's config (~/.claude.json, opencode.json, etc.). Those files often get backed up to iCloud / Dropbox / source control — not great for a long-lived API token.
The cleanest fix is to wrap the launch command with 1Password CLI so the token is resolved from your 1Password vault at process-start instead. Steps:
Install + sign in to
op:brew install 1password-cli && op signin.Save your Figma PAT in 1Password as a credential. Note the vault name + item title + field name (default field is
credential).Create an env-file referencing the item (no real secret in it — safe to keep on disk):
mkdir -p ~/.config/figma-extras-mcp cat > ~/.config/figma-extras-mcp/.env.op <<'EOF' FIGMA_TOKEN=op://<vault>/<item title>/credential EOFSwap the host registration to launch under
op run(Claude example shown — adapt the wrapper for other hosts):claude mcp add figma-extras -- \ op run \ --account=<your-1password-account-shorthand-or-domain> \ --no-masking \ --env-file=$HOME/.config/figma-extras-mcp/.env.op \ -- bunx -y figma-extras-mcpOr directly in
~/.claude.json:"figma-extras": { "type": "stdio", "command": "op", "args": [ "run", "--account=<your-1password-account>", "--no-masking", "--env-file=/Users/<you>/.config/figma-extras-mcp/.env.op", "--", "bunx", "-y", "figma-extras-mcp" ], "env": {} }--no-maskingis required — without itop runredacts the resolved token in stdout, which would corrupt the MCP protocol stream.--accountis only needed if you have multiple 1Password accounts signed in.Restart your MCP host. The token is fetched fresh from 1Password each time the server boots. If your
opsession expires, the MCP fails to start until youop signinagain.
The same pattern works with aws ssm get-parameter, gcloud secrets versions access, pass, or any secret-fetching CLI — just swap op run --env-file=... for the equivalent wrapper.
Updating
bunx -y fetches the latest version from npm on each host startup. No explicit update step. Pin to a specific version if you need stability:
bunx -y [email protected]Local development
git clone [email protected]:steve-rodri/figma-extras-mcp.git
cd figma-extras-mcp
bun install
FIGMA_TOKEN=figd_… node index.jsThen point your MCP host at the local path instead of the published bunx spec.
License
MIT.
