MCP server
Feedbacks exposes a Model Context Protocol server so an AI coding agent (Claude Code, Cursor, …) can read and act on your feedback — list projects, read feedback with the captured screenshot, reply, change status, and assign — without leaving the editor.
1. Create a token
In the dashboard, open Settings → Developer and create an access token. It's workspace-scoped, carries your role, and is shown only once.
2. Connect your agent
The server speaks Streamable HTTP at /api/mcp and authenticates with your
token as a bearer credential.
For Claude Code:
claude mcp add --transport http feedbacks https://<your-app-domain>/api/mcp \
--header "Authorization: Bearer <your-token>"
Or add it to your client config directly:
{
"mcpServers": {
"feedbacks": {
"type": "http",
"url": "https://<your-app-domain>/api/mcp",
"headers": { "Authorization": "Bearer <your-token>" }
}
}
}
Locally the URL is http://localhost:3001/api/mcp.
Tools
| Tool | What it does |
|---|---|
list_projects | Projects in the workspace, with open-feedback counts. |
list_feedback | Feedback for a project; filter by status, priority, assignee. |
get_feedback | One item in full — fields, timeline, and the screenshot as an image. |
reply_to_feedback | Post a reply, as your user. |
set_feedback_status | Move an item (To Review → … → Done / Rejected). |
assign_feedback | Assign to a workspace member, or unassign. |
How access works
Every tool call is scoped to the token's workspace and gated by the same role→permission rules as the dashboard:
- A project id from another workspace returns not found — cross-workspace access is impossible.
- A
viewer-role token can read but is forbidden from replying, changing status, or assigning.
Mutations fire the same side effects as the dashboard — replying notifies the team, resolving sends the resolution email, assigning notifies the assignee.
A typical loop
Ask your agent "what feedback is open on the marketing site?" → it calls
list_projects → list_feedback → get_feedback (and sees the screenshot of
the issue) → fixes the code → reply_to_feedback → set_feedback_status to
Done. The client sees it resolved in their portal.