Feedbucket MCP Server
Feedbucket MCP
Table of Contents
What is Feedbucket MCP?
MCP (Model Context Protocol) is an open standard that lets AI assistants — Cursor, Claude, ChatGPT, Codex, and others — securely call tools exposed by external services. Instead of copying data back and forth by hand, the assistant can query and act on your product data in place.
Feedbucket MCP connects those assistants to your Feedbucket account. From the editor or chat, an assistant can:
- List, create, archive, and update projects
- Read feedback (including annotated screenshots and browser console logs)
- Resolve or reopen feedback
- Comment on feedback threads
- Change project settings (widget visibility, tags, language, and more)
The server is a Streamable HTTP MCP endpoint at:
https://dashboard.feedbucket.app/mcpAll tools operate on the authenticated user's current team. Authentication uses either a personal access token (Bearer header) or OAuth (browser sign-in), depending on the client.
Tool List
projects-list
Tool name: projects-list
What it does: List projects for the authenticated user's current team. Read-only and idempotent. Results are ordered by creation date (newest first).
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| string (nullable) | optional | — | Filter projects by name or URL (partial match). Max 255 characters. |
| boolean | optional |
| When |
| integer | optional |
| Maximum number of projects to return. Minimum 1. |
Output
{
"projects": [
{
"id": 1,
"name": "Acme Marketing Site",
"url": "https://example.com",
"imageUrl": "https://...",
"type": "website",
"key": "abc123",
"lastActivityAt": "2026-07-01T12:00:00+00:00",
"lastFeedbackAt": "2026-07-01T11:30:00+00:00",
"createdAt": "2026-01-15T09:00:00+00:00",
"archived": false
}
]
}
Errors
No team found for the authenticated user.
projects-create
Tool name: projects-create
What it does: Create a new project for the authenticated user's current team.
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| string | required | — | Project type. Values: |
| string | required | — | The project name. Max 256 characters. |
| string (nullable) | required when | — | Website URL where Feedbucket will be installed. Must be an |
Output
{
"project": {
"id": 1,
"name": "Acme Marketing Site",
"url": "https://example.com",
"imageUrl": null,
"type": "website",
"key": "abc123",
"lastActivityAt": null,
"lastFeedbackAt": null,
"createdAt": "2026-07-17T10:00:00+00:00",
"archived": false
}
}
Errors
No team found for the authenticated user.Project limit reached for your plan.
project-archive
Tool name: project-archive
What it does: Archive or restore a project by ID for the authenticated user's current team. By default the project is archived; set archived to false to restore it (subject to your plan's active project limit).
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| integer | required | — | The ID of the project to archive or restore. |
| boolean | optional |
| When |
Output
{
"success": true
}
Errors
No team found for the authenticated user.Project not found.You do not have access to this project.Active project limit reached for your teams plan.(on restore)
project-get
Tool name: project-get
What it does: Get full details for a single project by ID, including all settings. Read-only and idempotent.
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| integer | required | — | The ID of the project to retrieve. |
Output
{
"project": {
"id": 1,
"name": "Acme Marketing Site",
"url": "https://example.com",
"imageUrl": "https://...",
"type": "website",
"key": "abc123",
"lastActivityAt": "2026-07-01T12:00:00+00:00",
"lastFeedbackAt": "2026-07-01T11:30:00+00:00",
"createdAt": "2026-01-15T09:00:00+00:00",
"archived": false,
"settings": {
"visibility": "all",
"theme": "default",
"widgetVisible": true,
"feedbackSubmissionOpen": true,
"controlsPlacement": "bottom-right",
"showPins": "always",
"enabledFeatures": ["record", "view_feedback", "comment", "resolve", "tag", "mention"],
"pinColor": "theme_primary",
"onboardingEnabled": true,
"onboardingWelcomeHeading": null,
"onboardingWelcomeBody": null,
"language": "en",
"embedImages": false,
"embedCSS": false,
"queryTriggerSecret": null,
"basicAuth": false,
"basicAuthUsername": null,
"basicAuthPassword": null,
"notifications": {
"enabledFor": ["comment", "resolve"]
},
"textOverrides": {
"feedbackDescriptionPlaceholder": null
},
"tags": [
{
"name": "Bug",
"syncsWith": null
},
{
"name": "Design",
"syncsWith": "jira"
}
]
}
}
}
Errors
No team found for the authenticated user.Project not found.You do not have access to this project.
project-update
Tool name: project-update
What it does: Update a project's name, URL, and/or settings. Only provided fields are changed. At least one of name, url, or settings must be provided.
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| integer | required | — | The ID of the project to update. |
| string | optional | — | The project name. |
| string (nullable) | optional | — | Website URL where Feedbucket is installed. Required for website projects when provided. |
| object | optional | — | Project settings to update. Only provided keys are changed. See below. |
settings properties (all optional):
Key | Type | Description | |
|---|---|---|---|
| string | Who can see the widget. Values: | |
| string | Widget theme. Use | |
| boolean | Whether the widget appears on the website. | |
| boolean | Whether clients can submit new feedback. | |
| string | Widget controls position. Values: | |
| string | When feedback pins are visible. Values: | |
| string[] | Widget features available to clients. Values: | |
| string | Feedback pin color. Values: | |
| boolean | Show onboarding tour to clients on first visit. | |
| string (nullable) | Custom onboarding welcome heading. | |
| string (nullable) | Custom onboarding welcome body text. | |
| string | Widget UI language. Values: | |
| boolean | Embed images in feedback screenshots when Feedbucket cannot access the site. May increase submission time. | |
| boolean | Embed CSS in feedback screenshots when Feedbucket cannot access the site. | |
| string (nullable) | Secret for the | |
| boolean | Use Basic Auth credentials when generating screenshots on protected sites. | |
| string (nullable) | Basic Auth username. | |
| string (nullable) | Basic Auth password. | |
| object | Client email notification settings. Shape: | |
| object | Custom widget text. Shape: `{ "feedbackDescriptionPlaceholder": string | null }`. |
| string[] | Full tag list to set on the project. Replaces existing tags — include every tag to keep (by name), omit to remove. New names become native tags. Tags cannot be linked to integrations via MCP, but listing an existing synced tag by name keeps its sync intact. |
Some settings (for example enabledFeatures, custom onboarding welcome text, and textOverrides) are plan-gated and are silently ignored if your plan does not include them.
Output
Same full project object as project-get, including the updated settings.
Errors
No team found for the authenticated user.Project not found.You do not have access to this project.At least one of name, url, or settings must be provided.- Validation errors for invalid settings values
feedback-list
Tool name: feedback-list
What it does: List feedback for a project. Read-only and idempotent. Results are ordered by creation date (newest first). Defaults to open feedback only.
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| integer | required | — | The ID of the project to list feedback for. |
| string (nullable) | optional | — | Filter feedback by title or description (partial match). |
| string | optional |
| Filter by resolution status. Values: |
| string[] | optional | — | Filter feedback that has at least one of these tags. Case-sensitive. |
| integer | optional | — (all) | Maximum number of feedback items to return. When omitted, returns all matching feedback. |
| string (nullable) | optional | — | Only include feedback created at or after this ISO8601 date or datetime. |
| string (nullable) | optional | — | Only include feedback created at or before this ISO8601 date or datetime. |
| string (nullable) | optional | — | Only include feedback that was created, commented on, or updated (title/tags/resolve/etc.) at or after this ISO8601 date or datetime. |
| string (nullable) | optional | — | Only include feedback that was created, commented on, or updated (title/tags/resolve/etc.) at or before this ISO8601 date or datetime. |
Date filters
- Values may be a date (
2026-08-01) or a full datetime (2026-08-01T14:30:00+02:00). createdAfter/createdBeforefilter only on when the feedback was submitted.changedAfter/changedBeforematch feedback if any of these happened in the range:- the feedback was created
- a comment was added
- an activity happened (title/description/tags/members-only change, resolve, reopen)
- Filters combine with AND. Example:
status: open+changedAfter: <timestamp>returns open feedback that was created or changed since that time. - Date-only values are treated as midnight at the start of that day.
Example: to sync only what moved since the last automation run, call feedback-list with status: open and changedAfter set to the timestamp of the previous run.
Output
{
"feedback": [
{
"id": 42,
"title": "Logo is blurry on mobile",
"tags": ["Bug", "Design"],
"status": "open",
"reporter": {
"type": "reporter",
"name": "Jane Client",
"email": "jane@client.com"
},
"membersOnly": false,
"page": "https://example.com/about",
"createdAt": "2026-07-10T14:22:00+00:00"
"changedAt": "2026-07-10T15:00:00+00:00"
}
]
}
changedAt is always returned (not only when date filters are used). It is the latest of:
createdAt- the latest comment time
- the latest activity time (title/tags/resolve/etc.)
If nothing has happened since creation, changedAt equals createdAt.
When reporter.type is member, an id field is also included on the reporter object.
Errors
No team found for the authenticated user.Project not found.You do not have access to this project.
feedback-get
Tool name: feedback-get
What it does: Get full details for a single feedback item. Read-only and idempotent. When the feedback type is screenshot and the annotated image is ready and ≤ 3 MB, the screenshot is also returned inline as an image in the response. If the image is still generating, too large, or missing, only the JSON payload is returned (resource may be "generating" while processing).
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| integer | required | — | The ID of the feedback item to retrieve. |
Output
{
"feedback": {
"id": 42,
"title": "Logo is blurry on mobile",
"description": "The logo looks pixelated on iPhone.",
"tags": ["Bug", "Design"],
"attachments": [
{
"type": "image",
"name": "extra.png",
"url": "https://..."
}
],
"type": "screenshot",
"resource": "https://...",
"status": "open",
"membersOnly": false,
"createdAt": "2026-07-10T14:22:00+00:00",
"changedAt": "2026-07-10T15:00:00+00:00",
"reporter": {
"type": "reporter",
"name": "Jane Client",
"email": "jane@client.com"
},
"comments": [
{
"id": 7,
"creator": {
"type": "member",
"name": "Alex",
"email": "alex@agency.com",
"id": 3
},
"body": "Looking into this.",
"attachments": [],
"membersOnly": false,
"createdAt": "2026-07-10T15:00:00+00:00"
}
],
"sessionDetails": {
"page": "https://example.com/about",
"device": "mobile",
"system": "iOS",
"browser": "Safari",
"screenWidth": 390,
"screenHeight": 844,
"viewportWidth": 390,
"viewportHeight": 664,
"devicePixelRatio": 3,
"selector": "#logo"
},
"integrations": [
{
"slug": "jira",
"url": "https://..."
}
],
"customMetadata": {},
"console": {
"error": 2,
"warn": 1,
"info": 0,
"log": 5
}
}
}
changedAt is the latest of the feedback’s creation time, latest comment, or latest activity (title/tags/resolve/etc.).
Comments may also include a fromIntegration string when the comment originated from a synced integration.
Errors
No team found for the authenticated user.Feedback not found.You do not have access to this feedback.
feedback-update
Tool name: feedback-update
What it does: Update a feedback item's title, description, tags, visibility, and/or status. Use status to resolve or reopen feedback. Only provided fields are changed. At least one of title, description, tags, membersOnly, or status must be provided.
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| integer | required | — | The ID of the feedback item to update. |
| string | optional | — | New title for the feedback. Max 255 characters. |
| string (nullable) | optional | — | New description for the feedback. |
| string[] | optional | — | Full tag list to set on the feedback. Replaces existing tags. Tags must already exist on the project (case-sensitive). |
| boolean | optional | — | Whether the feedback should only be visible to team members. |
| string | optional | — | Set to |
Output
{
"feedback": {
"id": 42,
"title": "Logo is blurry on mobile",
"description": "The logo looks pixelated on iPhone.",
"tags": ["Bug"],
"status": "resolved",
"membersOnly": false
}
}
Errors
No team found for the authenticated user.Feedback not found.You do not have access to this feedback.At least one of title, description, tags, membersOnly, or status must be provided.Invalid tag(s): {tags}. Tags must exist on the project. Use the ProjectGet tool with projectId {id} to see available tags. Case sensitive.
comment-create
Tool name: comment-create
What it does: Create a new comment on a feedback item. If the feedback was resolved, commenting automatically reopens it.
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| integer | required | — | The ID of the feedback item to comment on. |
| string | required | — | The comment body text. |
| boolean | optional |
| Whether the comment should only be visible to team members. |
Output
{
"comment": {
"id": 8,
"creator": {
"type": "member",
"name": "Alex",
"email": "alex@agency.com",
"id": 3
},
"body": "Fixed on staging — please recheck.",
"attachments": [],
"membersOnly": false,
"createdAt": "2026-07-17T10:30:00+00:00"
}
}
Errors
No team found for the authenticated user.Feedback not found.You do not have access to this feedback.
feedback-get-console-log
Tool name: feedback-get-console-log
What it does: Get browser console log entries captured with a feedback item. Read-only and idempotent. Requires a plan that includes console logs.
Input schema
Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| integer | required | — | The ID of the feedback item to retrieve console logs for. |
Output
{
"consoleLog": [
{
"type": "error",
"arguments": ["Uncaught TypeError: Cannot read property 'x' of undefined"],
"captured_at": "2026-07-10T14:21:58+00:00"
},
{
"type": "warn",
"arguments": ["Deprecated API usage"],
"captured_at": "2026-07-10T14:21:59+00:00"
}
]
}
type is one of: log, warn, error, info.
Errors
No team found for the authenticated user.Feedback not found.You do not have access to this feedback.Console log is not available on your plan.
How to Connect
Feedbucket MCP supports two authentication methods:
- Personal access tokens — send as an
Authorization: Bearerheader. Used by Cursor and VS Code. See Access Tokens to create one manually. - OAuth — browser sign-in with dynamic client registration. Used by Claude Code, Claude Desktop, Claude.ai, ChatGPT, and Codex.
You can also follow the guided setup for each client in the dashboard at https://dashboard.feedbucket.app/account/mcp.
MCP endpoint used in all examples below:
https://dashboard.feedbucket.app/mcpCursor
Cursor connects with a personal access token.
Add to Cursor (one-click): On the MCP settings page, the Add to Cursor button creates an access token labeled "Cursor" and opens a deeplink (cursor://anysphere.cursor-deeplink/mcp/install?...) that installs the Feedbucket MCP server into Cursor with the token already configured.
Manual setup:
- Create an access token (see Access Tokens).
- In Cursor, open Settings → Tools & MCPs → New MCP Server.
- Paste the following into
mcp.json, replacingYOUR_TOKENwith your token:
{
"mcpServers": {
"feedbucket": {
"url": "https://dashboard.feedbucket.app/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
VS Code
VS Code connects with a personal access token.
Add to VS Code (one-click): On the MCP settings page, the Add to VS Code button creates an access token labeled "VS Code" and opens a deeplink (vscode:mcp/install?...) that installs the Feedbucket MCP server into VS Code with the token already configured.
Manual setup:
- Create an access token (see Access Tokens).
- In VS Code, open the Command Palette and run MCP: Add Server, then choose HTTP — or paste the following into
mcp.json, replacingYOUR_TOKENwith your token:
{
"servers": {
"feedbucket": {
"type": "http",
"url": "https://dashboard.feedbucket.app/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Claude Code
Claude Code connects with OAuth by default.
CLI (recommended):
claude mcp add --transport http feedbucket https://dashboard.feedbucket.app/mcp
claude mcp login feedbucket
The login command opens a browser (or prints a URL) for Feedbucket sign-in and authorization. If the redirect fails, paste the callback URL when prompted.
Token alternative: You can also use a personal access token via .mcp.json:
{
"mcpServers": {
"feedbucket": {
"type": "http",
"url": "https://dashboard.feedbucket.app/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Claude Desktop
Claude Desktop connects with OAuth.
- Open Settings → Connectors.
- Choose Add Custom Connector.
- Name:
Feedbucket. - URL: https://dashboard.feedbucket.app/mcp.
- Add the connector and complete Feedbucket authorization in the browser.
Connectors are tied to your Claude account. If you already connected Feedbucket on Claude.ai, it will appear in Claude Desktop as well.
Claude.ai
Claude.ai connects with OAuth, using the same Custom Connector flow as Claude Desktop.
- Open Settings → Connectors.
- Choose Add Custom Connector.
- Name:
Feedbucket. - URL: https://dashboard.feedbucket.app/mcp.
- Add the connector and complete Feedbucket authorization in the browser.
ChatGPT
ChatGPT connects with OAuth.
- Open Settings → Apps → Advanced settings and enable Developer mode.
- Go to Settings → Apps → Create.
- Name:
Feedbucket. - URL: https://dashboard.feedbucket.app/mcp.
- Auth: OAuth.
- Create the app and complete Feedbucket authorization.
- In a new chat, enable Feedbucket from the + menu.
Codex
Codex connects with OAuth via the CLI.
codex mcp add feedbucket --url https://dashboard.feedbucket.app/mcp
codex mcp login feedbucket
The login command opens a browser (or prints a URL) for Feedbucket sign-in and authorization.
Access Tokens
Personal access tokens let clients authenticate to the MCP server with a Bearer header. Cursor and VS Code use this method (and their Add buttons create a token for you automatically). Claude Code can also use a token as an alternative to OAuth.
Create a token
- Go to https://dashboard.feedbucket.app/account/access-tokens.
- Create a token with a label (for example,
CursororLocal testing). - Copy the token immediately — it is shown only once and cannot be retrieved later.
Tokens are scoped to mcp:use and expire after one year.
Use a token
Send the token as an Authorization header on requests to the MCP endpoint:
Authorization: Bearer YOUR_TOKENExample MCP config (Cursor-style):
{
"mcpServers": {
"feedbucket": {
"url": "https://dashboard.feedbucket.app/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Requests without a valid token receive 401 Unauthorized. Tokens that are missing the mcp:use scope receive 403 Forbidden.
Connected apps
The same Access Tokens page also lists applications you have connected via MCP using OAuth, so you can see and manage both token-based and OAuth clients in one place.
Updated on: 10/08/2026
Thank you!
