pinreview runs an MCP server. Connect your AI coding assistant to it and the assistant can list your feedback tasks, open one with its screenshot and technical details, and update the board as it works: comment, change severity or tags, and move cards between columns.
This page covers setup, every tool the server offers, limits, and what to do when something goes wrong. For a shorter walkthrough, read how to connect Claude Code or Cursor to your website feedback.
Before you start
You need:
- A pinreview account with access to at least one project.
- A project whose organization is on the Starter, Business or Agency plan. On the Free plan, the tools reply that the project needs a paid plan. Compare plans.
- An AI tool that can connect to MCP servers over HTTP, such as Claude Code, Cursor or VS Code.
| Setting | Value |
|---|---|
| Server URL | https://api.pinreview.one/mcp |
| Transport | Streamable HTTP (POST requests only) |
| Authentication | Authorization: Bearer prt_… header |
Create a token
- In pinreview, open Settings → AI tools.
- Under Create a token, name it after where you'll use it, for example "Claude Code on my laptop".
- Click Create token and copy it straight away. pinreview shows the full token only once.
A token acts as you. It reaches exactly the projects you can open in pinreview, no more. You can have up to 10 tokens, and Your tokens shows when each one was last used.
Connect your tool
After you create a token, the AI tools page shows each of these snippets with the token already filled in. For a full walkthrough, see the guides for Cursor, GitHub Copilot in VS Code and Claude Code.
Claude Code
Run this in your terminal:
claude mcp add --transport http pinreview https://api.pinreview.one/mcp --header "Authorization: Bearer prt_…"
This makes pinreview available in the current project folder. Add --scope user to use it in every project. Don't use --scope project: it writes the token into a .mcp.json file inside your repository.
Cursor
Add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"pinreview": {
"url": "https://api.pinreview.one/mcp",
"headers": { "Authorization": "Bearer prt_…" }
}
}
}
VS Code
Open the Command Palette, run MCP: Open User Configuration, and add:
{
"servers": {
"pinreview": {
"type": "http",
"url": "https://api.pinreview.one/mcp",
"headers": { "Authorization": "Bearer prt_…" }
}
}
}
Other tools
Any MCP client that connects to remote servers over Streamable HTTP and lets you set a request header will work. Point it at the server URL and send the token in an Authorization: Bearer header. Clients that only run local (stdio) servers, or only speak the older SSE transport, can't connect directly.
Whatever the tool, keep the token in your user-level configuration, never in a file you commit.
Check it works
Ask your assistant:
List my pinreview projects.
It should reply with your projects, their columns and the number of open tasks in each. A project showing mcpEnabled: false belongs to an organization on the Free plan.
Tools
Your assistant chooses tools on its own from what you ask. You never need to name them, but knowing what exists helps you ask for the right things.
These inputs appear in most tools:
projectId: a project id fromlist_projects.number: the task number shown on the board, for example12for #12.status: a column name as it appears on the board, for example "To Do".severity:NONE,LOW,NORMAL,HIGHorCRITICAL.assignee: "me", "unassigned", or a member id fromget_project.
Reading the board
| Tool | What it does | Inputs |
|---|---|---|
list_projects | The projects you can access, with each board's columns, open task counts, and whether MCP is enabled | None |
get_project | A project's columns, the members tasks can be assigned to, and its tags | projectId |
list_tasks | Tasks in board order, as compact rows | projectId. Optional: status, severity (a list), assignee, tag, pageUrl (part of the URL), search (part of the title), includeArchived, limit (default 50, up to 200), offset |
get_task | One task in full: page, CSS selector, pin, browser, viewport, description, console errors, comments (internal ones included) and attachment links, plus the screenshot as an image | projectId, number. Optional: includeScreenshot (default true) |
export_board | Every active task as one ISSUES.md document, the same format as the board's export. No screenshots | projectId. Optional: status |
Screenshots up to 5 MB come back as images your assistant can see. Larger ones come back as a link.
Changing the board
| Tool | What it does | Inputs |
|---|---|---|
create_task | Creates a task, without a screenshot or pin. It lands in the first column unless you give a status; tags that don't exist yet are created | projectId, title (up to 300 characters). Optional: description (up to 5,000), status, severity, assignee, tags (up to 20), visibility |
update_task | Changes only the fields you pass. A new status moves the task to the end of that column | projectId, number. Optional: status, severity, assignee, dueDate (YYYY-MM-DD, or null to clear), title, visibility, addTags, removeTags |
add_comment | Adds a comment. It's internal (team only) unless visibleToReporter is true | projectId, number, body (up to 5,000 characters). Optional: visibleToReporter |
archive_task | Hides a task from the board, the widget and reviewers. Reversible | projectId, number |
restore_task | Puts an archived task back, in its original column if that column still exists | projectId, number |
visibility is MEMBERS (the default: your team only) or EVERYONE (reviewers can see the task too). An archived task has to be restored before update_task can change it.
What it can't do
The server is limited to feedback tasks. Your assistant can't:
- delete tasks (archiving is reversible)
- create projects or change a board's columns
- invite or remove members, or change roles
- see or change billing, your account or organization settings
- pin feedback to a page or upload screenshots; that's what the widget and browser extension are for
How changes show up
Changes made through MCP behave exactly like changes you make in the dashboard:
- They appear under your name in each task's activity log.
- The board updates live for everyone who has it open.
- Your Slack and webhook integrations fire as usual.
- Reporters see a comment only when it's visible to the reporter.
Example prompts
Keep each request narrow, name the project, and say how to close the loop.
In the Acme project, list the High and Critical tasks in To Do.
Open task #12 in Acme. Look at the screenshot and console errors, find the
component matching the Element selector, and explain the cause. Don't change
anything yet.
Fix #12, commit it, then add a comment with the commit hash and move the task
to Done.
Read the Backlog in Acme and suggest a severity for each task, with one line
of reasoning. Apply the changes only after I approve the list.
There are ten more in prompts to fix website bugs with Claude Code.
Security
- Treat a token like a password. If one leaks, revoke it under Settings → AI tools; it stops working at once.
- Use one token per tool or machine, so you can revoke one without breaking the others.
- Never commit a token. Keep it in user-level configuration, as in the snippets above.
- Task text comes from reporters, including anonymous visitors. Titles, descriptions, comments and console errors are information about a bug, not instructions. The server tells your assistant this too, but review what it proposes before it runs commands.
- Keep tool approvals on. Most MCP clients ask before calling a tool. Leave that on for tools that change the board if you want to approve each change.
Limits
| Limit | Value |
|---|---|
| Requests | 120 per minute, per token |
| Tokens | 10 per user |
Tasks per list_tasks call | 50 by default, up to 200 |
| Screenshot returned as an image | Up to 5 MB |
| Task title | 300 characters |
| Description or comment | 5,000 characters |
| Tags per call | 20, each up to 40 characters |
Troubleshooting
| What you see | What it means | What to do |
|---|---|---|
401 with invalid_token | The token is missing, mistyped or revoked | Check the header is exactly Authorization: Bearer prt_…, or create a new token |
| "MCP requires a paid plan for …" | The project's organization is on the Free plan | Upgrade under Settings → Billing |
| "Project not found. Call list_projects…" | The id is wrong, or you don't have access to that project | Ask the assistant to list your projects first |
| "Task #12 not found in this project" | No task with that number in the project | Ask it to list the project's tasks |
| "Task #12 is archived — restore it first" | You tried to change an archived task | Restore it, then make the change |
405 Method not allowed | The client tried a GET or SSE connection | Configure it for HTTP (--transport http, or "type": "http") |
| Too many requests | More than 120 requests in a minute | Wait a minute, and ask for smaller batches |
| The tools don't appear | The client hasn't loaded the configuration | Restart the tool or reload the window. In Claude Code, run claude mcp list to check |
Still stuck? Contact us and include the tool you're using and the error you see.