figma mcp

Local 2025-09-01 00:03:01 0

Allow your AI coding agents to access Figma files & prototypes directly. You can DM me for any issues / improvements: https://x.com/jasonzhou1993

1. Access all figma pages
2. Access all figma components
3. Access figma prototype flows


PyPI version

Allow your AI coding agents to access Figma files & prototypes directly. You can DM me for any issues / improvements: https://x.com/jasonzhou1993

figma-mcp MCP server

Quick Installation with pipx

pipx install figma-mcp

For Cursor:

  1. In settings, add an MCP server using the command:

    figma-mcp --figma-api-key=your_figma_key

  2. OR Add a .cursor/mcp.json file in your project:

{
  "mcpServers": {
    "figma-python": {
      "command": "figma-mcp",
      "args": [
        "--figma-api-key=your_figma_key"
      ]
    } 
  }
}

For other IDEs like Windsurf, use an MCP configuration file (e.g., mcp_config.json):

{
  "mcpServers": {
    "figma-python": {
      "command": "figma-mcp",
      "args": [
        "--figma-api-key=your_figma_key"
      ]
    } 
  }
}

Install uv and set up the environment

curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv
source .venv/bin/activate
uv sync

Test locally

python -m figma_mcp.main
[
  {
    "description": "Get components available in a Figma file          Args:             file_key (str): The file key found in the shared Figma URL          Returns:             list[dict]: List of components found in the Figma file         ",
    "inputSchema": {
      "properties": {
        "file_key": {
          "title": "File Key",
          "type": "string"
        }
      },
      "required": [
        "file_key"
      ],
      "title": "get_componentsArguments",
      "type": "object"
    },
    "name": "get_components"
  },
  {
    "description": "Get a specific node from a Figma file          Args:             file_key (str): The file key found in the shared Figma URL, e.g. if url is https://www.figma.com/proto/do4pJqHwNwH1nBrrscu6Ld/Untitled?page-id=0%3A1&node-id=0-3&viewport=361%2C361%2C0.08&t=9SVttILbgMlPWuL0-1&scaling=min-zoom&content-scaling=fixed&starting-point-node-id=0%3A3, then the file key is do4pJqHwNwH1nBrrscu6Ld             node_id (str): The ID of the node to retrieve, has to be in format x:x, e.g. in url it will be like 0-3, but it should be 0:3          Returns:             dict: The node data if found, empty dict if not found         ",
    "inputSchema": {
      "properties": {
        "file_key": {
          "title": "File Key",
          "type": "string"
        },
        "node_id": {
          "title": "Node Id",
          "type": "string"
        }
      },
      "required": [
        "file_key",
        "node_id"
      ],
      "title": "get_nodeArguments",
      "type": "object"
    },
    "name": "get_node"
  },
  {
    "description": "Get workflows available in a Figma file          Args:             file_key (str): The file key found in the shared Figma URL, e.g. if url is https://www.figma.com/proto/do4pJqHwNwH1nBrrscu6Ld/Untitled?page-id=0%3A1&node-id=0-3&viewport=361%2C361%2C0.08&t=9SVttILbgMlPWuL0-1&scaling=min-zoom&content-scaling=fixed&starting-point-node-id=0%3A3, then the file key is do4pJqHwNwH1nBrrscu6Ld          Returns:             list[dict]: List of workflow connections found in the Figma file         ",
    "inputSchema": {
      "properties": {
        "file_key": {
          "title": "File Key",
          "type": "string"
        }
      },
      "required": [
        "file_key"
      ],
      "title": "get_workflowArguments",
      "type": "object"
    },
    "name": "get_workflow"
  }
]