MCP server for controlling Figma Slides — create, edit, and screenshot slides from any AI assistant that supports MCP.
AI Assistant <-MCP-> MCP Server <-WebSocket :3055-> Figma Plugin <-Plugin API-> Figma Slides
The MCP server communicates with a Figma plugin running inside your Figma Slides file. The plugin executes JavaScript in the Figma plugin sandbox and returns results.
- Node.js 18+
- A Figma account with access to Figma Slides
Claude Code
claude mcp add figma-slides -- npx @guiqft/figma-slides-mcpOr add to your project's .mcp.json:
{
"mcpServers": {
"figma-slides": {
"command": "npx",
"args": ["@guiqft/figma-slides-mcp"]
}
}
}VS Code
code --add-mcp '{"name":"figma-slides","command":"npx","args":["@guiqft/figma-slides-mcp"]}'Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"figma-slides": {
"command": "npx",
"args": ["@guiqft/figma-slides-mcp"]
}
}
}Claude Desktop / Other MCP Clients
Any MCP-compatible client can use figma-slides-mcp:
{
"mcpServers": {
"figma-slides": {
"command": "npx",
"args": ["@guiqft/figma-slides-mcp"]
}
}
}- Download the latest plugin release and unzip it
- In Figma, open a Slides file
- Go to Plugins > Development > Import plugin from manifest...
- Select the
manifest.jsonfrom the unzipped folder - Run the plugin — it connects to the MCP server via WebSocket on port 3055
Extract the design system from the current deck — colors (sorted by frequency with usage context), fonts, slide dimensions, and layout regions for every slide. Use this before creating or editing slides to match the existing style.
Check if the Figma plugin is connected and responding. Returns slide count and timestamp.
Run JavaScript in the Figma plugin sandbox. Has access to the full figma Plugin API plus these helpers:
| Helper | Description |
|---|---|
getSlide(index?) |
Get a slide by 0-based index (defaults to current slide) |
findSlides() |
Get all slides in the presentation |
serialize(node?) |
Serialize a node (or the whole page) to a JSON summary |
loadFont(family, style?) |
Load a font before setting text (style defaults to "Regular") |
List all slides in the current presentation with their index, name, dimensions, skipped status, and a text preview.
Read the full node tree of a single slide, including all nested children with their properties (text, fills, position, size).
| Parameter | Description |
|---|---|
slideIndex |
Slide index to read (0-based) |
depth |
Max tree depth (default 5, max 10) |
Update text on a slide by matching node name or text content. Fonts are loaded automatically. Supports batch updates in one call.
| Parameter | Description |
|---|---|
slideIndex |
Slide index to update (0-based) |
updates |
Array of { match, newText } — matches by node name, exact text, or text prefix |
Duplicate a slide and insert the copy immediately after the source. Returns the new slide's index and ID.
| Parameter | Description |
|---|---|
sourceIndex |
Index of the slide to duplicate (0-based) |
Export a slide as PNG and return it as a base64 image.
| Parameter | Description |
|---|---|
slideIndex |
Slide index to screenshot (0-based) |
scale |
Export scale (default 1, use 0.5 for thumbnails) |
Export all slides as PNG thumbnails in a single call. Returns an array of images.
| Parameter | Description |
|---|---|
scale |
Export scale (default 0.5 for thumbnails, use 1 for full resolution) |
For contributors who want to work on the project:
git clone https://github.com/guiqft/figma-slides-mcp.git
cd figma-slides-mcp
npm install
npm run build:mcp # Build MCP server + Figma plugin
npm run dev:mcp # Watch mode for MCP buildsMIT — see LICENSE.