mcpField
F
figma-mcp-go

figma-mcp-go

ローカル
github.com/tunglt1810メディア・デザイン162 週間前に更新

figma-mcp-go について

figma-mcp-go は、ローカルの Figma プラグインを介して、開いている Figma ファイルを読み書きする MCP サーバーです。ノード、スタイル、変数、コンポーネント、プロトタイプを扱い、複数操作の一括実行にも対応します。

主な機能

  1. 01開いている Figma ファイルのリアルタイム読み書き
  2. 02スタイル、変数、コンポーネント、プロトタイプの管理
  3. 03デザイン内容の作成、編集、エクスポート
  4. 04複数手順の一括実行
  5. 05読み取り専用モードと元に戻す操作

活用シーン

  1. 01デザインからノードやスタイル情報を取得
  2. 02テキスト指示に基づくデザインの作成・修正
  3. 03スクリーンショット、フレーム PDF、デザイントークンの出力
  4. 04コンポーネント、テキスト、ページの一括編集

MCP 対応

MCP サーバーは Figma プラグインを通じてローカルで開いたファイルに接続し、デザインの読み取り、出力、作成、編集用のツールとプロンプトを MCP クライアントに公開します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"tunglt1810-figma-mcp-go": {
"command": "npx",
"args": [
"-y",
"@tunglt1810/figma-mcp-go"
]
}
}
}
起動コマンドnpx -y @tunglt1810/figma-mcp-go

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

パッケージ
npm@tunglt1810/figma-mcp-go0.6.0

ツール

60

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
nodeIdstringはいターゲットノード ID
targetstringいいえペイントスタイル:fill(デフォルト)または stroke
styleIdstringはいget_styles のスタイル ID

詳細

figma-mcp-go

Figma MCP — ローカルプラグイン統合 tunglt1810/figma-mcp-go server

npm version MCP Registry License: MIT GitHub stars

Figma プラグイン経由で読み取りと書き込みを完全に行えるオープンソースの Figma MCP サーバーです。テキストをデザインに、デザインをコードに変換します。Claude、Cursor、GitHub Copilot、およびあらゆる MCP クライアントで動作します。

主な特徴

  • Figma Plugin API 経由でローカル実行します。REST API トークンは不要です。
  • 開いている Figma ファイルをリアルタイムで読み取り、編集できます。60 個のツールを備えています。
  • スタイル、変数、コンポーネント、プロトタイプ、テキスト、取り消し可能な複数ステップの一括処理に対応しています。
  • read_design_strategy や design_strategy などの組み込みプロンプトを利用できます。
  • トークン使用量を抑えられます。短いツールの説明、上限を設けたノードツリー、画像として返される画像を採用しています。

スタイル、変数、コンポーネント、プロトタイプ、コンテンツ

https://github.com/user-attachments/assets/eae41471-fc72-4574-8261-4f42c38b8c99

テキストからデザインへ、デザインからコードへ

https://github.com/user-attachments/assets/17bda971-0e83-4f18-8758-8ac2b8dcba62


開発の背景

ほとんどの Figma MCP サーバーはクラウドの Figma REST API を使用します。AI ツールはセッションごとに何百回も素早く呼び出すため、クラウドとの通信が増えるたびに遅延が発生します。

このサーバーは代わりに、手元のマシン上の Figma プラグインと通信します。API トークンなしで、開いているファイルをすばやくリアルタイムに読み書きできます。


セットアップ

npx または bunx でインストールできます。ビルド手順は不要です。セットアップ動画を視聴するか、以下の手順に従ってください。

動画を視聴

1. AI ツールにサーバーを追加する

Claude Code CLI

# via npx
claude mcp add -s project figma-mcp-go -- npx -y @tunglt1810/figma-mcp-go@latest

# or via bunx
claude mcp add -s project figma-mcp-go -- bunx @tunglt1810/figma-mcp-go@latest

Codex CLI

# via npx
codex mcp add figma-mcp-go -- npx -y @tunglt1810/figma-mcp-go@latest

# or via bunx
codex mcp add figma-mcp-go -- bunx @tunglt1810/figma-mcp-go@latest

.mcp.json(Claude およびその他の MCP 互換ツール)

{
  "mcpServers": {
    "figma-mcp-go": {
      "command": "npx",
      "args": ["-y", "@tunglt1810/figma-mcp-go"]
    }
  }
}

.vscode/mcp.json(Cursor / VS Code / GitHub Copilot)

{
  "servers": {
    "figma-mcp-go": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@tunglt1810/figma-mcp-go"
      ]
    }
  }
}
2. Figma プラグインをインストールする
  1. Figma Desktop で、プラグイン → 開発 → マニフェストからプラグインをインポートを選択します。
  2. plugin.zip から manifest.json を選択します。
  3. 任意の Figma ファイルでプラグインを実行します。
3. 複数の AI ツールを使う(任意)

各 AI ツールはそれぞれ独自のサーバーを起動しますが、ポート上でプラグイン接続を保持できるのは 1 つだけです。

**同じファイルの場合:**何も変更する必要はありません。最初のサーバーがポート 1994 を使用し、ほかのサーバーはそのサーバーに呼び出しを転送します。停止した場合は、数秒以内に別のサーバーが引き継ぎます。

**別々のファイルの場合:**各ツールに専用のポートを割り当て、そのファイルのプラグインでも同じポートを設定します(設定の歯車アイコン)。

{
  "mcpServers": {
    "figma-mcp-go": {
      "command": "npx",
      "args": ["-y", "@tunglt1810/figma-mcp-go", "--port", "1995"]
    }
  }
}

プラグインはすべてのファイルで最後に使用したポートを記憶するため、別の場所でプラグインを開いたときはポートを確認してください。

--ip 0.0.0.0 を指定すると、ほかのマシンからの接続を受け付けます。

**セキュリティ:**プラグイン接続にはログイン機能がありません。デフォルトの 127.0.0.1 では、手元のマシンからのみ接続できます。それ以外のアドレスでは、ポートに接続できる人なら誰でも開いているファイルを読み取り、編集できます。サーバーは警告を表示し、プラグインは confirm モードを有効にします。SSH トンネルの使用をおすすめします。

4. 読み取り専用モード(任意)

--read-only を追加すると、Figma ファイルを変更できない 17 個のツールのみを提供します。対象は読み取りツール、export_screenshots、export_frames_to_pdf、および get_image_bytes です。AI が読み込むツールリストを約 84% 縮小できます。

{
  "mcpServers": {
    "figma-mcp-go": {
      "command": "npx",
      "args": ["-y", "@tunglt1810/figma-mcp-go", "--read-only"]
    }
  }
}

このフラグが制限するのは 1 つのサーバーのみです。同じポートを使う別の AI ツールがこのフラグを使っていない場合、引き続きファイルを編集できます。

プラグインパネル

パネルには、接続中のファイル、選択範囲、AI の処理内容が表示されます。

コントロール機能
ガードoff(デフォルト)はすべての操作を実行します。confirm は削除や一括変更の前に確認します。read-only はすべての変更をブロックします。
元に戻す直前の変更を元に戻します。batch_execute_pipeline の実行全体が 1 回の取り消しステップになります。
ログツール、時刻、エラーを含むすべてのリクエストを表示します。Copy を使うと、バグ報告用にエクスポートできます。
ピン留め現在の選択範囲を保存します。get_selection(source: "pinned") は、ユーザーが別の場所をクリックした後もその選択範囲を返します。

設定とパネルサイズはマシンごとに保存されます。パネルは Figma のライトテーマとダークテーマに追従します。

Dev Mode

set_codegen_result は、ノードにコードを保存します。コードは、そのファイルを利用する全員の Dev Mode の Code パネルに表示されます。コンポーネントに設定したコードは、すべてのインスタンスに表示されます。Language メニューでブロックを絞り込めます。指定した言語のブロックがない場合は、すべてのブロックが表示されます。


仕組み

最初に起動したサーバーがリーダーとなり、プラグインとの唯一の WebSocket 接続を保持します。それ以外のサーバーはフォロワーとなり、呼び出しをリーダーに転送します。

flowchart LR
    client([MCP client]) -- stdio --> tools
    client2([2nd MCP client]) -- stdio --> follower[Follower]

    subgraph leaderProc [Leader process]
        tools[tools<br/>60 tools, Check] -- Send --> leader[cluster.Leader<br/>:1994 /rpc /ws /ping]
        leader --> bridge[bridge<br/>request/response match]
    end

    follower -. POST /rpc .-> leader

    subgraph plugin [Figma plugin]
        ui[Plugin UI<br/>Svelte iframe] -- postMessage --> main[Plugin main<br/>dispatch handlers]
    end

    bridge == WebSocket ==> ui
    main -- read / write --> figma[(Figma document)]

ツール呼び出しの最初から最後まで:

sequenceDiagram
    participant C as MCP client
    participant T as tools
    participant L as cluster
    participant B as bridge
    participant U as Plugin UI
    participant M as Plugin main
    participant F as Figma

    C->>T: tools/call (stdio)
    T->>L: Send after Check
    Note over L: A follower first sends POST /rpc to the leader
    L->>B: forward
    B->>U: WebSocket request
    U->>M: postMessage
    M->>F: read / write nodes
    F-->>M: nodes
    M-->>U: response
    U-->>B: WebSocket reply
    B-->>L: matched by id
    L-->>T: (any, error)
    T-->>C: tool result

ツール

読み取り
ツール機能
get_document選択範囲、ページ、またはファイル全体のノードツリーを取得します。デフォルトでは 500 ノードで停止します。depth、maxNodes、detail、dedupe_components でサイズを調整できます
get_nodes_infoID を指定してノードの詳細情報を取得します。不明な ID は missing に格納されます。depth と maxNodes で子ノードを制限できます
get_selection選択中のノードを取得します。source: "pinned" を指定すると、ピン留めしたノードを取得します
get_metadataファイル名、現在のページ、すべてのページを取得します
search_nodesページ、ノード内、またはファイル全体で、名前やタイプを指定してノードを検索します
get_viewportビューポートの中心、ズーム倍率、表示領域を取得します
get_styles塗り、テキスト、エフェクト、グリッドのスタイルを取得します
get_variable_defs変数コレクション、モード、値を取得します
get_local_componentsすべてのコンポーネントとコンポーネントセットを取得します
get_instance_overridesインスタンスのコンポーネントプロパティと値を取得します
get_annotationsDev Mode の注釈を取得します
get_fonts現在のページのフォントを、使用頻度の高い順に取得します
get_reactionsノードのプロトタイプリアクションを取得します
エクスポート
ツール機能
export_screenshotsノードを画像としてエクスポートします。outputPath を指定するとファイルに保存され、指定しない場合は返されます(PNG/JPG は画像、SVG はテキスト)。項目を指定しない場合は選択範囲が対象です
export_frames_to_pdfフレームを 1 つの複数ページ PDF として保存します
get_image_bytes画像の塗りに使われている元の画像ファイルを base64 で取得します
export_tokens変数と塗りのスタイルを JSON または CSS としてエクスポートします
set_export_settingsノードのエクスポートプリセットを設定します
作成
ツール機能
create_nodeFRAME、RECTANGLE、ELLIPSE、STAR、POLYGON、LINE、または SECTION を作成します
create_textテキストノードを作成します(フォントを読み込みます)
create_vectorSVG からベクターを作成します(アイコンなど)
import_imageURL または base64 から、新しい長方形として、またはノード内に画像をインポートします
create_componentフレームをコンポーネントに変換します
create_component_instanceローカルまたはライブラリのコンポーネントのインスタンスを作成します
combine_as_variantsコンポーネントをバリアントセットにまとめます
manage_component_propertiesコンポーネントプロパティを追加、編集、削除、またはバインドします
create_connectorコネクター線を作成します。このツールは FigJam ファイルでのみ動作します
boolean_operation図形を UNION、SUBTRACT、INTERSECT、または EXCLUDE でブール演算します
flatten_nodesノードを 1 つのベクターに統合します
outline_strokeストロークを塗りつぶされた図形に変換します
編集
ツール説明
set_node_properties位置、サイズ、半径、表示状態、ロック、不透明度、回転、ブレンド、制約、レイヤー順、マスク、線
set_paint単色またはグラデーションの塗りつぶし、または線
set_auto_layoutオートレイアウト:方向、パディング、間隔、配置、HUG/FILL のサイズ設定、最小値/最大値
set_layout_grids列、行、または正方形のグリッド
set_effectsシャドウ、ぼかし、ノイズ、テクスチャ、ガラス
set_textテキストの内容とノード全体のテキスト設定
set_text_rangesテキストの一部のスタイル設定:太字、色、リンク、リスト
find_replace_textテキストの検索と置換。正規表現も使用可能
set_instance_overridesインスタンスのコンポーネントプロパティを設定
swap_componentインスタンスを別のローカルまたはライブラリのコンポーネントに差し替え
detach_instanceインスタンスを通常のフレームに変換
clone_nodeノードをコピー
reparent_nodesノードを別の親に移動
group_nodes / ungroup_nodesグループ化またはグループ解除
batch_rename_nodes名前、検索/置換、正規表現、接頭辞、または接尾辞で名前を変更
set_annotationsDev Mode の注釈(有料シート)
set_reactionsプロトタイプのリアクションを設定、追加、または削除
delete_nodesノードを削除
スタイル、変数、ページ
ツール説明
create_stylePAINT、TEXT、EFFECT、または GRID スタイル
update_paint_styleペイントスタイルの名前または色を変更
apply_style_to_nodeノードにスタイルを適用
delete_styleスタイルを削除
manage_variableコレクション、モード、変数の作成、値の設定、削除、ノードへのバインド
manage_pageページの追加、削除、名前変更、または移動
ワークフロー
ツール説明
batch_execute_pipeline1 回の呼び出しで複数の書き込みステップを実行し、ステップ間で結果を渡し、エラー時には元に戻します
set_selectionユーザーに表示するノードを選択してズーム
save_version_checkpoint大きな変更の前に名前付きバージョンを保存
set_codegen_resultDev Mode の Code パネル用のコードを保存
manage_plugin_dataファイル内のノードにキー/値形式のメモを保存
プロンプト
プロンプト説明
read_design_strategyデザインを適切に読み取る方法
design_strategyデザインの作成と編集の方法
text_replacement_strategyデザイン全体のテキストを分割して置換
annotation_conversion_strategy手動のメモを Figma の注釈に変換
swap_overrides_instancesインスタンス間でオーバーライドをコピー
reaction_to_connector_strategyプロトタイプのリンクをフローダイアグラムに変換

アップグレード

サーバーを更新するときは、プラグインも更新してください。 npx でサーバーは更新されますが、プラグインは手動でインストールします。古いプラグインでは新しいコマンドが拒否され、「Unknown request type」と表示されます。

各リリースでの変更点(削除されたツールや代わりに使用するツールなど)については、CHANGELOG.md をご覧ください。


開発

  • サーバー: Go 1.27 以降(make test-go、make build-go)
  • プラグイン: Bun 1.4 以降(cd plugin && bun install && bun run build)
  • すべてのテスト: make test
  • ログ: stderr。FIGMA_MCP_LOG=debug でツールのパラメーターと通信内容が表示されます。
  • パッケージのルール: make deps-check は誤った依存関係のインポートがあると失敗します。internal/ には bridge(プラグインの WebSocket)、cluster(リーダー選出)、figma(ルール)、tools(ツール一覧)があります。許可される依存関係:tools → figma、cluster → bridge。

macOS バイナリには macOS 13 以降が必要です(Go 1.27)。

貢献

Issue や PR を歓迎します。

Star History

Star History Chart

コメント

MCP は初めてですか?

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

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