Skip to content

MCP server

cyber-figma ships a stdio MCP server in the same package as the CLI. Both call the same core operations, so nothing is MCP-only or CLI-only.

Set your authentication variables — FIGMA_ACCESS_TOKEN, and optionally FIGMA_TEAM_ID — in the environment that launches the server.

Install cyber-figma in the project that hosts your agent (Installation). The host spawns a child process and talks MCP over stdio.

Context command args
Project dependency node ["-e", "import('cyber-figma/mcp')"]
Project dependency (bin) cyber-figma ["mcp"]
Ephemeral (npx) npx ["-y", "cyber-figma", "mcp"]

Tools return JSON by default. Set CYBER_FIGMA_MCP_FORMAT=toon in the server’s env to emit token-efficient TOON instead. Formatting is applied centrally, so it is consistent across every tool.

OS Config file
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
Windows %APPDATA%\Claude\claude_desktop_config.json
Linux ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"cyber-figma": {
"command": "node",
"args": ["-e", "import('cyber-figma/mcp')"],
"env": {
"FIGMA_ACCESS_TOKEN": "<your-token>",
"FIGMA_TEAM_ID": "<team-id>"
}
}
}
}

User or local scope — recommended for a personal token:

Terminal window
claude mcp add -e FIGMA_ACCESS_TOKEN=<your-token> -e FIGMA_TEAM_ID=<team-id> cyber-figma -- \
node -e "import('cyber-figma/mcp')"

Project scope — commit .mcp.json in the repo root:

{
"mcpServers": {
"cyber-figma": {
"command": "node",
"args": ["-e", "import('cyber-figma/mcp')"],
"env": {
"FIGMA_ACCESS_TOKEN": "${FIGMA_ACCESS_TOKEN}",
"FIGMA_TEAM_ID": "${FIGMA_TEAM_ID}"
}
}
}
}

Verify with claude mcp list. Use /mcp in a session to reconnect without restarting.

User-wide: ~/.cursor/mcp.json. Project-specific: .cursor/mcp.json in the repo root. Agent mode is required for tool use. The JSON shape matches Claude Desktop’s.

Add to ~/.codex/config.toml:

[mcp_servers.cyber-figma]
command = "node"
args = ["-e", "import('cyber-figma/mcp')"]
[mcp_servers.cyber-figma.env]
FIGMA_ACCESS_TOKEN = "<your-token>"
FIGMA_TEAM_ID = "<team-id>"

Debug tools and schemas without an agent host:

Terminal window
npx @modelcontextprotocol/inspector \
-e FIGMA_ACCESS_TOKEN=<your-token> \
-- npx -y cyber-figma mcp

Tools are named figma_<resource>_<action> — for example figma_file_get, figma_comment_list, figma_webhook_create.

Namespace Planned tools cover Status
figma_file_* File JSON, node JSON, image rendering, image fills, metadata, versions 📋 Planned
figma_project_* Team projects, project metadata, project files 📋 Planned
figma_comment_* Comments and comment reactions 📋 Planned
figma_user_* The authenticated user 📋 Planned
figma_component_* / figma_component_set_* / figma_style_* Published library content 📋 Planned
figma_webhook_* Webhooks v2 📋 Planned
figma_variable_* Variables (Enterprise) 📋 Planned
figma_dev_resource_* Dev Mode resource links 📋 Planned
figma_analytics_* Library Analytics (Enterprise) 📋 Planned
figma_activity_log_* / figma_developer_log_* / figma_ai_usage_* / figma_discovery_* Org-admin reporting (Enterprise) 📋 Planned
figma_payment_* Purchase validation 📋 Planned
figma_oembed_* oEmbed metadata 📋 Planned

List tools accept the shared pagination parameters wherever Figma supports paging. See API coverage for why that needs normalizing at all.

Figma ships its own MCP server, which per Figma’s scopes documentation “handles its own OAuth authentication flow — you don’t configure REST API scopes for it”, and whose access is limited to clients listed in the Figma MCP Catalog (with a waitlist for new clients).

cyber-figma’s MCP server is a different thing: a local REST API wrapper using REST API credentials. It is not a client of Figma’s MCP server, and the two can be installed alongside each other — the config keys differ, and so do the tool names.

One thing worth knowing if your org audits API usage: Figma’s Developer Logs cover both REST API and MCP server requests.