Connect your AI to user feedback
MCPFeedback exposes an MCP server that lets AI assistants read, create, and manage feedback items and feature requests — all via a single connection. Set up in under 2 minutes.
What can the MCP server do?
Triage feedback
List, filter, and update status on bug reports, feature requests, and UX issues across all your sites.
Manage feature requests
Create, update, and track feature requests. Analyze demand to find your most-requested features.
Post fix notes
Write resolution notes and automatically notify reporters via email when their issue is addressed.
Visual analysis
get_feedback returns screenshot and screen recording attachments as image content blocks — your AI can see what users reported.
Overview
26 tools across 5 categories. Once connected, your AI assistant can work with all of your feedback data programmatically.
Feedback
13 tools
Feature Requests
6 tools
Sites
1 tool
Crashes & Replays
3 tools
GitHub
3 tools
Quick Setup
Pick your client. The whole setup takes under 2 minutes.
Fastest path — one command, no API key
MCPFeedback's OAuth server supports Dynamic Client Registration + PKCE discovery, so most clients can connect with zero key-pasting. In Claude Code:
claude mcp add --transport http mcpfeedback https://staging.mcpfeedback.com/api/mcp
Your browser opens to sign in and choose which sites to authorize. Static API keys are still supported for headless/CI use — see the per-client tabs below.
Before you start
- Create an MCPFeedback account (free trial, no credit card)
- For OAuth clients (Claude Code/Connector, Cursor, ChatGPT, Gemini) you need nothing else — sign-in and site selection happen during the connect flow.
- Only if your client needs a static key: go to MCP & API Keys and generate one.
claude mcp add --transport http mcpfeedback https://staging.mcpfeedback.com/api/mcp
Share it with your team: check in a .mcp.json
Drop this at your repo root so every teammate's MCP-aware editor (Claude Code, Cursor) picks up the server automatically. It carries no secret — each person signs in via OAuth on first use.
{
"mcpServers": {
"mcpfeedback": {
"url": "https://staging.mcpfeedback.com/api/mcp"
}
}
}Authentication
Two authentication methods, pick whichever your client supports:
OAuth 2.1 (Recommended)
Used by Claude Desktop Connectors, ChatGPT, and Gemini. No API key needed — sign in interactively and choose which sites to authorize.
API Key (Bearer Token)
Used by Claude Code, Cursor, and other CLI tools. Generate a key from your dashboard and pass it via the Authorization header.
API keys are account-wide and full-access: they can read and write across every site in your organization. OAuth tokens are finer-grained — during the authorization flow you choose which sites to grant and whether the token may write.
OAuth scope model — enforced server-side
mcp:readgrants the read tools. A token withoutmcp:writeis read-only — every write tool (status/severity/type updates, fix notes, deletes, bulk ops, forwarding) returns an error.mcp:write(ormcp:admin) is required for any mutating tool.- Site-scoped tokens are enforced on every query: a token granted a subset of sites cannot see or modify feedback, crashes, feature requests, or forwards belonging to sites outside that set.
- A paused/cancelled/expired account is blocked from writes on both auth methods; reads still work.
Authorization: Bearer mcpf_abc123...
Scoped access
Keys are scoped to your organization. Each key can access all sites and apps in your organization.
Revocable
Revoke any key instantly from your dashboard. Takes effect immediately.
Usage tracking
See when each key was last used in your API Keys dashboard.
Feedback Tools
Read, create, update, and manage user feedback items across all your sites and apps. All tools accept reference numbers (e.g. FB-123) as well as UUIDs.
list_feedbackList feedback items with free-text search plus filters for status, severity, type, and lifecycle segment. Returns { items, next_cursor } with attachment_count per item; pass next_cursor back as `cursor` for the next page.
| Name | Type | Required | Description |
|---|---|---|---|
| siteId | string (UUID) | No | Filter by site ID |
| search | string | No | Free-text search over feedback title and details (max 200 chars) |
| status | string enum | No | backlog | new | accepted | in_review | in_progress | resolved | closed | reopen | rejected (overrides segment) |
| severity | string enum | No | low | medium | high |
| feedbackType | string enum | No | bug_report | feature_request | ux_issue | general_comment |
| segment | string enum | No | active | closed | all | deleted (default: all) |
| limit | number | No | Items to return, 1–100 (default: 25) |
| cursor | string | No | Pagination cursor (next_cursor / created_at of last item) |
// Returns { items: [...], next_cursor: "2026-04-07T10:00:00Z" | null }
{
"id": "uuid",
"reference_number": "FB-123",
"title": "Button unresponsive on checkout",
"severity": "high",
"status": "new",
"feedback_type": "bug_report",
"reporter_email": "user@example.com",
"attachment_count": 2,
"site_domain": "example.com",
"created_at": "2026-04-07T10:00:00Z"
}get_feedbackGet full details of a feedback item including all attachments. Accepts UUID or reference number (e.g. FB-123). Returns attachment images as inline content blocks for AI visual analysis.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number (e.g. FB-123) |
// Attachments are returned as MCP image content blocks, // so AI agents can visually analyze screenshots and // screen recordings (as GIF) alongside the metadata.
create_feedbackCreate a new feedback item with title, details, severity, and type. Generates a unique reference number automatically.
| Name | Type | Required | Description |
|---|---|---|---|
| siteId | string (UUID) | Yes | The site to create feedback for |
| title | string | Yes | Feedback title (max 500 chars) |
| details | string | No | Detailed description (max 5000 chars) |
| severity | string enum | No | low | medium | high (default: medium) |
| reporterEmail | string (email) | Yes | Reporter email address |
| feedbackType | string enum | No | bug_report | feature_request | ux_issue | general_comment (default: general_comment) |
update_feedback_statusUpdate the status of a feedback item. Validates allowed status transitions. Automatically sends a resolution notification email when transitioning to 'resolved'.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number |
| status | string enum | Yes | backlog | new | accepted | in_review | in_progress | resolved | closed | reopen | rejected |
update_feedback_typeChange the type/category of a feedback item.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number |
| feedbackType | string enum | Yes | bug_report | feature_request | ux_issue | general_comment |
update_feedback_severityChange the severity of a feedback item.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number (e.g. FB-123) |
| severity | string enum | Yes | low | medium | high |
post_fix_notesPost a fix/resolution note on a feedback item. Does not change feedback status — call update_feedback_status separately to close or resolve. Optionally emails the reporter with the project name in the subject.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number |
| content | string | Yes | Fix note content (max 5000 chars) |
| notifyReporter | boolean | No | Send email to reporter (default: true) |
list_fix_notesList the fix/resolution notes posted on a feedback item, newest first. Read counterpart to post_fix_notes — check before posting to avoid duplicates.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number (e.g. FB-123) |
get_activityGet the activity log (status changes, assignments, replies, fix/internal notes) for one feedback item or across a whole site, newest first. Provide exactly one of feedbackId or siteId.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | No | UUID or reference number (one of feedbackId / siteId) |
| siteId | string (UUID) | No | Read activity across all feedback for a site |
| limit | number | No | Rows to return, 1–200 (default: 50) |
delete_feedbackSoft-delete a feedback item (recoverable) or permanently delete it.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number |
| permanently | boolean | No | Permanently delete (cannot be undone). Default: false |
restore_feedbackRestore a soft-deleted feedback item back to the active list.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number of soft-deleted item |
bulk_update_feedback_statusUpdate the status of up to 50 feedback items in one call. Each item is transition-validated independently; returns a per-item [{ id, ok, error }] result.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackIds | string[] | Yes | 1–50 UUIDs or reference numbers (e.g. FB-123) |
| status | string enum | Yes | Status to apply to every item |
bulk_delete_feedbackSoft-delete (or permanently delete) up to 50 feedback items in one call. Returns a per-item [{ id, ok, error }] result.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackIds | string[] | Yes | 1–50 UUIDs or reference numbers |
| permanently | boolean | No | Permanently delete (cannot be undone). Default: false |
Feature Request Tools
Manage the in-app feature request board. List, create, update status, and analyze demand patterns across all feature requests submitted by your users.
list_feature_requestsList feature requests across your sites. Filter by status, sort by vote count, newest, or recently updated.
| Name | Type | Required | Description |
|---|---|---|---|
| site_id | string (UUID) | No | Filter by site/app ID |
| status | string enum | No | open | planned | in_progress | shipped |
| sort | string enum | No | votes | newest | updated (default: votes) |
| limit | number | No | Items to return, 1–100 (default: 25) |
// Example response item
{
"id": "uuid",
"title": "Dark mode support",
"description": "App should respect system dark mode setting.",
"status": "planned",
"vote_count": 42,
"comment_count": 8,
"author_email": "user@example.com",
"created_at": "2026-04-01T09:00:00Z"
}get_feature_requestGet full details of a feature request including all comments (threaded).
| Name | Type | Required | Description |
|---|---|---|---|
| id | string (UUID) | Yes | Feature request UUID |
create_feature_requestCreate a new feature request for a site. Appears on the in-app feature board immediately.
| Name | Type | Required | Description |
|---|---|---|---|
| site_id | string (UUID) | Yes | The site to create the feature request for |
| title | string | Yes | Feature request title (3–200 chars) |
| description | string | No | Detailed description (max 5000 chars) |
update_feature_request_statusUpdate the status of a feature request.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string (UUID) | Yes | Feature request UUID |
| status | string enum | Yes | open | planned | in_progress | shipped |
comment_on_feature_requestPost an official owner comment on a feature request. Marked as an owner reply; can reply to an existing thread. Blocked when the site disables comments.
| Name | Type | Required | Description |
|---|---|---|---|
| id | string (UUID) | Yes | Feature request UUID |
| content | string | Yes | Comment body (1–2000 chars) |
| parentCommentId | string (UUID) | No | Reply to an existing comment thread |
analyze_demandAnalyze feature request demand across your sites. Returns top voted requests, requests grouped by status, and trending requests from the last 7 days.
| Name | Type | Required | Description |
|---|---|---|---|
| site_id | string (UUID) | No | Scope analysis to a specific site |
| limit | number | No | Number of top requests to return (default: 10, max: 50) |
// Example response
{
"top_voted": [
{ "title": "Dark mode", "vote_count": 42, "status": "planned" },
{ "title": "CSV export", "vote_count": 31, "status": "open" }
],
"by_status": { "open": [...], "planned": [...] },
"trending": [...]
}Site Tools
Query site configuration and metadata.
list_sitesList all sites in your organization with domains, widget theme, and configuration.
| Name | Type | Required | Description |
|---|---|---|---|
| includeInactive | boolean | No | Include inactive sites (default: false) |
Crash & Replay Tools
Inspect mobile crash reports (crashes, ANRs, hangs) and session replays captured by the native SDKs — grouped by fingerprint, with stack traces, device info, network logs, and per-frame replay images.
list_crashesList mobile crash reports (crashes, ANRs, hangs) for a site or across the account, grouped by fingerprint and sorted by most recently seen.
| Name | Type | Required | Description |
|---|---|---|---|
| siteId | string (UUID) | No | Scope to a specific site (default: all sites) |
| type | string enum | No | crash | anr | hang |
| platform | string enum | No | flutter | ios | android |
| search | string | No | Free-text search over the exception class |
| limit | number | No | Crash groups to return, 1–100 (default: 25) |
get_crashGet full details of a single crash report: stack trace, threads, device info, network logs, plus any linked session-replay IDs.
| Name | Type | Required | Description |
|---|---|---|---|
| crashId | string (UUID) | Yes | The crash report ID |
get_replayGet a session replay: user actions, network events, and per-frame screenshot URLs (short-lived signed URLs).
| Name | Type | Required | Description |
|---|---|---|---|
| sessionId | string (UUID) | Yes | The replay session ID |
GitHub Tools
When a site has the GitHub App connected, forward feedback to issues and track the forwarding outbox. Writes (forward_to_github) require a connected integration with a configured repository.
get_github_issue_urlGet the GitHub issue linked to a feedback item. Returns { url, number, state } or null when not linked.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number (e.g. FB-123) |
forward_to_githubManually enqueue a feedback item for forwarding to GitHub. Requires the site's GitHub integration to be connected with a configured repository.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number |
list_pending_github_forwardsList GitHub forward outbox rows in pending/failed/dead state for this account, so an agent can see what still needs to reach GitHub.
| Name | Type | Required | Description |
|---|---|---|---|
| limit | number | No | Rows to return, 1–100 (default: 25) |
Try these prompts
Once connected, try asking your AI assistant:
Common questions
Things that trip people up the first time:
Server details
| Server URL | https://staging.mcpfeedback.com/api/mcp |
| Transport | Streamable HTTP (JSON-RPC) |
| Auth | OAuth 2.1 (PKCE + Dynamic Client Registration) or Bearer API key |
| OAuth Discovery | https://staging.mcpfeedback.com/.well-known/oauth-protected-resource |
| Tools | 26 tools across 5 categories: feedback, feature requests, sites, crashes & replays, GitHub |
Ready to connect?
Create your organization and generate an API key to get started.