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.

  1. Flupes
    1A reviewerpins feedback to an element and chooses Send to Claude.
  2. 2The queuekeeps the thread open, marked for Claude.
  3. Your machine
    3@flupes/mcpreads the queue with your personal token.
  4. 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.

Terminal
claude mcp add flupes -e FLUPES_TOKEN=<your token> -- npx -y @flupes/mcp

To 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.

Terminal
npx -y @flupes/mcp skills

4. 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:

Claude Code
/fix-queue

Team 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.

.mcp.json
{
  "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.

Shell profile
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.

Tools
ToolArgumentsWhat it returns
list_queueproject? route?The open threads a reviewer sent to Claude.
list_threadsproject? route?Every open thread, queued or not.
get_threadrefOne thread: the text and replies, the screenshot as an image, and a locating hint.
list_projectsnoneNames, 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:

  1. Visible text
  2. Semantic attributes: data-testid, id, aria-label, name, role, other data-*
  3. React component names
  4. Ancestors
  5. The route
  6. 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:

Summary line
<ref> | <what changed, one sentence> | <files changed> | <deep link>

Configuration

Configuration
NameRequiredMeaning
FLUPES_TOKENYesThe personal token, flp_…
--project <slug> or FLUPES_PROJECTNoThe default project. The flag wins over the variable, and a tool argument wins over both.
FLUPES_SUPABASE_URLNoOverrides the built-in Flupes API address.
FLUPES_SUPABASE_ANON_KEYNoOverrides the built-in publishable key.
FLUPES_DASHBOARD_URLNoThe 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 run list_projects to see the slugs.
No open thread matches
The thread does not exist, it is resolved, or the token cannot see it. Run list_queue or list_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.