mcpField
F
Figma Vector MCP

Figma Vector MCP

ローカル
workingmodel.coメディア・デザイン01 週間前に更新

Figma Vector MCP について

Figma Vector MCPは、MCPクライアントをFigmaプラグインにつなぎ、キャンバス上で編集可能なベクターを作成・操作できるようにします。パス、スタイル、レイアウト、コンポーネント、ページ、書き出しのツールを備え、ローカルWebSocketでコマンドを中継します。

主な機能

  1. 01SVGやパスから編集可能なベクターを作成
  2. 02図形、テキスト、グラデーション、画像塗りを追加
  3. 03エフェクト、線、ブレンドモードを調整
  4. 04オートレイアウトとコンポーネントを設定
  5. 05ノード、スタイル、フォントを検索
  6. 06コマンドの一括実行とSVG・PNG書き出し

活用シーン

  1. 01Figmaキャンバスでベクター作品を作成
  2. 02キャンバスノードのスタイルと配置を調整
  3. 03コンポーネントとドキュメントページを管理
  4. 04選択したノードやページを書き出し

MCP 対応

MCPサーバーはローカルWebSocketリレー経由でFigmaプラグインと通信し、キャンバスノードの作成・編集やドキュメント確認のツールをMCPクライアントに提供します。MCPクライアントはstdioでサーバーに接続します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"workingmodel-figma-vector": {
"command": "npx",
"args": [
"-y",
"figma-vector-mcp"
],
"env": {
"FVMCP_CHANNEL": "<FVMCP_CHANNEL>",
"FVMCP_PORT": "<FVMCP_PORT>"
}
}
}
}
起動コマンドnpx -y figma-vector-mcp
設定が必要な環境変数
FVMCP_CHANNELChannel name the Figma plugin joins on the local socket relay (default: figma-vector-mcp)
FVMCP_PORTPort of the local socket relay (default: 3055)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmfigma-vector-mcp0.3.3

ツール

58

掲載時のツール一覧 · 6 日前に更新

パラメーター型必須説明
channelstringはいチャンネル名(Figma プラグインと一致する必要があります)

詳細

Figma Vector MCP

Figma のプラグインと MCP サーバーを組み合わせ、ローカルの WebSocket リレーを介して、Claude(または任意の MCP クライアント)が Figma キャンバス上に、パス、図形、グラデーション、テキスト、エフェクト、画像塗りつぶしなど、完全に編集可能なベクターノードを作成・操作できるようにします。

Working Model Inc が開発しました。

npm version npm downloads

バージョン 0.3.3 — 作成、スタイル設定、レイアウト、コンポーネント、エフェクト、ページ、エクスポートに対応した 58 個のツール。

このツールを作った理由

cursor-talk-to-figma-mcp は、Figma の状態を読み取ったり基本的なプリミティブを作成したりするのに優れていますが、ベクターパスの作成、グラデーション、エフェクト、合成のツールはありません。このプラグインはその不足を補います。

機能cursor-talk-to-figma-mcpfigma-vector-mcp
長方形/楕円/フレーム/テキストを作成✅✅
SVG 文字列から作成❌✅
パスの d 文字列から作成❌✅
ポリライン/ポリゴンを作成❌✅
グラデーション塗りつぶし(線形、放射状、角度、ひし形)❌✅
画像塗りつぶし(base64 → キャンバス)❌✅
エフェクト(シャドウ、ぼかし)❌✅
ブレンドモード❌✅
ブーリアン演算(結合、減算など)❌✅
オートレイアウト❌✅
コンポーネントとインスタンス❌✅
フォントの検索❌✅
ノードの検索❌✅
複数ページの管理❌✅
名前付きノードレジストリ❌✅
バッチコマンド(1 回の往復で実行)❌✅
自動再接続とコマンドキュー❌✅
SVG と PNG のエクスポート❌✅

アーキテクチャ

Claude (MCP client)
  ↕ stdio (MCP protocol)
server.ts (MCP server)
  ↕ WebSocket (ws://localhost:3055)
socket.ts (relay — channel-based routing)
  ↕ WebSocket
Figma plugin (ui.html ↔ code.js)
  ↕ postMessage
Figma Plugin API → canvas

ソケットリレーはローカルで動作します。Figma プラグインが接続して、名前付きチャンネルに参加します。MCP サーバーも同じチャンネルに参加し、コマンドを送信します。結果は同じ経路を通って返されます。


AI エージェント向けクイックスタート

AI エージェント(Claude Code、Cursor など)向け — セッションを開始する際に推奨される呼び出し手順です。

1. health_check                    → confirm plugin is connected
2. get_document_info               → get page IDs, current page, top-level nodes
3. get_available_fonts             → discover loadable fonts before create_text
4. get_styles                      → load brand colours/text styles if available

色の規則: すべての RGB 値は、全体を通して 0~1 です(Figma の内部形式に準拠)。r: 1, g: 0, b: 0 は赤です。0~255 は使用しないでください。

グラデーションのワークフロー:

1. create_frame({ width, height })          → get frameId
2. set_gradient_fill({ nodeId: frameId, type: "LINEAR", angle: 135,
     stops: [{ color: { r:0.2, g:0.1, b:0.9 }, position: 0 },
             { color: { r:0.9, g:0.2, b:0.4 }, position: 1 }] })

画像塗りつぶしのワークフロー(生成 AI を使用):

1. Generate image via Replicate/fal.ai → get base64 PNG
2. create_frame({ width: 512, height: 512 })
3. set_image_fill({ nodeId, base64, scaleMode: "FILL" })

バッチ合成 — $prev.id を使うと、余分な往復なしでコマンドを連結できます。

{ "commands": [
    { "command": "create_frame", "params": { "width": 400, "height": 300, "name": "Card" } },
    { "command": "set_gradient_fill", "params": { "nodeId": "$prev.id", "type": "LINEAR",
        "stops": [{"color":{"r":0.1,"g":0.1,"b":0.9},"position":0},
                  {"color":{"r":0.8,"g":0.2,"b":0.5},"position":1}] } },
    { "command": "create_text", "params": { "parentId": "$results.0.id",
        "text": "Hello", "fontSize": 32, "x": 24, "y": 24 } }
]}

既知の SVG の制限: figma.createNodeFromSvg() は <defs>、グラデーション、フィルター、マスク、アニメーションを削除します。SVG の <linearGradient> の代わりに、グラデーションには set_gradient_fill を使用してください。

再接続: プラグインが切断されると、指数バックオフ(1 秒から最大 30 秒)で自動再接続し、キューに入ったコマンド(最大 30 秒前まで)を再送します。短時間の切断であれば手動での対応は不要です。


セットアップ

1 — プラグインをインストールする
  1. このリポジトリをクローンするか、ソースをダウンロードします
  2. Figma デスクトップアプリで、Plugins → Development → Import plugin from manifest を選択します
  3. src/figma-plugin/manifest.json を選択します
2 — MCP サーバーをインストールする
npm install -g figma-vector-mcp
# or use without installing via npx / bunx (see MCP config below)
3 — ソケットリレーを起動する
bun run socket

ws://localhost:3055 で待ち受けます。ログイン時に自動起動する(macOS):

./scripts/setup.sh --launchd
4 — MCP サーバーを設定する
# Auto-detect Claude Code / Cursor and write config:
./scripts/setup.sh

# Local build:
./scripts/setup.sh --local

# Install git pre-commit sandbox lint hook:
./scripts/setup.sh --hooks

手動設定(~/.claude/settings.json または ~/.cursor/mcp.json):

{
  "mcpServers": {
    "FigmaVectorMCP": {
      "command": "bunx",
      "args": ["figma-vector-mcp@latest"],
      "env": { "FVMCP_CHANNEL": "figma-vector-mcp" }
    }
  }
}
5 — プラグインを接続する
  1. Figma ファイルを開きます
  2. Plugins → Development → Figma Vector MCP を選択します
  3. サーバー URL(ws://localhost:3055)を入力し、Connect を選択します
  4. チャンネル名(figma-vector-mcp)を入力し、Join を選択します

プラグインは最後に使用した URL とチャンネルを保存するため、次回開いたときに入力済みの状態になります。セッション中はプラグインパネルを開いたままにしてください。閉じると WebSocket 接続が終了します。

6 — 動作を確認する
health_check → { "status": "ok", "version": "0.3.3", "currentPage": { ... } }

環境変数

変数デフォルト説明
FVMCP_PORT3055ソケットリレーのポート
FVMCP_CHANNELfigma-vector-mcpチャネル名 — プラグインと一致させる必要があります
FVMCP_TIMEOUT_MS10000デフォルトのコマンドタイムアウト(ms)

ツールごとのタイムアウト設定:health_check → 3s、export_node_as_png → 30s、export_node_as_svg → 15s、create_batch → 60s。


ツールリファレンス

接続とヘルスチェック
ツール説明主なパラメーター
health_checkプラグインに ping を送信し、接続を確認します—
join_channel名前付きチャネルに参加しますchannel
ベクターの作成
ツール説明主なパラメーター
create_vector_from_svgSVG 文字列から編集可能なベクターを配置しますsvg, x, y, name, parentId
create_pathSVG の d パス文字列からベクターを作成しますd, x, y, fillColor, strokeColor, strokeWeight
create_polyline[x,y][] の点のペアからベクターを作成しますpoints, closed, strokeColor, strokeWeight
プリミティブ
ツール説明主なパラメーター
create_frameコンテナーフレームwidth, height, x, y, fillColor
create_rectangle長方形width, height, x, y, fillColor
create_ellipse楕円/円width, height, x, y, fillColor
create_textオプションで固定幅の列を指定できるテキストノードtext, fontSize, fontFamily, fontStyle, fillColor, width, height, textAutoResize
塗りと色
ツール説明主なパラメーター
set_fill_color単色の RGBA 塗り(0–1)nodeId, r, g, b, a
set_gradient_fillグラデーション塗り — LINEAR、RADIAL、ANGULAR、DIAMONDnodeId, type, stops, angle, center, gradientTransform
set_image_fillBase64 画像を塗りとして設定しますnodeId, base64, scaleMode, opacity
ストローク
ツール説明主なパラメーター
set_strokeストロークを詳細に設定しますnodeId, color, weight, position, dashPattern, lineCap, lineJoin
set_stroke_colorストロークの色と太さを手早く設定しますnodeId, r, g, b, a, weight
エフェクトと合成
ツール説明主なパラメーター
set_effectドロップシャドウ、内側のシャドウ、ぼかし、背景のぼかしnodeId, effects[] (type, color, offset, blur, spread), mode (REPLACE | APPEND)
set_blend_modeレイヤーのブレンドモードnodeId, mode (NORMAL, MULTIPLY, SCREEN, OVERLAY…)
ノードの操作
ツール説明主なパラメーター
set_corner_radius角丸 — 全角共通または角ごとに指定nodeId, radius or topLeft, topRight, bottomLeft, bottomRight
set_opacity不透明度 0–1nodeId, opacity
set_text_styleテキストのプロパティとテキストボックスのサイズを変更しますnodeId, fontSize, fontFamily, fontStyle, letterSpacing, lineHeight, textAlign, fillColor, width, height, textAutoResize
rename_nodeノード名を変更しますnodeId, name
set_visibilityノードの表示/非表示を切り替えますnodeId, visible
reorder_node親内での Z 順を変更しますnodeId, action (BRING_TO_FRONT / SEND_TO_BACK / BRING_FORWARD / SEND_BACKWARD) or index
move_node位置を変更しますnodeId, x, y
resize_nodeサイズを変更しますnodeId, width, height
delete_nodeキャンバスから削除しますnodeId
clone_node複製し、必要に応じて位置を変更しますnodeId, x, y, parentId
group_nodesノードをグループ化しますnodeIds[], name, parentId
ungroup_nodesグループ化を解除しますnodeId
boolean_operation結合、減算、交差、除外nodeIds[], operation, name
create_maskクリッピングマスク — maskNode で targetNode をクリップしますmaskNodeId, targetNodeId, name
レイアウト
ツール説明主なパラメーター
set_auto_layout自動レイアウトを有効化/設定nodeId、direction、spacing、padding、primaryAxisAlign、counterAxisAlign、primaryAxisSizingMode、counterAxisSizingMode、wrap
set_layout_gridフレームに列/行/グリッドのガイドを設定nodeId、grids[](pattern、count、gutterSize、sectionSize、alignment、color)
batch_set_properties塗り/線/不透明度/位置/サイズを一括更新operations[](nodeId と任意のプロパティの組み合わせ)
コンポーネント
ツール説明主なパラメーター
create_componentフレーム/グループをコンポーネントに変換nodeId、name
create_instanceコンポーネントのインスタンスを配置componentId、x、y、parentId
get_componentsすべてのローカルコンポーネントを一覧表示—
get_library_components名前でローカルコンポーネントを検索query
ドキュメントとページ
ツール説明主なパラメーター
get_document_infoドキュメント名、ページ、現在のページの子要素—
get_selection現在選択されているノード—
get_node_info塗り、線、レイアウト、テキスト、制約など、ノードの詳細情報nodeId
set_focusビューポートをノードまでスクロールして選択nodeId
find_nodes名前やタイプで検索query、type、pageId、recursive
get_page_listすべてのページ—
switch_pageページをアクティブ化pageId または pageName
create_page新しいページを作成name
duplicate_frame_to_pageノードを別のページにコピーnodeId、targetPageId、x、y
ノードレジストリ
ツール説明主なパラメーター
register_nodeノード ID に名前付きエイリアスを保存(ドキュメントに保持)alias、nodeId
resolve_nodeエイリアスからノード ID を検索alias
カラーレジストリ
ツール説明主なパラメーター
register_color名前付きカラーをドキュメントのパレットに保存(0~1)alias、r、g、b、a
resolve_colorエイリアスからカラーを検索alias
list_colorsドキュメントに登録されたすべてのカラーを一覧表示—
スタイルとフォント
ツール説明主なパラメーター
get_stylesすべてのローカルのペイントスタイルとテキストスタイル—
apply_styleドキュメントのスタイルをノードに適用nodeId、styleId、styleType
get_available_fonts読み込み可能なフォントを一覧表示。名前で絞り込みquery
エクスポート
ツール説明主なパラメーター
export_node_as_svgノードを SVG 文字列としてエクスポートnodeId
export_node_as_pngbase64 PNG としてエクスポートnodeId、scale(デフォルトは 2)
screenshot_current_pageページ全体を base64 PNG としてエクスポートscale
バッチ
ツール説明主なパラメーター
create_batch複数のコマンドを 1 回のラウンドトリップで実行します。連鎖には $prev.id と $results.N.field のトークンを使用できます。commands[](command、params)

サンドボックスとの互換性

プラグインのメインスレッド(code.js)は、Figma の制限付き QuickJS サンドボックスで実行されます。UI(ui.html)は通常のブラウザーコンテキストであり、影響を受けません。

ビルド前に bun run lint:plugin を実行して、code.src.js に違反がないか確認してください。./scripts/install-hooks.sh を使用して、コミット前フックをインストールできます。

code.js で禁止されているもの
API / 構文安全な代替手段
import / export依存関係をすべてインライン化する
x ?? y(x != null) ? x : y
obj?.propobj && obj.prop
{ ...obj } / [ ...arr ]Object.assign({}, obj) / Array.from(arr)
localStoragefigma.clientStorage
TextDecoderString.fromCharCode をチャンク単位で使用する
fetch()メインスレッドでは使用できません
figma.getNodeById()(同期)await figma.getNodeByIdAsync()
figma.currentPage = x(同期代入)await figma.setCurrentPageAsync(x)
figma.getLocalPaintStyles()(同期)await figma.getLocalPaintStylesAsync()
figma.getLocalTextStyles()(同期)await figma.getLocalTextStylesAsync()
ページを読み込まずに figma.root.findAllWithCriteria() を呼び出す先に await figma.loadAllPagesAsync() を実行する
SVG の互換性(create_vector_from_svg)
機能状態
<rect>、<polygon>、<polyline>、<path>、<circle>、<ellipse>✅
fill、stroke、stroke-width、stroke-linecap、stroke-linejoin✅
viewBox、width、height✅
<defs> 内の <linearGradient> / <radialGradient>❌ 削除されます — set_gradient_fill を使用してください
<filter>、<mask>、<pattern>❌ 削除されます
<animate>、<animateTransform>❌ 削除されます
<script>、<foreignObject>❌ 削除されます
fill="url(#...)" 参照❌ fill="none" に置き換えられます

開発

bun install              # install deps
bun run socket           # start relay on :3055
bun run build            # build MCP server → dist/server.js
bun run build:plugin     # build plugin: code.src.js → code.js
bun run lint:plugin      # check code.src.js for sandbox violations
./scripts/install-hooks.sh  # install pre-commit lint hook
プラグインのワークフロー
  1. src/figma-plugin/code.src.js を編集します
  2. bun run lint:plugin — ビルド前にサンドボックスの違反を検出します
  3. bun run build:plugin — esbuild により code.js(ES2017)が出力されます
  4. Figma でプラグインパネルを閉じて再度開き、新しい code.js を読み込みます

クレジット

  • ソケットリレー(src/socket.ts)は cursor-talk-to-figma-mcp を基に改変 — Copyright (c) 2025 sonnylazuardi、MIT License
  • code.src.js の setCharacters ヘルパーは同じプロジェクトを基に改変 — Copyright (c) 2025 sonnylazuardi、MIT License

ライセンス

MIT © Working Model — LICENSE および THIRD_PARTY_NOTICES.md をご覧ください。


Working Model Inc が開発

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。