# Layerbridge (npm · layerbridge)

Read, edit and export the Figma file open in a local plugin. No REST API, no rate limits.

- Trust score: 67/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-20

## Components

- npm · `layerbridge`: 67/100 (this document), [markdown](https://verifymcp.io/servers/muradyf-layerbridge/layerbridge.md), [page](https://verifymcp.io/servers/muradyf-layerbridge/layerbridge)

## Channel facts

- Registry: `npm`
- Package: `layerbridge`
- Version: `0.3.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-20.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 36 of 106 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 5 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 16209 tokens (~139/item across 116 items; 116 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 93/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 78% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_style" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 116 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the Layerbridge MCP server?

Layerbridge runs locally as an npm package, launched with npx -y layerbridge. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add muradyf-layerbridge -- npx -y layerbridge
```

### Cursor

```json
{
  "mcpServers": {
    "muradyf-layerbridge": {
      "command": "npx",
      "args": [
        "-y",
        "layerbridge"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "muradyf-layerbridge": {
      "command": "npx",
      "args": [
        "-y",
        "layerbridge"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add muradyf-layerbridge -- npx -y layerbridge
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "muradyf-layerbridge": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "layerbridge"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add muradyf-layerbridge --command npx --arg -y --arg layerbridge
```

### Hermes

```yaml
mcp_servers:
  muradyf-layerbridge:
    command: "npx"
    args: ["-y", "layerbridge"]
```

### Netclaw

```json
{
  "McpServers": {
    "muradyf-layerbridge": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "layerbridge"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add muradyf-layerbridge -t stdio -c npx -a -y layerbridge
```

### Other

```json
{
  "mcpServers": {
    "muradyf-layerbridge": {
      "command": "npx",
      "args": [
        "-y",
        "layerbridge"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-17 (score 67, 0)

- [functional regression] Security disclosure: unverified → fail

### 2026-09-16 (score 67, 0)

- [functional regression] Security disclosure: fail → unverified

### 2026-09-15 (score 67, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-09-14 (score 52)

First indexed and scored.

## MCP tools (116)

### `get_local_components` (~102 tokens)

List the file's own components and component sets with id, key, description, page and property definitions. Scans every page unless pageId is given.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `includeVariants` (boolean): Also list each variant inside a set (default false)
- `pageId` (string): Only this page (faster on big files)

### `create_component` (~80 tokens)

Turn an existing layer into a main component.

Input parameters:

- `description` (string)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `combine_as_variants` (~84 tokens)

Combine two or more components into a component set (variants).

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string)
- `nodeIds` (array, required)
- `parentId`: Figma node ID, e.g. '4029:12345'

### `create_instance` (~125 tokens)

Place an instance of a local component (componentId) or a published library component (componentKey).

Input parameters:

- `componentId` (string): Figma node ID, e.g. '4029:12345'
- `componentKey` (string): Key of a published library component
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `parentId`: Figma node ID, e.g. '4029:12345'
- `x` (number)
- `y` (number)

### `swap_component` (~99 tokens)

Swap an instance to another component, keeping overrides where Figma can.

Input parameters:

- `componentId`: Figma node ID, e.g. '4029:12345'
- `componentKey` (string)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `detach_instance` (~50 tokens)

Detach instances into plain frames.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeIds` (array, required)

### `set_instance_properties` (~106 tokens)

Set an instance's component properties (variant values, boolean toggles, text, instance swaps). Keys can be plain names ('Label') or Figma's suffixed keys ('Label#12:0').

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `properties` (object, required)

### `add_component_property` (~94 tokens)

Add a component property to a component or component set.

Input parameters:

- `defaultValue` (string|boolean, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string, required)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `propertyType` (string, required)

### `create_paint_style` (~88 tokens)

Create a local colour style from one hex colour or a stack of solid paints.

Input parameters:

- `description` (string)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `hex` (string)
- `name` (string, required)
- `opacity` (number)
- `paints` (array)

### `create_text_style` (~118 tokens)

Create a local text style. The font must be available to Figma.

Input parameters:

- `description` (string)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `fontFamily` (string, required)
- `fontSize` (number, required)
- `fontStyle` (string): e.g. Regular, Medium, Bold (default Regular)
- `letterSpacing` (number): Pixels
- `lineHeight` (number): Pixels
- `name` (string, required)

### `create_effect_style` (~68 tokens)

Create a local effect style (shadows / blurs). Shadow colours may be hex.

Input parameters:

- `effects` (array, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string, required)

### `create_grid_style` (~66 tokens)

Create a local layout-grid style using Figma's LayoutGrid objects.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `layoutGrids` (array, required)
- `name` (string, required)

### `update_style` (~145 tokens)

Update a local style's name, description, colour, type settings, effects or grids.

Input parameters:

- `description` (string)
- `effects` (array)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `fontFamily` (string)
- `fontSize` (number)
- `fontStyle` (string)
- `hex` (string)
- `layoutGrids` (array)
- `letterSpacing` (number)
- `lineHeight` (number)
- `name` (string)
- `opacity` (number)
- `styleId` (string, required)

### `delete_style` (~70 tokens)

Delete a local style. Requires confirm: true.

Input parameters:

- `confirm` (boolean, required): Must be true — this cannot be undone from here
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `styleId` (string, required)

### `apply_style` (~91 tokens)

Apply a style to a layer as its fill, stroke, text, effect or grid style.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `styleId` (string, required)
- `target` (string)

### `create_variable_collection` (~49 tokens)

Create a local variable collection.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string, required)

### `add_variable_mode` (~65 tokens)

Add a mode (e.g. Dark) to a variable collection.

Input parameters:

- `collectionId` (string, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string, required)

### `rename_variable_mode` (~67 tokens)

Rename a mode in a variable collection.

Input parameters:

- `collectionId` (string, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `modeId` (string, required)
- `name` (string, required)

### `create_variable` (~108 tokens)

Create a variable in a collection, optionally with values per mode. Values: hex for COLOR, number for FLOAT, boolean, string, or { alias: variableId }. Modes may be named by id or name.

Input parameters:

- `collectionId` (string, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string, required)
- `values` (object)
- `variableType` (string, required)

### `set_variable_value` (~71 tokens)

Set a variable's value for one mode (mode id or name).

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `modeId` (string, required)
- `value`
- `variableId` (string, required)

### `delete_variable` (~69 tokens)

Delete a variable. Requires confirm: true.

Input parameters:

- `confirm` (boolean, required): Must be true — this cannot be undone from here
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `variableId` (string, required)

### `delete_variable_collection` (~75 tokens)

Delete a variable collection and everything in it. Requires confirm: true.

Input parameters:

- `collectionId` (string, required)
- `confirm` (boolean, required): Must be true — this cannot be undone from here
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.

### `bind_variable` (~131 tokens)

Bind a variable to a layer property (width, height, itemSpacing, paddingLeft, cornerRadius, opacity, visible, characters…) or to a fill/stroke colour (field 'fill' or 'stroke'). Omit variableId to unbind.

Input parameters:

- `field` (string, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `paintIndex` (integer)
- `variableId` (string)

### `get_reactions` (~70 tokens)

Read a layer's prototype interactions (triggers and actions).

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `set_reactions` (~88 tokens)

Replace or append a layer's prototype interactions, using Figma's Reaction objects.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `mode` (string)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `reactions` (array, required)

### `remove_reactions` (~79 tokens)

Remove all of a layer's interactions, or the one at index.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `index` (integer)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `get_annotations` (~77 tokens)

Read Dev Mode annotations in a subtree (default: current page), with the file's annotation categories.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeId` (string): Figma node ID, e.g. '4029:12345'

### `set_annotations` (~96 tokens)

Replace or append a layer's annotations ({ label | labelMarkdown, properties?, categoryId? }). Works in Dev Mode too.

Input parameters:

- `annotations` (array, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `mode` (string)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `get_fonts` (~104 tokens)

Fonts used in a subtree (default: current page) with how many text layers use each; optionally the fonts available to Figma.

Input parameters:

- `family` (string): Filter available fonts by family
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `includeAvailable` (boolean)
- `nodeId` (string): Figma node ID, e.g. '4029:12345'

### `create_section` (~103 tokens)

Create a section, either at a given box or wrapped around existing layers (nodeIds).

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `height` (number)
- `name` (string)
- `nodeIds` (array)
- `padding` (number)
- `width` (number)
- `x` (number)
- `y` (number)

### `set_constraints` (~78 tokens)

Set a layer's resizing constraints.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `horizontal` (string)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `vertical` (string)

### `reorder_nodes` (~65 tokens)

Move layers in their parent's stacking order.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `index` (integer)
- `nodeIds` (array, required)
- `position` (string, required)

### `lock_nodes` (~57 tokens)

Lock or unlock layers.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `locked` (boolean): Default true
- `nodeIds` (array, required)

### `batch_rename_nodes` (~135 tokens)

Rename many layers: regex find/replace, or a template with {name} {index} {type}. Target explicit nodeIds or every layer under rootId.

Input parameters:

- `caseSensitive` (boolean)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `find` (string)
- `nodeIds` (array)
- `replace` (string)
- `rootId`: Figma node ID, e.g. '4029:12345'
- `startIndex` (integer)
- `template` (string)

### `find_replace_text` (~116 tokens)

Find and replace text in every text layer of a subtree (default: current page). dryRun previews.

Input parameters:

- `caseSensitive` (boolean)
- `dryRun` (boolean)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `find` (string, required)
- `regex` (boolean)
- `replace` (string)
- `rootId` (string): Figma node ID, e.g. '4029:12345'

### `rename_page` (~54 tokens)

Rename a page.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string, required)
- `pageId` (string, required)

### `delete_page` (~73 tokens)

Delete a page and everything on it. Requires confirm: true.

Input parameters:

- `confirm` (boolean, required): Must be true — this cannot be undone from here
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `pageId` (string, required)

### `get_viewport` (~47 tokens)

The canvas viewport: centre, zoom and visible bounds.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.

### `create_from_svg` (~95 tokens)

Create editable vector layers from an SVG string.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string)
- `parentId` (string): Figma node ID, e.g. '4029:12345'
- `svg` (string, required)
- `x` (number)
- `y` (number)

### `save_version` (~71 tokens)

Save a named version to the file's version history. Figma notes very recent edits may not be included.

Input parameters:

- `description` (string)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `title` (string, required)

### `notify` (~64 tokens)

Show a toast message inside Figma.

Input parameters:

- `error` (boolean)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `message` (string, required)
- `timeoutMs` (number)

### `get_rest_json` (~82 tokens)

A layer in the REST API's JSON shape (exportAsync JSON_REST_V1), without using the REST API.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `get_selection_colors` (~47 tokens)

The colours and colour styles used in the current selection.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.

### `get_dev_resources` (~81 tokens)

Dev resources (links) attached to a layer, optionally its children too.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `includeChildren` (boolean)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `add_dev_resource` (~86 tokens)

Attach a dev resource link to a layer. Works in Dev Mode.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `url` (string, required)

### `delete_dev_resource` (~74 tokens)

Remove a dev resource link from a layer.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `url` (string, required)

### `get_board` (~146 tokens)

FigJam: read a board as compact JSON — stickies (text, colour, author, position), shapes with text, connectors (what they join, label, line type), sections with their children, tables (cell text), code blocks, text and stamps, plus a count of every layer type. Only works when the plugin runs in a FigJam file.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `maxItems` (integer): Stop listing after this many items (default 500); counts still cover everything
- `pageId` (string): A page other than the current one

### `create_sticky` (~155 tokens)

FigJam: add a sticky note.

Input parameters:

- `color` (string): A FigJam colour name such as yellow, green or lightGray (get_board lists the ones in use), or a hex colour
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `parentId` (string): A section to put it in
- `text` (string, required)
- `wide` (boolean): A wide sticky instead of a square one
- `x` (number): Left edge, in the parent's coordinates. Without x, y or parentId the item is centred in view.
- `y` (number): Top edge, in the parent's coordinates

### `create_shape_with_text` (~177 tokens)

FigJam: add a shape with text in it, e.g. a flowchart box or decision diamond.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `fill` (string): A FigJam colour name such as yellow, green or lightGray (get_board lists the ones in use), or a hex colour
- `height` (number)
- `parentId` (string): A section to put it in
- `shapeType` (string, required)
- `text` (string, required)
- `width` (number)
- `x` (number): Left edge, in the parent's coordinates. Without x, y or parentId the item is centred in view.
- `y` (number): Top edge, in the parent's coordinates

### `create_connector` (~155 tokens)

FigJam: connect two items (stickies, shapes, sections…) with a connector line that follows them when they move.

Input parameters:

- `endCap` (string): Default is FigJam's arrow
- `endMagnet` (string)
- `endNodeId` (required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `label` (string)
- `lineType` (string)
- `startCap` (string): Default NONE
- `startMagnet` (string): Which side it attaches to (default AUTO)
- `startNodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `create_table` (~121 tokens)

FigJam: add a table, optionally filled with text row by row.

Input parameters:

- `cells` (array): Text per row; missing cells stay empty
- `columns` (integer, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `rows` (integer, required)
- `x` (number): Left edge, in the parent's coordinates. Without x, y or parentId the item is centred in view.
- `y` (number): Top edge, in the parent's coordinates

### `create_code_block` (~103 tokens)

FigJam: add a code block with syntax highlighting.

Input parameters:

- `code` (string, required)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `language` (string)
- `x` (number): Left edge, in the parent's coordinates. Without x, y or parentId the item is centred in view.
- `y` (number): Top edge, in the parent's coordinates

### `generate_diagram` (~238 tokens)

FigJam: draw a Mermaid flowchart as real FigJam shapes, connectors and sections, laid out automatically. Supports flowchart/graph with TD, TB, BT, LR or RL; node shapes [rect], (round), {diamond}, ((circle)), ([stadium]), [(database)], {{hexagon}}, [[subroutine]], [/parallelogram/]; edges -->, ---, -.->, ==> with |label| or -- label -->; subgraphs become sections; %% comments. Styling (classDef, style, click) is skipped and reported in warnings. Returns the id of every shape, connector and section, keyed by Mermaid id. Up to 300 nodes.

Input parameters:

- `direction` (string): Overrides the direction in the Mermaid header
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `mermaid` (string, required): Mermaid source, starting with e.g. "flowchart LR"
- `x` (number): Left edge of the diagram (default: centred in view)
- `y` (number): Top edge of the diagram

### `get_slides` (~133 tokens)

Figma Slides: the deck as rows of slides with id, name, whether it is skipped, its transition and the first few text layers of each. Only works when the plugin runs in a Slides file. Edit a slide's content with the usual tools (create_text, create_frame, set_text_content, …) using the slide id as parentId.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `textNodesPerSlide` (integer): Text layers summarised per slide (default 5, 0 for none)

### `create_slide` (~124 tokens)

Figma Slides: add a slide, at the end of the deck or at a row and position. Use a row one past the last to start a new row.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `index` (integer): Position within the row; needs row
- `name` (string): Layer name. Figma Slides renames slides to their position number when the deck changes, so it rarely lasts; identify slides by id
- `row` (integer)

### `reorder_slides` (~88 tokens)

Figma Slides: rearrange the deck. Pass every slide id exactly once, grouped into rows in the new order.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `grid` (array, required): Slide ids per row, e.g. [['1:2','1:3'],['1:4']]

### `delete_slide` (~82 tokens)

Figma Slides: delete a slide and everything on it.

Input parameters:

- `confirm` (boolean, required): Must be true — this cannot be undone from here
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `slideId` (string, required): The slide's node id, from get_slides

### `set_slide_transition` (~129 tokens)

Figma Slides: set the transition that plays when this slide appears. Values left out keep the slide's current ones.

Input parameters:

- `curve` (string)
- `delay` (number): With trigger AFTER_DELAY
- `duration` (number): Length of the transition, as Figma's SlideTransition.duration
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `slideId` (string, required): The slide's node id, from get_slides
- `style` (string, required)
- `trigger` (string)

### `focus_slide` (~74 tokens)

Figma Slides: make a slide the focused one, as when it is opened in single-slide view.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `slideId` (string, required): The slide's node id, from get_slides

### `list_files` (~38 tokens)

List all currently connected Figma files. Returns fileKey and fileName for each. Use the fileKey to target a specific file in other tools.

### `get_document` (~60 tokens)

Get the current Figma page document tree. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.

### `get_selection` (~60 tokens)

Get the currently selected nodes in Figma. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.

### `get_node` (~178 tokens)

Get a specific Figma node by ID. Accepts top-level IDs like '4029:12345' and instance-child IDs like 'I12740:17806;12740:17793'. Never use hyphens. When multiple files are connected, specify fileKey.

Input parameters:

- `depth` (integer): Levels of children to include (default all)
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `includeHidden` (boolean): Include children the design hides (visible: false). Default false.
- `nodeId` (string, required): The node ID to fetch. Accepts top-level IDs like '4029:12345' and instance-child IDs like 'I12740:17806;12740:17793'.

### `get_styles` (~59 tokens)

Get all local styles in the document. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.

### `get_metadata` (~70 tokens)

Get metadata about the current Figma document including file name, pages, and current page info. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.

### `get_design_context` (~96 tokens)

Get the design context for the current selection or page. Returns a summarized tree structure optimized for understanding the current design context. When multiple files are connected, specify fileKey.

Input parameters:

- `depth` (number): How many levels deep to traverse the node tree (default 2)
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.

### `get_variable_defs` (~87 tokens)

Get all local variable definitions including variable collections, modes, and variable values. Variables are Figma's system for design tokens (colors, numbers, strings, booleans). When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.

### `get_screenshot` (~356 tokens)

Export a screenshot of the selected nodes or specific nodes by ID. Returns base64-encoded image data. When multiple files are connected, specify fileKey.

Input parameters:

- `allowHidden` (boolean): Export even when the node or an ancestor is hidden (default false — hidden nodes are reported instead, since they render nothing)
- `clip` (boolean): When true, export using Figma's absolute node bounds (REST use_absolute_bounds / plugin useAbsoluteBounds) so PNGs are clipped to the node's logical bounds
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `format` (string): Export format: PNG (default) or SVG or JPG or PDF
- `nodeIds` (array): Optional list of node IDs to export. Accepts top-level IDs like '4029:12345' and instance-child IDs like 'I12740:17806;12740:17793'. Never use hyphens. If empty, exports the current selection.
- `scale` (number): Export scale for raster formats (default 2)
- `svgIdAttribute` (boolean): SVG only: write layer names as id attributes (Figma default false)
- `svgOutlineText` (boolean): SVG only: outline text as paths (Figma default true). False keeps <text> elements.
- `svgSimplifyStroke` (boolean): SVG only: simplify inside/outside strokes (Figma default true)
- `timeoutMs` (number): Milliseconds one export may take before it is reported as stuck (default 30000). A stuck export almost always means Figma's window is minimized or covered.

### `set_node_visibility` (~99 tokens)

Show or hide specific Figma nodes. Returns previous visibility for each node so you can restore them after. Useful for isolating a single layer before exporting: hide all siblings, export the frame, then restore visibility.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `items` (array, required): List of nodes with their target visibility

### `set_text_content` (~132 tokens)

Update the contents of a single text node. The plugin loads the node's fonts before applying the new text. Accepts either text or characters. When multiple files are connected, specify fileKey.

Input parameters:

- `characters` (string): Alias for text, matching create_text. Supply one of the two.
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The text node ID to update
- `text` (string): The new text content. Required unless characters is given.

### `set_text_properties` (~266 tokens)

Patch common text properties such as font family/style, size, alignment, auto-resize, line height, letter spacing, fill color, and bounds. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `fillHex` (string): Optional text fill color as hex
- `fillOpacity` (number): Optional text fill opacity from 0 to 1
- `fontFamily` (string): Optional font family
- `fontSize` (number): Optional font size
- `fontStyle` (string): Optional font style
- `height` (number): Optional height
- `letterSpacingPx` (number): Optional letter spacing in pixels
- `lineHeightPx` (number): Optional line height in pixels
- `nodeId` (string, required): The text node ID to update
- `textAlignHorizontal` (string): Optional horizontal alignment
- `textAlignVertical` (string): Optional vertical alignment
- `textAutoResize` (string): Optional text auto-resize mode
- `width` (number): Optional width
- `x` (number): Optional x position
- `y` (number): Optional y position

### `set_node_properties` (~205 tokens)

Patch common node properties such as name, position, size, visibility, opacity, and corner radius. Only supported properties for the target node type may be changed. Use set_solid_fill or set_gradient_fill to change paints. When multiple files are connected, specify fileKey.

Input parameters:

- `cornerRadius` (number): Optional corner radius
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `height` (number): Optional height
- `name` (string): Optional new node name
- `nodeId` (string, required): The node ID to update
- `opacity` (number): Optional opacity from 0 to 1
- `rotation` (number): Optional rotation in degrees
- `visible` (boolean): Optional visibility
- `width` (number): Optional width
- `x` (number): Optional x position
- `y` (number): Optional y position

### `set_solid_fill` (~199 tokens)

Replace a node's fill (or stroke) with a single solid paint. Provide a hex color and optional paint opacity — fillHex/fillOpacity are accepted as aliases. Use set_gradient_fill for gradient paints.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `fillHex` (string): Alias for hex, matching the create_* tools. Supply one of the two.
- `fillOpacity` (number): Alias for opacity, matching the create_* tools
- `hex` (string): Solid color as hex (e.g. '#FFAA00'). Required unless fillHex is given.
- `nodeId` (string, required): The node ID to update
- `opacity` (number): Optional paint opacity from 0 to 1 (default 1)
- `target` (string): Apply to fills or strokes (default fill)

### `set_gradient_fill` (~225 tokens)

Replace a node's fill (or stroke) with a gradient paint. Provide ordered stops (position 0..1, hex color, optional alpha) and an optional 2x3 gradientTransform matching Figma's gradientTransform format. Useful for setting linear/radial/angular/diamond gradients programmatically.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `gradientStops` (array, required): Ordered list of gradient color stops (at least 2)
- `gradientTransform` (array): 2x3 affine matrix [[a,b,tx],[c,d,ty]] mapping the unit gradient onto the shape (Figma's gradientTransform). Defaults to identity (horizontal left→right).
- `gradientType` (string): Gradient family (default LINEAR)
- `nodeId` (string, required): The node ID to update
- `opacity` (number): Overall paint opacity (default 1)
- `target` (string): Apply to fills or strokes (default fill)

### `set_effects` (~129 tokens)

Replace a node's effects list (drop/inner shadows, layer/background blurs). Pass an empty array to clear all effects. Each entry mirrors the shape returned by get_node's `effects` field.

Input parameters:

- `effects` (array, required): Full replacement list of effects. Pass [] to clear all effects. Each entry is a drop/inner shadow or a layer/background blur.
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The node ID to update

### `set_stroke_properties` (~182 tokens)

Patch stroke geometry properties: weight, align, dash pattern, cap, join. Use set_solid_fill/set_gradient_fill with target='stroke' to set the paint itself.

Input parameters:

- `dashPattern` (array): Dash pattern as [dash, gap, dash, gap, ...] in pixels. Pass [] for a solid stroke.
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The node ID to update
- `strokeAlign` (string): How the stroke is positioned relative to the geometry edge
- `strokeCap` (string): End-cap style (only meaningful on open paths/lines)
- `strokeJoin` (string): Corner join style
- `strokeWeight` (number): Stroke thickness in pixels

### `set_auto_layout` (~265 tokens)

Configure auto-layout on a frame: direction, gap, padding, alignment, sizing modes, wrap. Set layoutMode='NONE' to disable auto-layout on the frame.

Input parameters:

- `counterAxisAlignItems` (string): Alignment along the counter axis
- `counterAxisSizingMode` (string): AUTO = hug contents along counter axis
- `counterAxisSpacing` (number): Gap between wrapped rows/columns (only when layoutWrap=WRAP)
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `itemSpacing` (number): Gap between children along the primary axis (pixels)
- `layoutMode` (string): Auto-layout direction. 'NONE' disables auto-layout.
- `layoutWrap` (string): Allow children to wrap onto multiple rows/columns
- `nodeId` (string, required): The node ID to update (must be a frame)
- `paddingBottom` (number)
- `paddingLeft` (number)
- `paddingRight` (number)
- `paddingTop` (number)
- `primaryAxisAlignItems` (string): Alignment along the primary axis
- `primaryAxisSizingMode` (string): AUTO = hug contents along primary axis

### `create_page` (~148 tokens)

Create a new page in the Figma document, optionally naming it and switching the editor to it. Returns the new page's ID, which can be passed as parentId to create_frame / create_text / create_shape / create_image to author content on that page. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `name` (string): Optional page name (defaults to Figma's 'Page N')
- `setAsCurrent` (boolean): When true, switch the editor to the new page after creating it (default false)

### `create_frame` (~173 tokens)

Create a new frame, optionally inside a specified parent. You can set name, size, position, and a solid fill. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `fillHex` (string): Optional solid fill color as hex
- `fillOpacity` (number): Optional solid fill opacity from 0 to 1
- `height` (number): Frame height
- `name` (string): Optional frame name
- `parentId` (string): Optional parent node ID to append the frame into
- `width` (number): Frame width
- `x` (number): Optional x position
- `y` (number): Optional y position

### `create_text` (~256 tokens)

Create a new text node, optionally inside a specified parent. You can set its content, font, size, alignment, color, position, and bounds. When multiple files are connected, specify fileKey.

Input parameters:

- `characters` (string): Initial text content
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `fillHex` (string): Optional text fill color as hex
- `fillOpacity` (number): Optional text fill opacity from 0 to 1
- `fontFamily` (string): Font family, defaults to Inter
- `fontSize` (number): Optional font size
- `fontStyle` (string): Font style, defaults to Regular
- `height` (number): Optional height
- `name` (string): Optional text node name
- `parentId` (string): Optional parent node ID to append the text into
- `textAlignHorizontal` (string): Optional horizontal alignment
- `textAutoResize` (string): Optional text auto-resize mode
- `width` (number): Optional width
- `x` (number): Optional x position
- `y` (number): Optional y position

### `create_shape` (~254 tokens)

Create a rectangle, ellipse, or line, optionally inside a specified parent. You can set its size, position, rotation, fill, and stroke. When multiple files are connected, specify fileKey.

Input parameters:

- `cornerRadius` (number): Optional corner radius for supported shapes
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `fillHex` (string): Optional fill color as hex
- `fillOpacity` (number): Optional fill opacity from 0 to 1
- `height` (number): Optional height
- `name` (string): Optional shape name
- `parentId` (string): Optional parent node ID to append the shape into
- `rotation` (number): Optional rotation in degrees
- `shapeType` (string, required): Shape type to create
- `strokeHex` (string): Optional stroke color as hex
- `strokeOpacity` (number): Optional stroke opacity from 0 to 1
- `strokeWeight` (number): Optional stroke weight
- `width` (number): Optional width
- `x` (number): Optional x position
- `y` (number): Optional y position

### `create_image` (~222 tokens)

Create an image-backed rectangle from a local file path, remote URL, or data URI. You can set its parent, position, size, corner radius, and fit mode. When multiple files are connected, specify fileKey.

Input parameters:

- `cornerRadius` (number): Optional corner radius
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `height` (number): Optional height
- `name` (string): Optional image node name
- `parentId` (string): Optional parent node ID to append the image into
- `scaleMode` (string): How the image should fit its bounds: FILL (default) or FIT
- `source` (string, required): Image source. Accepts a local file path (absolute or relative to the MCP server cwd), an http/https URL, or a data URI.
- `width` (number): Optional width
- `x` (number): Optional x position
- `y` (number): Optional y position

### `import_html_layers` (~253 tokens)

Import a DOM serialization (JSON produced by html-figma's browser htmlToFigma()) as editable Figma layers inside a new wrapper frame — frames, text, rectangles, and SVG vectors in one call. Source must be a JSON file path inside the MCP server working directory. Optionally append the wrapper into an existing frame/section via parentId. Requires the plugin to be open in the design editor. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `name` (string): Optional name for the wrapper frame (default: 'imported layers')
- `parentId` (string): Optional parent node ID (frame/section) to append the wrapper frame into. x/y become relative to that parent.
- `source` (string, required): Path to a JSON file containing an html-figma htmlToFigma() layer tree, relative to the MCP server cwd (absolute paths must stay inside it).
- `x` (number): Optional x position of the wrapper frame
- `y` (number): Optional y position of the wrapper frame

### `duplicate_nodes` (~84 tokens)

Duplicate one or more nodes in place. The duplicates remain under the same parent as the originals. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeIds` (array, required): List of node IDs to duplicate

### `reparent_nodes` (~89 tokens)

Move one or more nodes into a different parent container. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeIds` (array, required): List of node IDs to move
- `parentId` (string, required): Destination parent node ID

### `group_nodes` (~127 tokens)

Wrap a list of nodes in a new group. Nodes must share a common parent (or supply parentId explicitly). Returns the new group's node ID.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `name` (string): Optional name for the new group
- `nodeIds` (array, required): Node IDs to group. Must share a common parent.
- `parentId` (string): Optional explicit parent for the new group. Defaults to the shared parent of the input nodes.

### `ungroup_node` (~101 tokens)

Ungroup a group or frame — its children move up to its parent and the wrapper is removed. Returns the IDs of the orphaned children in their new parent.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): Group or frame to ungroup. Children move up to its parent and the wrapper is removed.

### `set_selection` (~90 tokens)

Set the current page selection to a list of node IDs. Pass an empty array to clear the selection. Works in both design editor and Dev Mode.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeIds` (array, required): Node IDs to select. Pass [] to clear the selection.

### `scroll_and_zoom_into_view` (~84 tokens)

Scroll and zoom the Figma viewport so the given nodes are framed in view. Works in both design editor and Dev Mode.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeIds` (array, required): Node IDs to frame in the viewport

### `delete_nodes` (~104 tokens)

Delete one or more nodes. This is destructive and requires confirm: true. Page and document nodes cannot be deleted through this tool. When multiple files are connected, specify fileKey.

Input parameters:

- `confirm` (boolean, required): Must be true to confirm deletion
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeIds` (array, required): List of node IDs to delete

### `get_motion_styles` (~65 tokens)

List all available animation presets in Figma (Motion API beta). When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.

### `get_node_motion` (~90 tokens)

Read a node's current animationStyles, animations, manualKeyframeTracks, and timelines (Motion API beta). When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The node ID to fetch motion properties for

### `apply_animation_style` (~127 tokens)

Apply a preset animation style to a node (Motion API beta). When multiple files are connected, specify fileKey.

Input parameters:

- `animationStyleData` (object): Optional values used to configure the applied animation style (e.g. duration, timelineOffset, axis, direction)
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The node ID to apply the style to
- `styleId` (string, required): The ID of the animation style to apply

### `remove_animation_style` (~119 tokens)

Remove an applied animation style from a node (Motion API beta). If no animationStyleId is provided, removes all styles. When multiple files are connected, specify fileKey.

Input parameters:

- `animationStyleId` (string): The ID of the animation style to remove. If omitted, all animation styles are removed.
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The node ID to remove the style from

### `apply_manual_keyframe_track` (~149 tokens)

Applies or replaces the manual Motion keyframe track for a property, paint, or effect field on a node. When multiple files are connected, specify fileKey.

Input parameters:

- `field` (object, required): The property, paint, or effect field to animate. Example: { type: 'PROPERTY', name: 'TRANSLATION_X' }
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The node ID to apply the track to
- `track` (object, required): The manual keyframe track to write. Contains keyframes, baseValue, etc.

### `remove_manual_keyframe_track` (~124 tokens)

Removes the manual Motion keyframe track for a property, paint, or effect field on a node. When multiple files are connected, specify fileKey.

Input parameters:

- `field` (object, required): The property, paint, or effect field to remove. Example: { type: 'PROPERTY', name: 'TRANSLATION_X' }
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The node ID to remove the track from

### `set_timeline_duration` (~118 tokens)

Sets the duration (in seconds) for a timeline. When multiple files are connected, specify fileKey.

Input parameters:

- `duration` (number, required): The new timeline duration in seconds (must be greater than zero)
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): The node ID whose timeline duration will be changed
- `timelineId` (string, required): A timeline id read from the node's timelines array

### `save_screenshots` (~361 tokens)

Export nodes and save them straight to disk, one node at a time (PNG/SVG/JPG/PDF). Returns metadata only. Hidden nodes and existing files are reported rather than failing the batch; the run stops early if Figma's exports stall. When multiple files are connected, specify fileKey.

Input parameters:

- `allowHidden` (boolean): Export even when the node or an ancestor is hidden (default false — hidden nodes are reported instead, since they render nothing)
- `clip` (boolean): Default clipping behavior for saved screenshots. When true, PNGs are clipped to the node's logical bounds using Figma's absolute node bounds.
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `format` (string): Default export format: PNG (default) or SVG or JPG or PDF
- `items` (array, required): List of screenshot save operations to execute in batch
- `overwrite` (boolean): Replace files that already exist (default false — existing files are reported, not touched)
- `scale` (number): Default export scale for raster formats (default 2)
- `svgIdAttribute` (boolean): SVG only: write layer names as id attributes (Figma default false)
- `svgOutlineText` (boolean): SVG only: outline text as paths (Figma default true). False keeps <text> elements.
- `svgSimplifyStroke` (boolean): SVG only: simplify inside/outside strokes (Figma default true)
- `timeoutMs` (number): Milliseconds one export may take before it is reported as stuck (default 30000). A stuck export almost always means Figma's window is minimized or covered.

### `export_assets` (~663 tokens)

Export every matching layer in a frame to a folder, e.g. all icon instances as SVG, exactly as Figma draws them on that screen, overrides included. Scans rootId with the filter (types, namePattern, size, stopAtMatch, default true) or takes explicit nodeIds; skips hidden layers; writes identical exports once; writes manifest.json with each node's bounds relative to rootId and its file. Stops early and says why if exports stall.

Input parameters:

- `clip` (boolean): Use the node's logical bounds instead of its render bounds
- `dedupe` (boolean): When two nodes export byte-identical files (ignoring generated SVG ids), write the file once and point the second at it in the manifest (default true)
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `fileName` (string): File name template without extension. Tokens: {name} {id} {index} {type} {x} {y} (x/y relative to rootId). Default '{name}__{id}'
- `format` (string): Default SVG
- `includeHidden` (boolean): Also match layers the design hides (default false; they render nothing)
- `limit` (integer): Maximum nodes to export (default 500)
- `manifest` (boolean): Write manifest.json listing every node, its bounds and its file (default true)
- `maxDepth` (integer): Do not descend deeper than this
- `maxSize` (number): Match only nodes whose larger side is at most this many px
- `minSize` (number): Match only nodes whose larger side is at least this many px
- `namePattern` (string): Case-insensitive regular expression the layer name must match
- `nodeIds` (array): Export exactly these nodes instead of scanning (rootId still sets relative positions)
- `outputDir` (string, required): Directory to write into, relative to the MCP server's working directory (or inside FIGMA_BRIDGE_OUTPUT_ROOTS)
- `overwrite` (boolean): Replace files that already exist (default false — existing files are reported, not touched)
- `rootId` (string): Scan this node's subtree with the filter below and export every match
- `scale` (number): Raster scale (default 2)
- `stopAtMatch` (boolean): Do not look inside a node that matched — so an icon instance is returned whole, not also as its inner vectors
- `svgIdAttribute` (boolean): SVG only: write layer names as id attributes (Figma default false)
- `svgOutlineText` (boolean): SVG only: outline text as paths (Figma default true). False keeps <text> elements.
- `svgSimplifyStroke` (boolean): SVG only: simplify inside/outside strokes (Figma default true)
- `timeoutMs` (number): Milliseconds one export may take before it is reported as stuck (default 30000). A stuck export almost always means Figma's window is minimized or covered.
- `types` (array): Node types to match, e.g. ['INSTANCE','VECTOR','BOOLEAN_OPERATION','TEXT','FRAME']

### `export_tokens` (~153 tokens)

Export the file's local variables (every mode) and colour/text/effect styles as W3C design-tokens JSON, CSS custom properties, or both, written to disk.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `format` (string): W3C design-tokens JSON (default), CSS custom properties, or both
- `outputPath` (string, required): File to write (e.g. tokens.json or tokens.css); with format 'both' the extension is replaced
- `overwrite` (boolean): Replace files that already exist (default false — existing files are reported, not touched)

### `export_frames_to_pdf` (~161 tokens)

Export frames as one multi-page PDF, one page per frame in the order given, written to disk.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeIds` (array, required): Frames in page order
- `outputPath` (string, required): PDF file to write
- `overwrite` (boolean): Replace files that already exist (default false — existing files are reported, not touched)
- `timeoutMs` (number): Milliseconds one export may take before it is reported as stuck (default 30000). A stuck export almost always means Figma's window is minimized or covered.
- `title` (string): PDF document title

### `export_image_fills` (~126 tokens)

Save the original images behind image fills in a subtree — the uploaded bitmaps, not a render — plus images.json listing which layers use each.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string, required): Layer whose subtree's image fills are saved
- `outputDir` (string, required): Directory to write the original images into
- `overwrite` (boolean): Replace files that already exist (default false — existing files are reported, not touched)

### `import_tokens` (~333 tokens)

Import design tokens into the file's local variables: W3C DTCG JSON (including export_tokens output), CSS custom properties (:root is the default mode; [data-theme="x"], .dark and @media (prefers-color-scheme: dark) are other modes) or Tailwind v4 @theme blocks. Matches existing variables by collection and name, creates what is missing, updates what changed, and sets aliases last. Previews by default — pass dryRun: false to apply. Never deletes; variables the import leaves out are listed as missing.

Input parameters:

- `collection` (string): Put every token in this collection. Without it, DTCG uses each top-level group as the collection and CSS names are matched to existing variables, falling back to "Tokens".
- `content` (string): The tokens themselves, instead of a file
- `deleteMissing` (boolean): Not implemented: missing variables are only reported, never deleted
- `dryRun` (boolean): Default true: report the plan without changing the file
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `format` (string): Default auto: JSON is DTCG, anything else CSS (which includes @theme blocks). tailwind reads only @theme blocks.
- `modeMapping` (object): Rename source modes to Figma mode names, e.g. { "dark": "Dark", ":root": "Light" }
- `source` (string): Path to a .json or .css file, relative to the server's working directory

### `compare_to_image` (~352 tokens)

Compare a Figma node with the built page or component: exports the node as PNG, compares it with a local screenshot (image) or a screenshot Playwright takes of a local URL, and writes design, actual and diff PNGs. Returns the mismatch percentage and the largest mismatching regions in design coordinates, each with the layers most likely responsible. url needs the optional Playwright install.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `fit` (string): When sizes differ: crop compares the overlapping top-left area (default); resize scales the image to the design's size first
- `image` (string): Path to a PNG (or JPG, with the optional jpeg-js) of the built UI, inside the allowed folders
- `maxRegions` (integer): How many regions to return (default 5)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `outputDir` (string): Where to write the PNGs (default figma-compare), inside the allowed folders
- `scale` (number): Pixels per design unit for both images (default 1). Use 2 for a retina screenshot.
- `selector` (string): With url: screenshot only the first element matching this CSS selector
- `threshold` (number): pixelmatch colour threshold, 0–1 (default 0.1; lower is stricter)
- `url` (string): A localhost or file URL to screenshot instead (needs Playwright)
- `viewport` (object): With url: window size in CSS pixels (default: the node's size)

### `import_url` (~197 tokens)

Render a localhost or file URL in Playwright and import the page (or one element, via selector) as editable Figma layers — frames, text, images and SVGs — through import_html_layers. Needs the optional Playwright install.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `name` (string): Name of the wrapper frame (default: the URL's host and path)
- `parentId` (string): Frame or section to put the wrapper in
- `selector` (string): CSS selector of the element to import (default body)
- `url` (string, required): A localhost or file URL (other hosts need FIGMA_BRIDGE_ALLOW_REMOTE_URLS=1)
- `viewport` (object): Browser window size in CSS pixels (default 1440×900)
- `x` (number)
- `y` (number)

### `get_code_context` (~385 tokens)

Design-to-code context for one layer, read in a single walk. format "json" (default) returns a compact tree — each layer's flex/grid layout (mode, gap, padding, justify/align, fixed/hug/fill sizing, absolute position with constraints), a ref into a deduped styles table (fills, strokes, radius, effects, opacity) and textStyles table, text with mixed-style segments, component instances with variant and property values, icons collapsed to { type: ICON, assetHint }, image fills as imageRef — plus tokens used and assets to export. Every variable-bound value carries the variable name, its CSS custom property (the same name export_tokens writes) and the resolved value. "jsx-tailwind" and "html-css" return starter code built from that tree, headed by the tokens, components, icons and images it needs.

Input parameters:

- `expandInstances` (boolean): Read inside component instances instead of treating each as a component placeholder (default false; the requested layer is always read)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `format` (string): "json" (default), "jsx-tailwind" or "html-css"
- `includeHidden` (boolean): Include layers turned off in the design (default false)
- `inlineSvgMaxBytes` (integer): Inline each icon's SVG when it is at most this many bytes (default 0: never; up to 60 icons)
- `maxDepth` (integer): Levels of children to read; deeper layers are summarised with a childCount. Default: no limit
- `maxNodes` (integer): Stop after this many layers (default 3000)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'

### `run_script` (~220 tokens)

Run JavaScript inside the Figma plugin with `figma` (the Plugin API) in scope, as the body of an async function: use await, and return a JSON-serialisable value. Returns { result, logs (console.log/info/warn/error/debug during the run), durationMs }; nodes in the result become {id, name, type}, cycles are cut and results over ~200KB are truncated. The script can change or delete anything in the file. In Dev Mode only reading works. A timed-out script cannot be stopped and may keep running. Off unless the server runs with FIGMA_BRIDGE_ALLOW_SCRIPTS=1.

Input parameters:

- `code` (string, required): Body of an async function, e.g. "const n = await figma.getNodeByIdAsync('1:2'); return n.name"
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `timeoutMs` (integer): Default 10000, max 60000

### `generate_component_docs` (~246 tokens)

Document a component or component set (an instance documents its main component): name, description, documentation links, property definitions with types, defaults and variant options, the variants, every variable (with its CSS custom property) and style used inside it, and optionally how many instances the file has. Returns markdown (default) or JSON; outputPath also writes it to a file, writeToCanvas also places a documentation frame beside the component (needs the design editor).

Input parameters:

- `countInstances` (boolean): Count instances across the file (can be slow on big files; default false)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `format` (string): "markdown" (default) or "json"
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `outputPath` (string): Also write the result here (inside the allowed output folders)
- `overwrite` (boolean): Replace an existing file at outputPath (default false)
- `writeToCanvas` (boolean): Also create a documentation frame next to the component (default false)

### `check_accessibility` (~440 tokens)

Check a frame for WCAG 2.2 accessibility problems: text contrast (1.4.3 AA / 1.4.6 AAA), target size (2.5.8, or 2.5.5 at 44px) and very small text. Contrast is computed from the layers behind each text; when the background is an image, gradient, blur or blend it renders the containing layer as a PNG and samples the pixels behind the text, reporting the worst background colour (method: sampled). Returns a 0-100 score and issues sorted by severity, each with the node, colours, ratio, required ratio, informational APCA Lc, and the nearest colour variable or style that would pass. Optional: write JSON + Markdown reports to outputDir, and annotate failing layers in Figma (annotate: true changes the file; re-running replaces its own annotations). Cost: one scan, plus one export per containing layer that needs sampling (capped by maxExports).

Input parameters:

- `annotate` (boolean): Add a Figma annotation to each failing layer (changes the file; design editor only)
- `checks` (array): Which checks to run (default all three)
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `level` (string): WCAG level (default AA)
- `maxExports` (integer): Most layers to render for pixel sampling (default 25)
- `maxIssues` (integer): Most issues in the reply (default 200; files list all)
- `minFontSize` (number): Warn below this font size in px (default 12)
- `minTarget` (number): Minimum target size in px (default 24 for AA per WCAG 2.5.8; 44 for AAA 2.5.5 and Apple's HIG)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `outputDir` (string): Write accessibility-<node>.json and .md here (inside the allowed output folders)

### `lint_design_system` (~396 tokens)

Lint a frame against the file's design system. Rules: unbound-color (solid fill/stroke with no variable or style; suggests the matching local colour variable in the layer's mode, respecting variable scopes, or paint style — exact first, else nearest by CIEDE2000 within maxDeltaE), unbound-spacing and unbound-radius (auto-layout gap/padding and corner radius not bound to a number variable; suggests one), text-without-style (suggests the nearest text style in the same family), detached-instance, off-scale-spacing / off-scale-radius (against spacingScale/radiusScale, or a scale inferred from the file's number variables), default-name, hidden-layer, empty-frame. Returns issues with node, path, property, value, suggestion and whether fix_design_system can apply it, plus counts per rule and a 0-100 score. Read-only; one scan of the frame.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `includeInstanceChildren` (boolean): Also look inside instances (default false: their insides come from the main component, so lint that instead)
- `limit` (integer): Most layers with findings to collect (default 5000)
- `maxDeltaE` (number): Colour distance (CIEDE2000) for suggestions (default 5; fixes use 2)
- `maxIssues` (integer): Most issues in the reply (default 300)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `radiusScale` (array): Allowed corner radii in px
- `respectScopes` (boolean): Only suggest variables whose scopes allow the property (default true)
- `rules` (array): Rules to run (default all)
- `spacingScale` (array): Allowed spacing values in px

### `fix_design_system` (~362 tokens)

Apply lint_design_system's suggestions: bind solid fills/strokes to matching colour variables (or a paint style when the layer has one paint), bind auto-layout spacing/padding and corner radius to number variables with exactly the same value, and give unstyled text a text style whose font, size, line height and letter spacing match. Only binds when the variable resolves, in that layer's mode, to the same value (colours within maxDeltaE, default 2); re-checks each layer before changing it and reverts if Figma changed the result. dryRun defaults to true and returns the plan without changing anything; dryRun: false applies it and returns what changed and what was skipped and why. Changes the file when applied (design editor only).

Input parameters:

- `dryRun` (boolean): Default true: plan only. Pass false to change the file.
- `fileKey` (string): The fileKey of the Figma file. Required when several files are connected; see list_files.
- `includeInstanceChildren` (boolean): Also look inside instances (default false: their insides come from the main component, so lint that instead)
- `limit` (integer): Most layers with findings to collect (default 5000)
- `maxDeltaE` (number): Largest colour change allowed when binding (CIEDE2000, default 2; 0 = exact only)
- `maxItems` (integer): Most changes/skips listed in the reply (default 300)
- `nodeId` (string, required): Figma node ID, e.g. '4029:12345'
- `respectScopes` (boolean): Only bind variables whose scopes allow the property (default true)
- `rules` (array): Which fixes (default all four)

### `health` (~105 tokens)

Diagnose the bridge: server version and role, connected files, and a live test export from the plugin. Use it when calls time out: it tells a dead plugin apart from one node that will not export.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `nodeId` (string): Node to test-export (default: the first visible layer on the current page)

### `get_pages` (~64 tokens)

List the file's pages and which one Figma currently shows. When multiple files are connected, specify fileKey.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.

### `navigate_to_page` (~114 tokens)

Switch Figma to a page by pageId or exact pageName. Reads and exports work across pages without this; use it to change what get_document and get_selection see.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `pageId` (string): Page ID, e.g. '0:1'
- `pageName` (string): Exact page name, used when pageId is not given

### `get_nodes` (~145 tokens)

Fetch several nodes in one call. Each result carries its tree (optionally depth-limited), absolute bounds, auto-layout sizing, instance component properties and mixed-text segments. A node that fails is reported in place instead of failing the call. includeHidden keeps layers the design turns off.

Input parameters:

- `depth` (integer): Levels of children to include (default all)
- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `includeHidden` (boolean): Include children the design hides (visible: false). Default false.
- `nodeIds` (array, required): Node IDs to fetch

### `scan_nodes` (~315 tokens)

Search a node's subtree and return a flat list of matches: id, name, type, visibility, layer path, absolute bounds, bounds relative to the root, text and font for TEXT, component name for INSTANCE. Filter by types, namePattern, textPattern, size, maxDepth; stopAtMatch keeps an icon instance whole. Hidden layers are skipped unless visibleOnly is false.

Input parameters:

- `fileKey` (string): The fileKey of the Figma file to query. Required when multiple files are connected. Use list_files to see connected files.
- `limit` (integer): Maximum matches returned (default 2000)
- `maxDepth` (integer): Do not descend deeper than this
- `maxSize` (number): Match only nodes whose larger side is at most this many px
- `minSize` (number): Match only nodes whose larger side is at least this many px
- `namePattern` (string): Case-insensitive regular expression the layer name must match
- `rootId` (string, required): Node whose subtree is searched
- `stopAtMatch` (boolean): Do not look inside a node that matched — so an icon instance is returned whole, not also as its inner vectors
- `textPattern` (string): Case-insensitive regular expression a TEXT node's characters must match
- `types` (array): Node types to match, e.g. ['INSTANCE','VECTOR','BOOLEAN_OPERATION','TEXT','FRAME']
- `visibleOnly` (boolean): Skip hidden layers and everything inside them (default true)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/muradyf-layerbridge/layerbridge#diagnostics

## Score history

- 2026-09-20: 67
- 2026-09-19: 67
- 2026-09-18: 67
- 2026-09-17: 67
- 2026-09-16: 67
- 2026-09-15: 67
- 2026-09-14: 52

## Common questions

### What is the Layerbridge MCP server?

Layerbridge is an MCP server listed in the public MCP registry as io.github.muradyf/layerbridge. Read, edit and export the Figma file open in a local plugin. No REST API, no rate limits. This page covers its npm package (layerbridge).

### Is the Layerbridge MCP server safe to use?

Layerbridge scores 67 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Layerbridge MCP server expose?

Layerbridge exposes 116 tools: get_local_components, create_component, combine_as_variants, create_instance, swap_component, and 111 more. Their descriptions and schemas cost roughly 16,209 tokens of context every time the server is loaded.

### Is the Layerbridge MCP server still maintained?

Layerbridge is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Layerbridge MCP server under?

Layerbridge declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/layerbridge
- Socket report: https://socket.dev/npm/package/layerbridge
- Repository: https://github.com/muradyf/layerbridge
- Changelog RSS feed: https://verifymcp.io/servers/muradyf-layerbridge/layerbridge.xml
- Changelog JSON feed: https://verifymcp.io/servers/muradyf-layerbridge/layerbridge.json
- HTML version of this page: https://verifymcp.io/servers/muradyf-layerbridge/layerbridge
