---
title: "Figma MCP server for AI agents - actionlake"
description: "Give Claude 54 Figma actions through one MCP server: library analytics, webhooks, files. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/figma
updated: 2026-09-21
---

Connectors · Marketing & media

# Figma MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Figma and the rest of your systems. It gives your agent 54 Figma actions (43 reads, 7 writes and 4 that wait for a confirmation) and holds the Figma credential itself, so the agent never does. It paces Figma's limits and records every call.

[Connect Figma free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "figma.webhooks.list",
  intent: "check which Figma account is connected"
}
# Get webhooks by context or plan · read · 1 upstream call
```

- 54 actions in one signed file
- 43 read look, never change
- 7 write create and update
- 4 wait for a yes destructive, confirmed first

Set up

## Connect Figma in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Figma.
   API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `personal_access_token` Figma personal access token (`figd_...`), created under Settings > Security > Personal access tokens
   ```
   account { op: "connections.requirements", service: "figma" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "figma.webhooks.list" }
   # get webhooks by context or plan · read · 1 upstream call
   check { action: "figma.comments.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Figma at a glance

**Sign-in**

API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`personal_access_token`

**Limits we pace to**

10 calls a minute, per connection

**API covered**

Figma API 0.42.0`api.figma.com`

**Built from**

Figma's documentation, read 19 September 2026[OpenAPI spec (GitHub)](https://raw.githubusercontent.com/figma/rest-api-spec/main/openapi/openapi.yaml)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

43 of 43 reads, for up to an hour; a write clears what it affects

**Ready-made plans**

7 in the store

**Shared entities**

4, so ask can line Figma up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Figma.

54 actions in 21 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **43** read look, never change
- **7** write create and update
- **4** destructive wait for a confirmation

1. ### Library analytics
   6
   6 read · 0 write · 0 destructive
   Get library analytics component action data · Get library analytics component usage data · Get library analytics style action data · Get library analytics style usage data
2. ### Webhooks
   6
   3 read · 2 write · 1 destructive
   Create a webhook · Get team webhooks (deprecated) · Get webhooks by context or plan · Update a webhook
3. ### Files
   5
   5 read · 0 write · 0 destructive
   Get files in a folder · Get files in a project (deprecated) · Get file metadata · Get file JSON for specific nodes
4. ### Dev resources
   4
   1 read · 2 write · 1 destructive
   Create dev resources · Get dev resources · Update dev resources · Delete dev resource
5. ### Comment reactions
   3
   1 read · 1 write · 1 destructive
   Get reactions for a comment · Add a reaction to a comment · Delete a reaction
6. ### Comments
   3
   1 read · 1 write · 1 destructive
   Get comments in a file · Add a comment to a file · Delete a comment
7. ### Component sets
   3
   3 read · 0 write · 0 destructive
   Get file component sets · Get team component sets · Get component set
8. ### Components
   3
   3 read · 0 write · 0 destructive
   Get file components · Get team components · Get component

**13 more areas · 21 actions**

- Folders **3**
- Styles **3**
- Variables **3**
- Images **2**
- Projects **2**
- Activity logs **1**
- AI usage **1**
- Developer logs **1**
- File versions **1**
- Oembed **1**
- Payments **1**
- Users **1**
- Webhook requests **1**

Top actions

## The Figma API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 25 of Figma's 34 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `figma.team_folders.list` Get top-level folders in a team | List a team's top-level folders (previously called projects). Each has a null parent_folder_id. | read | `content.folder.list` 62 connectors |
| `figma.comments.list` Get comments in a file | List every comment on a file, including replies. | read | `content.file_comment.list` 12 connectors |
| `figma.users.me` Get current user | Read the authenticated Figma user's ID, handle, profile image and email. | read | `identity.user.get` 399 connectors |
| `figma.team_projects.list` Get projects in a team (deprecated) | List a team's top-level projects. Deprecated by Figma in favour of figma.team_folders.list. | read | `content.folder.list` 62 connectors |
| `figma.folder_files.list` Get files in a folder | List the files held directly in a folder. | read | `content.design_file.list` 3 connectors |
| `figma.comments.create` Add a comment to a file | Post a comment on a file, optionally pinned to a canvas point, a node or a region, or as a reply. | write | `content.file_comment.create` 11 connectors |
| `figma.image_fills.list` Get image fills | Get download URLs for every user-supplied image used as an image fill in a file. | read | `content.file.list` 77 connectors |
| `figma.project_files.list` Get files in a project (deprecated) | List every file in a project. Deprecated in favour of figma.folder_files.list. | read | `content.design_file.list` 3 connectors |
| `figma.comments.delete` Delete a comment | Delete a comment. Only the comment's author may delete it. | destructive | `content.file_comment.delete` 9 connectors |
| `figma.dev_resources.create` Create dev resources | Attach one or more dev resource links to nodes across files. | write | `content.file_link.create` 18 connectors |
| `figma.dev_resources.list` Get dev resources | List the dev resource links attached to a file, optionally narrowed to some nodes. | read | `content.file_link.list` 12 connectors |
| `figma.webhooks.create` Create a webhook | Subscribe an HTTP endpoint to a Figma event on a team, project or file. | write | `automation.webhook.create` 209 connectors |

Try it

## Prompts to paste into Claude.

Each one names the Figma actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Who has access in Figma? List every user and their role.
   calls `figma.users.me`
2. Plan read
   Report on library component, style and variable usage in Figma.
   calls `figma.file_components.list` `figma.file_component_sets.list` `figma.local_variables.list` `figma.library_analytics.component_usages` `figma.library_analytics.style_usages` +2 more
3. Plan read
   Build a developer handoff pack for a Figma file in Figma.
   calls `figma.file_meta.get` `figma.file_nodes.get` `figma.file_components.list` `figma.file_styles.list` `figma.dev_resources.list` +1 more
4. Write write
   Add a comment to a file in Figma. Show me exactly what you will send before you save it.
   calls `figma.comments.create`

The plan store

## Ready-made plans for Figma.

7 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

1. ### Audit every file in a project for recent activity
   Use it when You need to know which files inside a Figma project have changed recently and which are stale.
   **Effect**
   read
   **Steps**
   4 · loops
   **Needs**
   project id
   **Install**
   `figma-project-file-audit`
2. ### Build a developer handoff pack for a Figma file
   Use it when An engineer is about to build a screen and needs the file's components, styles, dev links and rendered node images in one pass.
   **Effect**
   read
   **Steps**
   6
   **Needs**
   file key and node ids
   **Install**
   `figma-file-handoff-pack`
3. ### Report on library component, style and variable usage
   Use it when A design systems owner asks which components, styles or variables of a library are actually being used.
   **Effect**
   read
   **Steps**
   7
   **Needs**
   file key, start date and end date
   **Install**
   `figma-design-system-usage-report`
4. ### Triage open comments on a design file
   Use it when A design review has piled up comments and you want the matching ones acknowledged and a summary posted back on the file.
   **Effect**
   write
   **Steps**
   3 · loops
   **Needs**
   file key and term
   **Install**
   `figma-triage-file-comments`
5. ### Register a webhook for a team and verify it fires
   Use it when Someone wants a new Figma team webhook created and proven to deliver, not just registered.
   A person decides Register a _event type_ webhook for team _team id_ pointing at _endpoint_ (team already has _number of items_).
   **Effect**
   write
   **Steps**
   6
   **Needs**
   team id, event type, endpoint and passcode
   **Install**
   `figma-register-file-webhook`
6. ### Attach ticket links to design nodes as dev resources
   Use it when Engineering tickets or specs need to be attached to specific Figma nodes as dev resources.
   A person decides Attach _number of dev resources_ dev resource link(s) to _name_, which already has _number of items_.
   **Effect**
   write
   **Steps**
   7
   **Needs**
   file key, node ids and dev resources
   **Install**
   `figma-publish-dev-resources`
7. ### Delete resolved chatter from a file after sign-off
   Use it when A file is cluttered with resolved or throwaway comments and someone has agreed they can be removed.
   A person decides Permanently delete every comment matching "_marker_" from _name_ (up to 100 of the _number of items_ comments read).
   **Effect**
   destructive
   **Steps**
   5 · loops
   **Needs**
   file key and marker
   **Install**
   `figma-prune-stale-comments`

install a plan

```
account { op: "plans.install", slug: "figma-project-file-audit" }
# then ask for it by name; a schedule can run it on a timetable
```

Governance for Figma

## Destructive actions wait for a yes.

4 Figma actions are destructive. These are all of them:

- Delete a comment `figma.comments.delete`
- Delete dev resource `figma.dev_resources.delete`
- Delete a webhook `figma.webhooks.delete`
- Delete a reaction `figma.comment_reactions.delete`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do figma.comments.delete confirm_policy: **human**

Delete a comment?

**intent:** the user asked me to delete a comment

run suspended · waiting for a named person · key _figma-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "figma-agent",
  allowed_actions: ["figma.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "figma.comments.delete", approver: "lead@example.com" },
    { match: "figma.dev_resources.delete", approver: "lead@example.com" },
    { match: "figma.webhooks.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Figma only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Figma costs on actionlake.

Every Figma action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Figma refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 54 Figma actions
- 54 actions page each page of a long list is one call
- 43 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Figma action.

54 actions by area: the id your agent calls, what it does, and its effect.

**Library analytics 6**

- `figma.library_analytics.component_actions` Get library analytics component action data read
- `figma.library_analytics.component_usages` Get library analytics component usage data read
- `figma.library_analytics.style_actions` Get library analytics style action data read
- `figma.library_analytics.style_usages` Get library analytics style usage data read
- `figma.library_analytics.variable_actions` Get library analytics variable action data read
- `figma.library_analytics.variable_usages` Get library analytics variable usage data read

**Webhooks 6**

- `figma.team_webhooks.list` Get team webhooks (deprecated) read
- `figma.webhooks.create` Create a webhook write
- `figma.webhooks.delete` Delete a webhook destructive
- `figma.webhooks.get` Get a webhook read
- `figma.webhooks.list` Get webhooks by context or plan read
- `figma.webhooks.update` Update a webhook write

**Files 5**

- `figma.file_meta.get` Get file metadata read
- `figma.file_nodes.get` Get file JSON for specific nodes read
- `figma.files.get` Get file JSON read
- `figma.folder_files.list` Get files in a folder read
- `figma.project_files.list` Get files in a project (deprecated) read

**Dev resources 4**

- `figma.dev_resources.create` Create dev resources write
- `figma.dev_resources.delete` Delete dev resource destructive
- `figma.dev_resources.list` Get dev resources read
- `figma.dev_resources.update` Update dev resources write

**Comment reactions 3**

- `figma.comment_reactions.create` Add a reaction to a comment write
- `figma.comment_reactions.delete` Delete a reaction destructive
- `figma.comment_reactions.list` Get reactions for a comment read

**Comments 3**

- `figma.comments.create` Add a comment to a file write
- `figma.comments.delete` Delete a comment destructive
- `figma.comments.list` Get comments in a file read

**Component sets 3**

- `figma.component_sets.get` Get component set read
- `figma.file_component_sets.list` Get file component sets read
- `figma.team_component_sets.list` Get team component sets read

**Components 3**

- `figma.components.get` Get component read
- `figma.file_components.list` Get file components read
- `figma.team_components.list` Get team components read

**Folders 3**

- `figma.folder_folders.list` Get subfolders in a folder read
- `figma.folders.get_meta` Get folder metadata read
- `figma.team_folders.list` Get top-level folders in a team read

**Styles 3**

- `figma.file_styles.list` Get file styles read
- `figma.styles.get` Get style read
- `figma.team_styles.list` Get team styles read

**Variables 3**

- `figma.local_variables.list` Get local variables read
- `figma.published_variables.list` Get published variables read
- `figma.variables.modify` Create, modify and delete variables write

**Images 2**

- `figma.image_fills.list` Get image fills read
- `figma.images.render` Render images of file nodes read

**Projects 2**

- `figma.project_meta.get` Get project metadata (deprecated) read
- `figma.team_projects.list` Get projects in a team (deprecated) read

**Activity logs 1**

- `figma.activity_logs.list` Get activity logs read

**AI usage 1**

- `figma.ai_usage.list_daily` Get daily AI credit usage read

**Developer logs 1**

- `figma.developer_logs.list` Get developer logs read

**File versions 1**

- `figma.file_versions.list` Get versions of a file read

**Oembed 1**

- `figma.oembed.get` Get oEmbed data read

**Payments 1**

- `figma.payments.get` Get payments read

**Users 1**

- `figma.users.me` Get current user read

**Webhook requests 1**

- `figma.webhook_requests.list` Get webhook requests read

Questions

## The Figma MCP server, answered.

**Is there a Figma MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 54 Figma actions across library analytics, webhooks, files and dev resources, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Figma.

**What do I need to connect Figma?**

Figma personal access token (`figd_...`), created under Settings > Security > Personal access tokens. The free call account { op: "connections.requirements", service: "figma" } lists exactly what to paste.

**Can an AI agent delete or change things in Figma?**

Only if its key allows it, and only with an explicit confirmation. 4 Figma actions are destructive, including delete a comment, delete dev resource and delete a webhook. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Figma API limit?**

actionlake paces every call to the limits in the Figma service file: 10 calls a minute per connection. Repeated reads are answered from cache (43 Figma actions can be), which never reaches Figma.

**What does a Figma action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (54 Figma actions page). Cache hits, searches, dry runs and calls Figma refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Figma API does it cover?**

The Figma API 0.42.0 at api.figma.com. It is built from Figma's documentation as read on 19 September 2026. 54 actions in 21 areas, each one in the signed service file (version 1.0.0).

**Does actionlake keep my Figma data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Figma credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Figma

Shares the most action names with

- [YouTube 10](https://actionlake.com/connectors/youtube)
- [Vimeo 7](https://actionlake.com/connectors/vimeo)
- [Formstack 7](https://actionlake.com/connectors/formstack)
- [Tally 6](https://actionlake.com/connectors/tally)
- [SurveyMonkey 6](https://actionlake.com/connectors/surveymonkey)
- [Frontify 5](https://actionlake.com/connectors/frontify)

Joins with, on shared entities

- [Box 3](https://actionlake.com/connectors/box)
- [Zoho WorkDrive 3](https://actionlake.com/connectors/zoho-workdrive)
- [Canvas LMS 2](https://actionlake.com/connectors/canvas-lms)
- [Metabase 2](https://actionlake.com/connectors/metabase)
- [Mitti 2](https://actionlake.com/connectors/mitti)
- [DocuSign 2](https://actionlake.com/connectors/docusign)

Browse

- [All Marketing & media connectors](https://actionlake.com/connectors/category/marketing-and-media)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Figma; the name is the vendor's own. Counts are from the Figma service file, version 1.0.0.

## Give your agent Figma today.

[Connect Figma free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/figma
More: https://actionlake.com/llms.txt
