Connect your AI to user feedback
MCPFeedback exposes an MCP server that lets AI assistants read, create, and manage feedback items, crash reports, network logs, session replays, and feature requests — all via a single connection.
Overview
The MCPFeedback MCP server provides 24 tools across 5 categories. Once connected, your AI assistant can work with all of your mobile and web feedback data programmatically.
Feedback
9 tools
Crash Reports
2 tools
Network Logs
1 tool
Session Replay
2 tools
Feature Requests
5 tools
Sites
1 tool
Quick Setup
Pick your client. The whole setup takes under 2 minutes.
Before you start
- Create an MCPFeedback account (free trial, no credit card)
- Go to MCP & API Keys and generate an API key
- Copy the config below and paste your key
claude mcp add mcpfeedback \ --transport http \ --url https://mcpfeedback.com/api/mcp \ --header "Authorization: Bearer YOUR_API_KEY"
Replace YOUR_API_KEY with the key from your dashboard.
Authentication
All requests to the MCP server require a valid API key passed via the Authorization header. Keys are scoped to your organization and provide access to all sites and apps within it.
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.
list_feedbackList feedback items with filters for status, severity, type, and lifecycle segment. Returns attachment_count per item. Supports cursor-based pagination.
| Name | Type | Required | Description |
|---|---|---|---|
| siteId | string (UUID) | No | Filter by site ID |
| status | string enum | No | new | accepted | in_progress | resolved | closed | rejected |
| 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 (created_at of last item) |
// Example response item
{
"id": "uuid",
"reference_number": "SPC22",
"title": "Button unresponsive on checkout",
"severity": "high",
"status": "new",
"feedback_type": "bug_report",
"reporter_email": "user@example.com",
"attachment_count": 2,
"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. SPC22). Returns attachment images as inline content blocks for AI visual analysis.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number (e.g. SPC22) |
update_feedback_statusUpdate the status of a feedback item. Validates allowed status transitions. Accepts reference numbers.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | Yes | UUID or reference number |
| status | string enum | Yes | new | accepted | in_progress | resolved | closed | 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 |
create_feedbackCreate a new feedback item with title, details, severity, and type.
| 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) |
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 |
post_fix_notesPost a fix/resolution note on a feedback item. 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_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 Report Tools
Access crash reports from native Flutter, iOS, and Android SDKs. Each report includes the full stack trace, device info, and network logs captured before the crash.
list_crash_reportsList crash reports across your sites. Filter by platform, app version, exception type, or status. Returns summary info including occurrence count and affected user count.
| Name | Type | Required | Description |
|---|---|---|---|
| siteId | string (UUID) | No | Filter by site/app ID |
| platform | string enum | No | flutter | ios | android |
| appVersion | string | No | Filter by app version string |
| exceptionType | string | No | Filter by exception class name |
| status | string enum | No | open | acknowledged | resolved | ignored |
| limit | number | No | Items to return, 1–100 (default: 25) |
| cursor | string | No | Pagination cursor |
// Example response item
{
"id": "uuid",
"reference_number": "CR-00042",
"exception_type": "NullPointerException",
"exception_message": "Cannot read field 'id' on null object",
"platform": "android",
"app_version": "2.1.0",
"occurrence_count": 14,
"status": "open",
"first_seen_at": "2026-04-01T08:30:00Z",
"last_seen_at": "2026-04-07T11:20:00Z"
}get_crash_reportGet full details of a crash report including stack trace, device info, OS version, app version, and the network log entries captured before the crash.
| Name | Type | Required | Description |
|---|---|---|---|
| crashId | string | Yes | UUID or reference number (e.g. CR-00042) |
// Example response (truncated)
{
"id": "uuid",
"exception_type": "NullPointerException",
"stack_trace": "at com.example.app.CheckoutFragment.onResume(CheckoutFragment.kt:82)\n ...",
"device_model": "Pixel 8 Pro",
"os_version": "Android 15",
"app_version": "2.1.0",
"network_logs": [ ... ],
"status": "open"
}Network Log Tools
Query HTTP request logs captured by the SDK alongside feedback and crash reports. Useful for diagnosing API failures that preceded user-reported issues.
list_network_logsList captured network log entries attached to feedback or crash reports. Filter by site, HTTP method, status code range, or URL pattern.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | No | Return logs attached to a specific feedback item |
| crashId | string | No | Return logs attached to a specific crash report |
| siteId | string (UUID) | No | Filter by site ID |
| method | string | No | HTTP method: GET | POST | PUT | DELETE | PATCH |
| statusCodeMin | number | No | Minimum HTTP response status code |
| statusCodeMax | number | No | Maximum HTTP response status code |
| urlPattern | string | No | Substring or regex to match against request URL |
| limit | number | No | Items to return, 1–100 (default: 50) |
// Example response item
{
"id": "uuid",
"method": "POST",
"url": "https://api.example.com/checkout",
"request_body": "{\"amount\": 4900}",
"response_status": 500,
"response_body": "Internal Server Error",
"duration_ms": 1842,
"captured_at": "2026-04-07T11:19:58Z"
}Session Replay Tools
Access session replays — sequences of UI-change screenshots captured during user sessions. Use with AI vision tools to analyze user journeys and reproduce reported bugs.
list_session_replaysList session replay sessions captured alongside feedback reports. Each session is a sequence of UI-change screenshots assembled into a timeline.
| Name | Type | Required | Description |
|---|---|---|---|
| feedbackId | string | No | Return replays attached to a specific feedback item |
| siteId | string (UUID) | No | Filter by site/app ID |
| limit | number | No | Items to return, 1–100 (default: 25) |
| cursor | string | No | Pagination cursor |
// Example response item
{
"id": "uuid",
"feedback_id": "uuid",
"frame_count": 47,
"duration_seconds": 94,
"privacy_tier": "standard",
"captured_at": "2026-04-07T11:19:00Z"
}get_session_replayGet a specific session replay with all frame URLs. Frames are signed URLs to screenshots in chronological order. Use with AI vision to analyze user journeys.
| Name | Type | Required | Description |
|---|---|---|---|
| replayId | string | Yes | Session replay UUID |
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 or recency. Returns vote totals and comment counts.
| Name | Type | Required | Description |
|---|---|---|---|
| siteId | string (UUID) | No | Filter by site/app ID |
| status | string enum | No | open | planned | in_progress | completed | declined |
| sortBy | string enum | No | votes | created_at | updated_at (default: votes) |
| limit | number | No | Items to return, 1–100 (default: 25) |
| cursor | string | No | Pagination cursor |
// Example response item
{
"id": "uuid",
"reference_number": "FR-00007",
"title": "Dark mode support",
"description": "App should respect system dark mode setting.",
"status": "planned",
"vote_count": 42,
"comment_count": 8,
"submitted_by": "user@example.com",
"created_at": "2026-04-01T09:00:00Z"
}get_feature_requestGet full details of a feature request including description, vote count, comments, and status history.
| Name | Type | Required | Description |
|---|---|---|---|
| featureRequestId | string | Yes | UUID or reference number (e.g. FR-00007) |
create_feature_requestCreate a new feature request. The request appears on the in-app board immediately and is visible to all users of that site.
| Name | Type | Required | Description |
|---|---|---|---|
| siteId | string (UUID) | Yes | The site to create the feature request for |
| title | string | Yes | Feature request title (max 200 chars) |
| description | string | No | Detailed description (max 2000 chars) |
| submittedBy | string (email) | No | Email of the requester |
// Example usage
{
"siteId": "uuid",
"title": "Export feedback as CSV",
"description": "Allow dashboard users to download all feedback as a CSV for offline analysis.",
"submittedBy": "pm@mycompany.com"
}update_feature_request_statusUpdate the status of a feature request. Optionally post a status note visible to users who voted.
| Name | Type | Required | Description |
|---|---|---|---|
| featureRequestId | string | Yes | UUID or reference number |
| status | string enum | Yes | open | planned | in_progress | completed | declined |
| statusNote | string | No | Optional note explaining the status change (max 500 chars) |
analyze_demandAnalyze feature request patterns to surface highest-demand requests, identify duplicate themes, and provide a ranked demand summary. Uses vote counts, comment counts, and recency.
| Name | Type | Required | Description |
|---|---|---|---|
| siteId | string (UUID) | No | Limit analysis to a specific site/app |
| topN | number | No | Number of top requests to return in summary (default: 10) |
| includeDeclined | boolean | No | Include declined requests in analysis (default: false) |
// Example response
{
"top_requests": [
{ "title": "Dark mode", "vote_count": 42, "status": "planned" },
{ "title": "CSV export", "vote_count": 31, "status": "open" }
],
"total_open_requests": 14,
"total_votes": 198,
"top_theme": "UI customization",
"analysis_note": "3 requests share the theme of data export — consider consolidating."
}Try these prompts
Once connected, try asking your AI assistant:
Server details
| Server URL | https://mcpfeedback.com/api/mcp |
| Transport | Streamable HTTP (JSON-RPC) |
| Auth | Bearer token via Authorization header |
| Tools | 24 tools across 5 categories: feedback, crash reports, network logs, session replay, feature requests |
Network logs & session replay data
Network request bodies and session replay frames may contain sensitive user data. Request body capture is limited to maxNetworkBodyBytes (default 10 KB) and sensitive headers are redacted. Configure urlFilter and privacyTier in your SDK to control what is captured.
Ready to connect?
Create your organization and generate an API key to get started.