product-feedback-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_AUTH_TOKEN | No | The bearer token clients must send. Required when using --transport http; server refuses to start over HTTP without it. | |
| FEEDBACK_DATASET_PATH | No | Which .jsonl file the server reads. Point it at a real export in the same shape to use real data. | data/feedback.jsonl |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_feedbackA | Keyword search over feedback text, ranked with BM25. Args: query: free-text search query, e.g. "shift swap approval". source: optional exact filter: support_ticket, app_review, sales_call_note, or nps_comment. segment: optional exact filter: small_business, mid_market, or enterprise. limit: maximum number of results to return (default 20). Returns feedback items ordered by relevance (highest BM25 score first), each as a dict with id, source, created_at, customer_segment, text, rating (if present), and score. |
| list_themesA | List feedback themes with at least Themes are computed deterministically from keyword and phrase overlap across feedback text (TF-IDF plus keyword-cluster grouping), with no LLM involved, so the same dataset always produces the same themes. Each theme's label is a trimmed first clause of its most representative real item (its "medoid"), not a synthetic phrase; representative_item_id names that item so you can look it up via feedback://item/{id}. Use get_theme(theme_id) for the full detail on one theme, including representative quotes. |
| get_themeA | Get one theme's member items, representative quotes, and source breakdown. Args: theme_id: a theme id as returned by list_themes, e.g. "theme-01". Works for any theme the clustering produced, even one smaller than list_themes' default min_items. Raises ValueError (surfaced to the client as a tool error) if the theme_id does not exist for the current dataset. |
| tag_severityA | Tag one feedback item's severity (critical, high, medium, or low). Args: feedback_id: an id from the dataset, e.g. "fb-0001". Severity is rule-based, from keywords in the text, the item's rating if it has one, and its source. Returns the severity label, a numeric score, the keywords that matched, and a plain-language rationale. Raises ValueError if the id does not exist. |
| severity_summaryA | Summarize severity across the whole dataset. Returns item counts by severity level, a breakdown by source and by customer segment, and the feedback ids of the ten highest- scoring critical/high items to look at first. |
| draft_problem_statementA | Draft a structured, PRD-style problem statement for one theme. Args: theme_id: a theme id as returned by list_themes, e.g. "theme-01". Returns who is affected (customer segments and counts), what the problem is (a generated one-line description), evidence (representative quotes with feedback ids), frequency (count, percent of dataset, source breakdown, date range, average rating), and a suggested success metric derived from the theme's own volume. Every field traces back to real items in the dataset; nothing is invented. Raises ValueError if the theme_id does not exist. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| triage_this_weeks_feedback | A prompt template that walks through a weekly feedback triage pass. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| feedback_summary | Dataset-level summary: item counts by source and segment, rating stats, date range. |
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: search, theme listing, theme detail, severity tagging, severity summary, and problem statement drafting. No two tools overlap in functionality, and descriptions make selection unambiguous.
All tools follow the same verb_noun snake_case pattern (search_feedback, list_themes, get_theme, tag_severity, severity_summary, draft_problem_statement). The naming is consistent and predictable.
Six tools is well within the ideal range for a focused product-feedback analysis server. Each tool covers a distinct stage of the analysis workflow, and none feel redundant or missing.
The tool surface covers the core analysis lifecycle: search, theme discovery, theme inspection, severity tagging, aggregate severity, and problem statement generation. A direct get_feedback_item is missing but search_feedback already returns full item details, so this is a minor gap.