Skip to content

Figma MCPA local companion for Figma documents

Connect MCP clients to an open Figma document through a local, loopback-only bridge.

FigmaMCP connector mark

FigmaMCP — A local bridge between MCP and your Figma canvas

Overview ​

Figma MCP is a local companion for Figma documents with the Figma Bridge plugin open. An MCP client starts the .NET process and exchanges protocol messages with it over STDIO.

MCP clientCompanionConnection registryBridge pluginFigma APIStart the child process and establish MCP over STDIOOpen the loopback WebSocket using figma-mcp-bridge.v2Validate the hello message and register connection_idConfirm registration with hello_ackCall a document tool with the selected connection_idResolve the live connection and allocate request_idReturn the active plugin connectionSend a bounded MessagePack bridge requestRead or mutate the active Figma documentReturn the operation resultSend the MessagePack response with request_idReturn the matched MCP result over stdout

The companion has two transport roles:

  • STDIO serves MCP. Protocol messages use stdin and stdout; diagnostics use stderr.
  • The loopback WebSocket endpoint at /bridge serves the Figma Bridge plugin.

The server, plugin, and bridge use explicit typed contracts. Document-specific MCP tools receive a live connection_id, and bridge operations use bounded payloads, a 30-second deadline, and idempotent mutation keys where applicable.

Starting the companion ​

Install the cross-platform .NET tool from NuGet.org:

shell
dotnet tool install --global FigmaMCP

The MCP client starts the tool as a child process:

json
{
  "mcpServers": {
    "figma": {
      "command": "figma-mcp-server"
    }
  }
}

Alternatively, download a self-contained win-x64, linux-x64, or osx-arm64 archive from the matching GitHub Release. A Windows client configuration can then look like this:

json
{
  "mcpServers": {
    "figma": {
      "command": "C:\\path\\to\\FigmaMCP.exe"
    }
  }
}

The process listens on 127.0.0.1:3846/bridge for the plugin by default. If no --port is supplied and 3846 is occupied, it detects that before Kestrel starts, tries subsequent ports through 65535, and reports the selected fallback on stderr. Pass --port <1-65535> to use one specific bridge port; an explicit port is never changed. Set the Bridge plugin to the port the server selected. The bridge is loopback-only and must not bind to an external interface.

Documentation map ​

Documentation for Figma MCP v1.1.2. Released under the MIT License.