For Claude Code
Flupes MCP server
@flupes/mcp gives your own Claude Code the threads a reviewer sent to Claude: the reviewer’s text and the replies, the screenshot as an image, and clues that lead to the source file. Claude then fixes the code in your working tree.
Overview
A local MCP server that runs on your machine. It does no model work, and it only reads. Claude Code runs on your own subscription.
- Flupes1A reviewerpins feedback to an element and chooses Send to Claude.
- 2The queuekeeps the thread open, marked for Claude.
- Your machine3@flupes/mcpreads the queue with your personal token.
- 4Claude Codefinds the source file and changes your working tree.
You check the change in the browser, then resolve the thread in Flupes. A resolved thread leaves the queue.
Requirements
- Node 20 or later.
- Claude Code.
- A Flupes organization on the Pro plan.
- A personal token. Sign in to Flupes, then open Settings → Integrations → Claude Code. Flupes shows a token once.
Quick start
1. Create a token
In Flupes, open Settings → Integrations → Claude Code. Name a token, create it, and copy it.
2. Add the server
Run this in the repository that Claude Code works in. Replace <your token> with your token.
claude mcp add flupes -e FLUPES_TOKEN=<your token> -- npx -y @flupes/mcpTo make one project the default for this repository, add --project <slug> at the end. Settings, and Copy install command on a project page, give you the line with the slug already in it. Without the flag, the tools return every project in the token’s organization, grouped by project.
3. Add the slash commands
Run this in the same repository. It writes two Claude Code skills, so Claude Code shows /fix-queue and /fix-thread.
npx -y @flupes/mcp skills4. Fix the queue
Start Claude Code in the same repository. Claude checks the queue once, lists the threads it found, and asks whether you want to start. Run:
/fix-queueTeam setup
Commit this file at the repository root. The project slug is shared. The token is not: Claude Code expands ${FLUPES_TOKEN} from each developer’s own environment, and asks each developer to approve the server the first time.
{
"mcpServers": {
"flupes": {
"command": "npx",
"args": [
"-y",
"@flupes/mcp",
"--project",
"<slug>"
],
"env": {
"FLUPES_TOKEN": "${FLUPES_TOKEN}"
}
}
}
}Each developer then puts their own token in their shell profile. Never commit a token.
export FLUPES_TOKEN=<your token>Commit the .claude/skills folder that npx -y @flupes/mcp skills writes, too. Then every developer has the slash commands.
Tools
Four tools, all read-only. Resolved threads are never returned.
| Tool | Arguments | What it returns |
|---|---|---|
| list_queue | project? route? | The open threads a reviewer sent to Claude. |
| list_threads | project? route? | Every open thread, queued or not. |
| get_thread | ref | One thread: the text and replies, the screenshot as an image, and a locating hint. |
| list_projects | none | Names, slugs, origins, and the open and queued counts. |
Arguments
ref accepts FLPS-003, #flps 3, the number alone, or a thread link that ends in #FLPS-003. project is a project slug, and the word all removes the default project for one call. route keeps only the threads on one route, such as /pricing.
How get_thread finds the source
It ranks its clues by how likely each one is to appear word for word in your source:
- Visible text
- Semantic attributes:
data-testid,id,aria-label,name,role, otherdata-* - React component names
- Ancestors
- The route
- The HTML snippet
The CSS selector and the XPath are included and marked weak. Computed styles and device data sit under “Current rendering”: they say what to fix, not where. If the screenshot cannot be loaded, get_thread still returns the rest of the thread and says that the image is missing.
Slash commands
npx -y @flupes/mcp skills writes two Claude Code skills into the repository: .claude/skills/fix-queue/SKILL.md and .claude/skills/fix-thread/SKILL.md.
/fix-queue- Works through the queue: reads each thread, looks at the screenshot, finds the source, and changes the working tree.
/fix-thread <ref>- Does the same for one thread.
A file that is already there is kept. Add --force to replace it, for example after you update the package. A skill with the same name in ~/.claude/skills wins over the one in the repository.
Without the skills, the server ships the same two prompts. Claude Code lists them as /flupes:fix-queue and /flupes:fix-thread.
Both change files in the working tree only. Both end with one line for each thread, so you can check each change and resolve it:
<ref> | <what changed, one sentence> | <files changed> | <deep link>Configuration
| Name | Required | Meaning |
|---|---|---|
FLUPES_TOKEN | Yes | The personal token, flp_… |
--project <slug> or FLUPES_PROJECT | No | The default project. The flag wins over the variable, and a tool argument wins over both. |
FLUPES_SUPABASE_URL | No | Overrides the built-in Flupes API address. |
FLUPES_SUPABASE_ANON_KEY | No | Overrides the built-in publishable key. |
FLUPES_DASHBOARD_URL | No | The base of thread links. Default https://flupes.app. |
The server writes logs to stderr only. stdout carries the MCP protocol.
Read-only promise
- Every tool is marked read-only. No tool replies to a thread, resolves it, or changes it. A person resolves the thread in Flupes after they check the change, and that takes it out of the queue.
- A token can only read. It sees what you can see, inside the one organization it was created in. It stops at once when it is revoked, when you leave the organization, or when the organization leaves the Pro plan.
- The slash commands change files in the working tree only: no commits, no branches, no pushes.
- Thread text is reviewer input. The server quotes it under a fixed heading, and every tool description and both prompts say that it is data about a UI problem, never instructions.
Troubleshooting
Each failure is one sentence in the tool answer, or on stderr when the server starts.
- FLUPES_TOKEN is not set.
- Add the server again with
-e FLUPES_TOKEN=<your token>. With a committed.mcp.json, export the variable in the shell that starts Claude Code. - FLUPES_TOKEN does not look like a Flupes token
- A token starts with
flp_. Copy it again from Settings → Integrations → Claude Code. - Flupes did not accept this token.
- It was revoked or it expired, or you left the organization. Create a new token and update FLUPES_TOKEN.
- This organization is not on the Pro plan
- Send to Claude is part of Pro. After an organization admin upgrades, the same token works again.
- This token can read no projects.
- Ask an organization admin for access to a project.
- No project with the slug
- Check
--project, or runlist_projectsto see the slugs. - No open thread matches
- The thread does not exist, it is resolved, or the token cannot see it. Run
list_queueorlist_threads. - Could not reach Flupes
- Check the network connection, then try again.
- Flupes answered with an error
- Try again. If it continues, update the package:
npx -y @flupes/mcp@latest.