I built a Figma comment triage MCP
A designer builds a Figma MCP that reads comments and sorts them into what the team actually needs to do.
Every designer knows the feeling. You open a Figma file after a day away and there are forty comment bubbles scattered across the canvas. Some are questions waiting on you. Some are decisions nobody has made.
My starting point was a pet peeve. The official Figma MCP will not let you read comments, which I found out while testing it for an earlier design system experiment. My guess is that comments sit behind file-level API access, and pulling them into a general-purpose MCP would balloon the token usage. So the itchy-handed part of me asked the obvious question. Why not build a small local MCP that does only this, and keep the whole workflow close to Claude.
The goal of this MCP is to leverage Figma’s Comments API, so that when I paste any Figma link, it fetches the comments and sorts them into what the team actually needs to do.
Here is how I did it.
What I asked for, and what I learned
I wanted the server to read every comment, group them by read and responded, and send a digest to email, Slack or Teams every morning at 9am.
Planning that surfaced two things I did not know.
First, an MCP server cannot wake itself up. It only runs when Claude calls it, so a scheduled digest has to live somewhere else, in a separate job. That is fine. It is simply a different thing.
Second, Figma’s Comments API has no concept of read or unread state. What the API does give you is richer than I expected. Every comment’s author, its replies, its mentions, when it was resolved, and crucially, which element on the canvas it is pinned to.
Cutting the scope
I dropped the scheduling and the digest. What I needed day to day was the interactive flow. I went the ‘dumb’ route. What I actually wanted was simply to connect the API endpoint to my Claude Code without building a dev app.
So now it fetches and filters, nothing more. Five tools that do the following:
get_all_comments→ Every comment thread in the fileget_unresolved_comments→ Threads not yet marked resolved in Figmaget_comments_mentioning_me→ Threads where you are @mentionedget_recent_comments→ Threads with activity in the past 24 hours (or a custom hours)reply_to_comment→ Posts a reply to a thread
To pair it with intelligence, or put simply, to triage the comments, I use a Skill to teach Claude how to read the threads. It sorts every unresolved thread into four categories, in this order:
Needs a decision — explicit “should we A or B” threads, plus conflicts: because threads arrive grouped by canvas element, the skill compares takes on the same element and flags it when two people argue opposite directions, quoting both positions.
Open questions — unanswered questions, each with who it’s waiting on (inferred from @mentions or who spoke last).
Waiting for — threads blocked on something promised or external, with what and how long.
To-dos — actionable requests with an inferred owner, marked unassigned when nobody has picked it up, so tasks don’t silently fall to nobody.
Managing the cost
Once it worked, the next problem was efficiency. I am on the Claude Pro plan :’). Every fetch dumps comments into Claude’s context, and context is what you pay for. So I simply used Claude to optimise the code. Claude optimising Claude.
Together that cut the cost of a typical fetch by well over half, often much more on mature files where most threads are already resolved.
How it Works:
Get a token from Figma Settings → Security → Personal access tokens. Set it for 90 days.
Save the token. Paste this in the terminal, replacing
your-token-herewith the token you copied:echo “FIGMA_TOKEN=your-token-here” > ~/.figma-comments-mcp.envThat creates a small file in your home folder. The token stays on your machine and is only ever sent to Figma. When the token expires, repeat this step with a new one.
Register with Claude Code.
claude mcp add figma-comments -- npx -y figma-comments-mcpNPM is available too if you like to clone
npm install npm run build claude mcp add figma-comments -- node /path/to/figma-comments-mcp/dist/server.js
Here’s how it works in reality
In the short workflow below, I pulled all 100+ comments from a single page and tried creating task tickets in Notion based on the categories.
The Figma file with all the comments.
The consolidated comments from my Figma file, via the MCP.
I then pull up my Notion MCP to create task tickets based on that.
What I took from it
I did not write most of this code by hand. I described what I wanted, asked questions when the plan surprised me, and made the calls when there were real trade-offs.
This is how design work has always been for me. Understand the constraint, cut the scope, work within the constraint. A lot of the time people look at AI as an output machine. It can just as easily be a process machine, and that is where the human and AI process really shines through.
This has been a fun half-day effort to create a mini-MCP just for myself.
If you want to try it, the code is at github.com/processedfood/figma-comments-mcp and the install instructions are in the readme.
P.S. I recently left the studio I founded and am now on the lookout for a full-time role as a Product Designer. Drop me a DM on LinkedIn if you are looking for a designer who thinks in systems and uses AI as part of the workflow.




