# Figma Vector MCP (npm · figma-vector-mcp)

Let Claude create and edit fully editable vector nodes on the Figma canvas.

- Trust score: 62/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-24

## Components

- npm · `figma-vector-mcp`: 62/100 (this document), [markdown](https://verifymcp.io/servers/workingmodel-figma-vector-mcp/figma-vector-mcp.md), [page](https://verifymcp.io/servers/workingmodel-figma-vector-mcp/figma-vector-mcp)

## Channel facts

- Registry: `npm`
- Package: `figma-vector-mcp`
- Version: `0.3.3`
- 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-10-24.

- **Supply Chain Security**: 80/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects uuid 10.0.0, a direct dependency. A fixed version is available.
  - No install/post-install scripts declared.
  - 31 of 94 dependencies flagged as unhealthy (1 deprecated).
- **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 1 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).
  - Tool/resource definitions use about 3967 tokens (~68/item across 58 items; 58 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 89/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 68% 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 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_node" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 58 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.

## Install

### How do I install the Figma Vector MCP server?

Figma Vector MCP runs locally as an npm package, launched with npx -y figma-vector-mcp. 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 workingmodel-figma-vector-mcp -- npx -y figma-vector-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "workingmodel-figma-vector-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "figma-vector-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "workingmodel-figma-vector-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "figma-vector-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add workingmodel-figma-vector-mcp -- npx -y figma-vector-mcp
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add workingmodel-figma-vector-mcp --command npx --arg -y --arg figma-vector-mcp
```

### Hermes

```yaml
mcp_servers:
  workingmodel-figma-vector-mcp:
    command: "npx"
    args: ["-y", "figma-vector-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "workingmodel-figma-vector-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "figma-vector-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add workingmodel-figma-vector-mcp -t stdio -c npx -a -y figma-vector-mcp
```

### Other

```json
{
  "mcpServers": {
    "workingmodel-figma-vector-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "figma-vector-mcp"
      ]
    }
  }
}
```

## 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-10-24 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 61, +15)

- [security improvement] Malware scan: unverified → pass
- [functional improvement] Stability: unverified → 0.03

### 2026-10-22 (score 46)

First indexed and scored.

## MCP tools (58)

### `join_channel` (~55 tokens)

Join a named channel on the Figma Vector MCP socket relay. Must be called before any drawing commands if the channel was not set via env/arg.

Input parameters:

- `channel` (string, required): Channel name (must match the Figma plugin)

### `health_check` (~24 tokens)

Ping the Figma plugin and confirm connectivity. Returns plugin version and current page.

### `create_vector_from_svg` (~105 tokens)

Place a fully editable vector node on the Figma canvas from an SVG string. Supports any valid SVG including paths, polylines, polygons, circles, and groups. The created node is fully editable in Figma.

Input parameters:

- `name` (string): Layer name
- `parentId` (string): Parent frame/group node ID
- `svg` (string, required): Complete SVG string including <svg> wrapper
- `x` (number)
- `y` (number)

### `create_path` (~119 tokens)

Create an editable vector from a single SVG path `d` attribute string. Shorthand for simple paths without a full SVG wrapper.

Input parameters:

- `d` (string, required): SVG path data string (the `d` attribute)
- `fillColor` (object): Fill color
- `name` (string): Layer name
- `parentId` (string): Parent frame/group node ID
- `strokeColor` (object): Stroke color
- `strokeWeight` (number): Stroke width in pixels
- `x` (number)
- `y` (number)

### `create_polyline` (~115 tokens)

Create an editable vector from an array of [x, y] point pairs. Use closed=true to produce a filled polygon.

Input parameters:

- `closed` (boolean): Close the path into a polygon
- `name` (string): Layer name
- `parentId` (string): Parent frame/group node ID
- `points` (array, required): Array of [x, y] coordinate pairs
- `strokeColor` (object)
- `strokeWeight` (number)
- `x` (number)
- `y` (number)

### `create_frame` (~78 tokens)

Create a Figma frame (container) on the canvas.

Input parameters:

- `fillColor` (object)
- `height` (number, required)
- `name` (string): Layer name
- `parentId` (string): Parent frame/group node ID
- `width` (number, required)
- `x` (number)
- `y` (number)

### `create_rectangle` (~75 tokens)

Create a rectangle on the Figma canvas.

Input parameters:

- `fillColor` (object)
- `height` (number, required)
- `name` (string): Layer name
- `parentId` (string): Parent frame/group node ID
- `width` (number, required)
- `x` (number)
- `y` (number)

### `create_ellipse` (~80 tokens)

Create an ellipse (or circle) on the Figma canvas.

Input parameters:

- `fillColor` (object)
- `height` (number, required)
- `name` (string): Layer name
- `parentId` (string): Parent frame/group node ID
- `width` (number, required)
- `x` (number)
- `y` (number)

### `create_text` (~196 tokens)

Create a text node on the Figma canvas. Use width to fix the column width and enable text wrapping.

Input parameters:

- `fillColor` (object)
- `fontFamily` (string)
- `fontSize` (number)
- `fontStyle` (string)
- `height` (number): Fixed height in px — clips or scrolls content. Only meaningful when width is also set.
- `name` (string): Layer name
- `parentId` (string): Parent frame/group node ID
- `text` (string, required): Text content
- `textAutoResize` (string): Resize behaviour. HEIGHT (default when width set): fix width, grow height. NONE: fixed box. WIDTH_AND_HEIGHT: auto-size both (default).
- `width` (number): Fixed column width in px — enables text wrapping. Height grows automatically unless height is also set.
- `x` (number)
- `y` (number)

### `set_gradient_fill` (~193 tokens)

Apply a gradient fill to a Figma node. Supports LINEAR, RADIAL, ANGULAR (conic), and DIAMOND types. Replaces any existing fills. Stops must be sorted by position (0 → 1).

Input parameters:

- `angle` (number): Rotation in degrees — 0 = top→bottom, 90 = left→right (LINEAR and ANGULAR)
- `center` (array): Focal point [cx, cy] in 0–1 node-relative coordinates (RADIAL and DIAMOND, default [0.5, 0.5])
- `gradientTransform` (array): Raw 2×3 affine gradientTransform matrix — overrides angle/center when provided
- `nodeId` (string, required): Figma node ID
- `stops` (array, required): At least 2 colour stops, sorted by position 0→1
- `type` (string): Gradient type

### `set_auto_layout` (~186 tokens)

Enable auto-layout on a frame and configure direction, spacing, padding, and alignment. Set direction to NONE to disable auto-layout.

Input parameters:

- `counterAxisAlign` (string): Alignment along cross axis
- `counterAxisSizingMode` (string): Sizing along cross axis — FIXED holds the frame size, AUTO hugs children (default AUTO)
- `direction` (string): Layout direction
- `nodeId` (string, required): Figma node ID
- `padding`: Padding — single number (all sides) or {top, right, bottom, left}
- `primaryAxisAlign` (string): Alignment along main axis
- `primaryAxisSizingMode` (string): Sizing along main axis — FIXED holds the frame size, AUTO hugs children (default AUTO)
- `spacing` (number): Gap between children in pixels
- `wrap` (boolean): Enable wrapping (WRAP)

### `create_component` (~42 tokens)

Convert an existing frame or group into a reusable Figma component.

Input parameters:

- `name` (string): Layer name
- `nodeId` (string, required): Figma node ID

### `create_instance` (~72 tokens)

Place an instance of a local component on the canvas by component ID.

Input parameters:

- `componentId` (string, required): ID of the source component node
- `name` (string): Layer name
- `parentId` (string): Parent frame/group node ID
- `x` (number)
- `y` (number)

### `set_fill_color` (~74 tokens)

Set the fill color of a Figma node.

Input parameters:

- `a` (number)
- `b` (number, required): Blue 0–1
- `g` (number, required): Green 0–1
- `nodeId` (string, required): Figma node ID
- `r` (number, required): Red 0–1

### `set_stroke_color` (~87 tokens)

Set the stroke color (and optional weight) of a Figma node.

Input parameters:

- `a` (number)
- `b` (number, required): Blue 0–1
- `g` (number, required): Green 0–1
- `nodeId` (string, required): Figma node ID
- `r` (number, required): Red 0–1
- `weight` (number)

### `set_stroke` (~111 tokens)

Set comprehensive stroke properties on a node: color, weight, position, dash pattern, line cap, and line join.

Input parameters:

- `color` (object): Stroke color
- `dashPattern` (array): Dash pattern e.g. [8, 4] for dashed
- `lineCap` (string)
- `lineJoin` (string)
- `nodeId` (string, required): Figma node ID
- `position` (string): Stroke alignment
- `weight` (number): Stroke width in pixels

### `set_text_style` (~159 tokens)

Modify typographic properties of an existing text node without replacing its content. Also use to set or update text box width and wrapping.

Input parameters:

- `fillColor` (object)
- `fontFamily` (string)
- `fontSize` (number)
- `fontStyle` (string): e.g. Regular, Bold, Italic
- `height` (number): Fix height in px (clips content)
- `letterSpacing` (number): Letter spacing in pixels
- `lineHeight`: Line height in pixels or 'AUTO'
- `nodeId` (string, required): Figma node ID
- `textAlign` (string)
- `textAutoResize` (string)
- `width` (number): Fix column width in px to enable wrapping

### `set_corner_radius` (~104 tokens)

Set corner radius of a rectangle or frame. Use radius for uniform corners or topLeft/topRight/bottomLeft/bottomRight for individual corners (e.g. pill, tab, card shapes).

Input parameters:

- `bottomLeft` (number)
- `bottomRight` (number)
- `nodeId` (string, required): Figma node ID
- `radius` (number): Uniform radius for all corners
- `topLeft` (number)
- `topRight` (number)

### `set_opacity` (~47 tokens)

Set the opacity of a Figma node (0 = invisible, 1 = fully opaque).

Input parameters:

- `nodeId` (string, required): Figma node ID
- `opacity` (number, required)

### `move_node` (~47 tokens)

Move a Figma node to a new position on the canvas.

Input parameters:

- `nodeId` (string, required): Figma node ID
- `x` (number, required)
- `y` (number, required)

### `resize_node` (~46 tokens)

Resize a Figma node to the given width and height.

Input parameters:

- `height` (number, required)
- `nodeId` (string, required): Figma node ID
- `width` (number, required)

### `delete_node` (~29 tokens)

Delete a node from the Figma canvas.

Input parameters:

- `nodeId` (string, required): Figma node ID

### `clone_node` (~59 tokens)

Duplicate a Figma node, optionally repositioning the clone.

Input parameters:

- `nodeId` (string, required): Figma node ID
- `parentId` (string): Parent frame/group node ID
- `x` (number)
- `y` (number)

### `rename_node` (~38 tokens)

Rename a Figma node.

Input parameters:

- `name` (string, required): New name for the node
- `nodeId` (string, required): Figma node ID

### `set_visibility` (~42 tokens)

Show or hide a Figma node.

Input parameters:

- `nodeId` (string, required): Figma node ID
- `visible` (boolean, required): true = visible, false = hidden

### `reorder_node` (~78 tokens)

Change a node's Z-order within its parent. Use action for relative moves or index for an absolute position (0 = bottom of stack).

Input parameters:

- `action` (string): Relative reorder action
- `index` (integer): Absolute stack index (0 = bottom). Overrides action if both provided.
- `nodeId` (string, required): Figma node ID

### `group_nodes` (~54 tokens)

Group multiple Figma nodes into a group layer.

Input parameters:

- `name` (string): Layer name
- `nodeIds` (array, required): Array of node IDs to group
- `parentId` (string): Parent frame/group node ID

### `ungroup_nodes` (~34 tokens)

Ungroup a group node, returning its children to the parent.

Input parameters:

- `nodeId` (string, required): Figma node ID

### `create_batch` (~69 tokens)

Execute multiple commands in a single round-trip. Commands run sequentially. Each result includes success/error status. Use this for complex compositions (e.g. place an SVG, add a label, group them) to avoid multiple round-trips.

Input parameters:

- `commands` (array, required): Ordered list of commands to execute

### `get_document_info` (~31 tokens)

Get information about the current Figma document: name, current page, all pages, and top-level nodes.

### `get_selection` (~22 tokens)

Get the currently selected nodes in Figma, including position and size.

### `get_node_info` (~41 tokens)

Get detailed information about a specific node by ID: type, position, size, opacity, children.

Input parameters:

- `nodeId` (string, required): Figma node ID

### `set_focus` (~34 tokens)

Scroll the Figma viewport to focus on a node and select it.

Input parameters:

- `nodeId` (string, required): Figma node ID

### `get_page_list` (~19 tokens)

List all pages in the current Figma document.

### `switch_page` (~50 tokens)

Switch to a different page in the Figma document by ID or name.

Input parameters:

- `pageId` (string): Page ID
- `pageName` (string): Page name (used if pageId not provided)

### `get_styles` (~35 tokens)

Get all local paint styles and text styles defined in the Figma document. Use these IDs with apply_style to keep output on-brand.

### `apply_style` (~68 tokens)

Apply a named document style (paint or text) to a node by style ID.

Input parameters:

- `nodeId` (string, required): Figma node ID
- `styleId` (string, required): Style ID from get_styles
- `styleType` (string): Hint for style type (auto-detected if omitted)

### `get_available_fonts` (~63 tokens)

List all fonts available in this Figma environment (system fonts + Figma font agent). Use before create_text to verify a font is loadable. Optionally filter by family name substring.

Input parameters:

- `query` (string): Filter by family name (case-insensitive contains)

### `get_components` (~18 tokens)

List all local components in the Figma document.

### `export_node_as_svg` (~51 tokens)

Export a Figma node as an SVG string. Useful for round-tripping: create a vector, modify it in Figma, export back.

Input parameters:

- `nodeId` (string, required): Figma node ID

### `export_node_as_png` (~64 tokens)

Export a Figma node as a base64-encoded PNG at the specified pixel scale.

Input parameters:

- `nodeId` (string, required): Figma node ID
- `scale` (number): Pixel scale (1 = 1x, 2 = 2x, etc.)

### `find_nodes` (~108 tokens)

Search for nodes by name (case-insensitive contains) and/or type. Scoped to a page (defaults to current page). Recursive by default.

Input parameters:

- `pageId` (string): Page ID to search in (defaults to current page)
- `query` (string): Name substring to search for (case-insensitive)
- `recursive` (boolean): Search nested children (default true)
- `type`: Node type(s) to filter by, e.g. 'FRAME', ['TEXT','RECTANGLE']

### `create_page` (~30 tokens)

Create a new page in the Figma document.

Input parameters:

- `name` (string, required): Name of the new page

### `duplicate_frame_to_page` (~76 tokens)

Copy a node to a target page at an optional position.

Input parameters:

- `nodeId` (string, required): Figma node ID
- `targetPageId` (string, required): ID of the page to copy the node to
- `x` (number): X position on target page
- `y` (number): Y position on target page

### `batch_set_properties` (~45 tokens)

Update fill color, stroke color, opacity, position, and/or size on multiple nodes in a single round-trip.

Input parameters:

- `operations` (array, required): Array of per-node property updates

### `set_effect` (~98 tokens)

Apply effects (drop shadow, inner shadow, layer blur, background blur) to a node. Use mode REPLACE (default) to overwrite all effects, or APPEND to add to existing ones.

Input parameters:

- `effects` (array, required): One or more effects to apply
- `mode` (string): REPLACE overwrites all existing effects (default). APPEND adds to the existing effects array.
- `nodeId` (string, required): Figma node ID

### `set_blend_mode` (~42 tokens)

Set the blend mode of a node layer.

Input parameters:

- `mode` (string, required): Figma blend mode
- `nodeId` (string, required): Figma node ID

### `set_image_fill` (~108 tokens)

Set a node's fill to a base64-encoded image. Use with image generation APIs (Replicate, fal.ai) to place rendered imagery directly on canvas.

Input parameters:

- `base64` (string, required): Base64-encoded image data (PNG, JPEG, or WebP)
- `mimeType` (string)
- `nodeId` (string, required): Figma node ID
- `opacity` (number)
- `scaleMode` (string): How the image is scaled within the node bounds

### `boolean_operation` (~66 tokens)

Perform a boolean operation (union, subtract, intersect, exclude) on 2 or more vector nodes.

Input parameters:

- `name` (string): Name for the resulting node
- `nodeIds` (array, required): IDs of nodes to combine (order matters for subtract)
- `operation` (string, required)

### `set_layout_grid` (~41 tokens)

Apply column, row, or uniform grid guides to a frame.

Input parameters:

- `grids` (array, required)
- `nodeId` (string, required): Figma node ID

### `register_node` (~66 tokens)

Save a named alias for a node ID, persisted in the Figma document. Use resolve_node to retrieve it later.

Input parameters:

- `alias` (string, required): Semantic name, e.g. 'background', 'hero-frame'
- `nodeId` (string, required): Node ID to associate with the alias

### `resolve_node` (~40 tokens)

Look up a node ID by its registered alias. Returns the node ID previously saved with register_node.

Input parameters:

- `alias` (string, required): The alias to look up

### `register_color` (~89 tokens)

Save a named color alias to the document palette. All RGB values are 0–1. Use resolve_color or list_colors to retrieve.

Input parameters:

- `a` (number)
- `alias` (string, required): Name for this color, e.g. 'brand-blue', 'amber', 'near-black'
- `b` (number, required)
- `g` (number, required)
- `r` (number, required)

### `resolve_color` (~44 tokens)

Look up a color by its registered alias. Returns r, g, b, a values (0–1).

Input parameters:

- `alias` (string, required): The color alias to look up

### `list_colors` (~19 tokens)

List all color aliases registered in this document's palette.

### `screenshot_current_page` (~54 tokens)

Export the current Figma page as a base64-encoded PNG. Useful for visual verification of the canvas state.

Input parameters:

- `scale` (number): Pixel scale (1 = 1×, 2 = 2×)

### `get_library_components` (~43 tokens)

List components available for use. Returns local document components. Filter by name with optional query.

Input parameters:

- `query` (string): Filter by component name (case-insensitive contains)

### `create_mask` (~84 tokens)

Apply a clip mask — maskNode defines the shape, targetNode is clipped to it. Both nodes are grouped.

Input parameters:

- `maskNodeId` (string, required): ID of the node to use as the mask shape (bottom layer)
- `name` (string): Name for the resulting group
- `targetNodeId` (string, required): ID of the node to be masked (top layer)

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/workingmodel-figma-vector-mcp/figma-vector-mcp#diagnostics

## Score history

- 2026-10-24: 62
- 2026-10-23: 61
- 2026-10-22: 46

## Common questions

### What is the Figma Vector MCP server?

Figma Vector MCP is listed in the public MCP registry as io.github.workingmodel/figma-vector-mcp. Let Claude create and edit fully editable vector nodes on the Figma canvas. This page covers its npm package (figma-vector-mcp).

### Is the Figma Vector MCP server safe to use?

Figma Vector MCP scores 62 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 24 October 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 Figma Vector MCP server expose?

Figma Vector MCP exposes 58 tools: join_channel, health_check, create_vector_from_svg, create_path, create_polyline, and 53 more. Their descriptions and schemas cost roughly 3,967 tokens of context every time the server is loaded.

### Is the Figma Vector MCP server still maintained?

Figma Vector MCP is still listed as active in the MCP registry. We last reached this channel on 24 October 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 Figma Vector MCP server under?

Figma Vector MCP 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/figma-vector-mcp
- Socket report: https://socket.dev/npm/package/figma-vector-mcp
- Repository: https://github.com/workingmodel/wm-figma-vector-mcp
- Website: https://www.workingmodel.co/
- Changelog RSS feed: https://verifymcp.io/servers/workingmodel-figma-vector-mcp/figma-vector-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/workingmodel-figma-vector-mcp/figma-vector-mcp.json
- HTML version of this page: https://verifymcp.io/servers/workingmodel-figma-vector-mcp/figma-vector-mcp
