Figma MCP Server
This server provides a bridge between Figma designs and React implementations, enabling design conversion, asset management, and direct interaction with Figma files and comments.
get_file_content: Fetches and processes Figma file content, converting layout (Flexbox), styles (CSS/styled-components), and component hierarchies into React-ready structures.
get_node_images: Retrieves image assets from Figma nodes with support for PNG, JPG, and SVG formats, plus scaling options.
add_figma_file: Loads a Figma file into your context by providing its URL.
view_node: Gets a thumbnail/preview for a specific node in a Figma file.
read_comments: Retrieves all comments on a Figma file.
post_comment: Posts a new comment on a Figma file at specific x/y coordinates, optionally pinned to a specific node.
reply_to_comment: Replies to an existing comment thread using its comment ID.
Enables pixel-perfect conversion of Figma designs into React applications by processing Figma file data, converting Figma styles to CSS/styled-components, handling image assets and SVG components, and translating Figma auto-layout to Flexbox.
Processes Figma design data into React-compatible format for direct implementation in React applications, providing React-ready component structures.
Converts Figma styles into compatible format for styled-components, enabling direct implementation of design styling in React applications.
Retrieves and processes SVG assets from Figma designs, supporting vector graphics integration in the resulting React components.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Figma MCP Serverget the React components from Figma file ABC123"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Figma MCP Server
A Model Context Protocol (MCP) server that provides a bridge between Figma designs and React implementations. This server enables pixel-perfect conversion of Figma designs into React applications by processing Figma file data and providing it in a React-friendly format.
🚀 Features
Figma API Integration: Direct connection to Figma's API for accessing design files
React-Ready Output: Processes Figma data into React-compatible format
Style Processing: Converts Figma styles to CSS/styled-components
Asset Management: Handles image assets and SVG components
Layout Processing: Converts Figma auto-layout to Flexbox
Type Safety: Built with TypeScript for reliable type checking
Related MCP server: MCP Figma to React Converter
🛠️ Tools Provided
get_file_content:Fetches and processes Figma file content
Converts layout, styles, and components
Returns React-ready component structure
{ fileKey: string; // Figma file key nodeId?: string; // Optional specific component ID }get_node_images:Retrieves image assets from Figma
Supports multiple formats (PNG, JPG, SVG)
Configurable scaling options
{ fileKey: string; // Figma file key nodeIds: string[]; // Component IDs to fetch format?: 'png' | 'jpg' | 'svg'; scale?: number; // 1-4 }
📦 Installation
Installing via Smithery
To install Figma Design to React Converter for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @sanjeev23oct/figma-mcp --client claudeManual Installation
Clone the repository:
git clone https://github.com/yourusername/figma-mcp.git cd figma-mcpInstall dependencies:
npm installConfigure your Figma access token:
cp .env.example .env # Add your Figma access token to .env
🎯 Cursor IDE Setup
Create the
.cursor/mcp.jsonfile in your project root:mkdir -p .cursor touch .cursor/mcp.jsonFor Stdio-based server configuration:
{ "mcpServers": { "figma": { "command": "node", "args": ["d:/<folder>>/figma-mcp/build/index.js"], "env": { "FIGMA_ACCESS_TOKEN": "your figma token" }, "disabled": false, "alwaysAllow": [], "protocol": "stdio" } } }
💻 Usage
Build the server:
npm run buildConfigure MCP settings based on your IDE:
For VS Code (global settings):
// In settings.json { "mcpServers": { "figma": { "command": "node", "args": ["path/to/figma-mcp/build/index.js"], "env": { "FIGMA_ACCESS_TOKEN": "your-token-here" } } } }For Cursor IDE: Use the
.cursor/mcp.jsonconfiguration as described in the "Cursor IDE Setup" section above. This configuration will take precedence over VS Code settings when using Cursor IDE.
Use the MCP tools in your application:
// Example: Fetch processed Figma content const result = await useMcpTool("figma", "get_file_content", { fileKey: "your-figma-file-key" });
🧩 Example Project
Check out the raccoon-game directory for a complete example of using this MCP server to create a pixel-perfect React implementation of a Figma design.
🔄 Processing Pipeline
Input: Figma file data through official API
Processing:
Style conversion (colors, typography, effects)
Layout transformation (absolute to Flexbox)
Component hierarchy mapping
Asset optimization
Output: React-ready component data
📝 License
MIT License
🤝 Contributing
Contributions welcome! Please read our contributing guidelines.
🙏 Acknowledgments
Figma API team for the comprehensive API
Model Context Protocol for the MCP specification
Check out my other project: https://github.com/sanjeev23oct/zap , light weight coding agent free from bloated system prompts built in rust with skill first approach.
Available Tools
5 toolsadd_figma_fileC
Add a Figma file to your context
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the Figma file to add |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It doesn't disclose behavioral traits like whether this is a read-only or mutative operation, if it requires authentication, what happens on failure, or how the file is added to context. The description is too brief to provide meaningful behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action, though it could be more structured by elaborating on 'context'. It earns its place but leaves room for improvement in clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what 'Add to your context' entails, the return value, or error handling. For a tool with potential complexity in file handling, this lacks necessary context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the 'url' parameter fully documented in the schema. The description adds no additional meaning beyond what the schema provides, such as URL format examples or constraints. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('Add') and resource ('a Figma file'), but it's vague about what 'to your context' means. It doesn't specify whether this imports, links, or loads the file, and it doesn't distinguish from siblings like 'view_node' or 'post_comment'. The purpose is understandable but lacks specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing a valid Figma URL, or when not to use it, like if the file is already in context. Without explicit or implied usage context, the agent must infer based on tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_commentC
Post a comment on a node in a Figma file
| Name | Required | Description | Default |
|---|---|---|---|
| file_key | Yes | The key of the Figma file | |
| node_id | No | The ID of the node to comment on. Node ids have the format `<number>:<number>` | |
| message | Yes | The comment message | |
| x | Yes | The x coordinate of the comment pin | |
| y | Yes | The y coordinate of the comment pin |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Post a comment') which implies a write operation, but fails to mention critical behavioral aspects like authentication requirements, rate limits, whether the comment is public or private, or how errors are handled. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It's front-loaded and perfectly concise, with every word earning its place in communicating the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't cover behavioral traits, error handling, return values, or usage context. While the schema covers parameters well, the overall context for safe and effective tool invocation is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 5 parameters thoroughly. The description adds no additional meaning beyond what's in the schema, such as explaining the relationship between node_id and x/y coordinates or formatting expectations for the message. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Post a comment') and the target ('on a node in a Figma file'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'reply_to_comment' or 'read_comments', which would require mentioning that this is for creating new top-level comments rather than replying or reading existing ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'reply_to_comment' or 'read_comments'. It also doesn't mention prerequisites, such as needing file access or node existence, leaving the agent to infer usage context without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_commentsC
Get all comments on a Figma file
| Name | Required | Description | Default |
|---|---|---|---|
| file_key | Yes | The key of the Figma file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool 'Get[s] all comments' but lacks details on permissions required, rate limits, pagination, error handling, or what 'all' entails (e.g., if it includes nested replies). This is inadequate for a read operation with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't address behavioral aspects like authentication needs, response format, or error cases, which are critical for a read operation. The conciseness comes at the cost of necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-specific information beyond what the schema provides (100% coverage). It mentions 'a Figma file' which aligns with the 'file_key' parameter but doesn't explain format, sourcing, or constraints. With high schema coverage, the baseline of 3 is appropriate as the schema handles documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get all comments') and target resource ('on a Figma file'), providing a specific verb+resource combination. However, it doesn't differentiate this tool from potential sibling tools like 'view_node' or 'post_comment' that might also interact with Figma file comments, missing explicit distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., file access), exclusions, or compare it to siblings like 'post_comment' or 'reply_to_comment', leaving the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_commentC
Reply to an existing comment in a Figma file
| Name | Required | Description | Default |
|---|---|---|---|
| file_key | Yes | The key of the Figma file | |
| comment_id | Yes | The ID of the comment to reply to. Comment ids have the format `<number>` | |
| message | Yes | The reply message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Reply to') but doesn't cover critical traits like required permissions, whether this is a mutation (implied but not explicit), rate limits, error conditions, or response format. This leaves significant gaps for a tool that likely modifies data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with no annotations and no output schema), the description is incomplete. It lacks behavioral context (e.g., permissions, effects), usage guidelines, and any information about return values or errors, which are essential for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters (file_key, comment_id, message). The description adds no additional meaning beyond what the schema provides, such as format details or usage examples, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Reply to') and target ('an existing comment in a Figma file'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'post_comment' (which might create new comments) or 'read_comments' (which reads them), missing explicit sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing comment), exclusions, or compare to siblings like 'post_comment' for new comments or 'read_comments' for viewing, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_nodeC
Get a thumbnail for a specific node in a Figma file
| Name | Required | Description | Default |
|---|---|---|---|
| file_key | Yes | The key of the Figma file | |
| node_id | Yes | The ID of the node to view. Node ids have the format `<number>:<number>` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves a thumbnail, implying a read-only operation, but does not mention potential side effects, authentication needs, rate limits, or what happens if the node or file does not exist. This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words or fluff. It is front-loaded with the core action and resource, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a read operation with two required parameters) and the absence of annotations and output schema, the description is insufficient. It does not explain what the thumbnail output looks like (e.g., image format, size), error conditions, or how it interacts with the Figma API, leaving the agent with incomplete context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear documentation for both parameters ('file_key' and 'node_id'), including the format for node_id. The description adds no additional parameter details beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a thumbnail') and resource ('for a specific node in a Figma file'), making the purpose unambiguous. However, it does not explicitly differentiate this tool from sibling tools like 'add_figma_file' or 'read_comments', which serve different purposes, so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives or in what context it is appropriate. It lacks any mention of prerequisites, such as needing an existing Figma file or node, or exclusions, leaving the agent to infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose targeting specific actions in Figma: adding files, posting comments, reading comments, replying to comments, and viewing nodes. There is no overlap in functionality, making it easy for an agent to select the correct tool without confusion.
The naming follows a consistent verb_noun pattern (e.g., add_figma_file, post_comment) with clear and descriptive names. The only minor deviation is 'view_node' which uses 'view' instead of a more action-oriented verb like 'get', but it still fits the pattern well and remains readable.
With 5 tools, the server is well-scoped for its purpose of interacting with Figma files, comments, and nodes. Each tool serves a distinct and necessary function, avoiding bloat while covering essential operations like file management and comment handling.
The toolset covers core workflows for Figma interactions, including file addition, comment management (post, read, reply), and node viewing. A minor gap is the lack of tools for updating or deleting files or comments, but agents can still perform basic operations effectively without major dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
Build and manage your design system with AI: tokens, themes, components, icons, Figma and code.
Live React design-system APIs, patterns, and code validation so AI agents build real UI, not slop.
Turn any live website into brand colors, fonts, design tokens, SVGs, Lottie and paste-ready code.
Related MCP Servers
- AlicenseCqualityDmaintenanceConverts Figma designs to React Native components, allowing users to extract components from Figma designs and generate corresponding React Native components with proper typing and styling.3318MIT
- AlicenseNot gradedqualityDmaintenanceConverts Figma designs into React components with TypeScript and Tailwind CSS by extracting components from Figma files and transforming them into ready-to-use code.77MIT
- FlicenseNot gradedqualityDmaintenanceConnects AI applications to Figma API for extracting design data, generating production-ready HTML/CSS from designs, and capturing screenshots in multiple formats.2,160
- AlicenseAqualityDmaintenanceConverts Figma designs into production-ready React components with design token extraction, widget registry integration, and micro-frontend module generation.3931MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sanjeev23oct/figma-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server