Feedback Synthesis MCP

Synthesize GitHub Issues, HN and App Store reviews into ranked pain clusters. Pay-per-call x402.

Should I use this

Quality & Safety

A
Description quality
68%
Schema completeness
98%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • LOWTool 'synthesize_feedback' description lacks action verbin synthesize_feedback
  • LOWTool 'get_pain_points' description lacks action verbin get_pain_points
  • LOWTool 'get_sentiment_trends' description lacks action verbin get_sentiment_trends

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~751Tokens (tool definitions)
~2.0 KBTypical response size
Moderate attention impact (0.59% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "feedback-synthesis-mcp": {
      "command": "uvx",
      "args": [
        "feedback-synthesis-mcp"
      ]
    }
  }
}

Runnable packages

pypifeedback-synthesis-mcp0.1.1stdio

Remote endpoints

https://feedback-synthesis-mcp-production.up.railway.app/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪synthesize_feedback(sources, focus, max_items_per_source, since)

Multi-source feedback synthesis into ranked pain clusters.

Input Schema

{
  "type": "object",
  "properties": {
    "sources": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "type": "array",
      "description": "List of source configs. Each must have \"type\" (github_issues, hackernews, appstore) and \"target\" (e.g. \"owner/repo\", \"product name\", app ID)."
    },
    "focus": {
      "default": "",
      "type": "string",
      "description": "Optional focus area to prioritize (e.g. \"performance\", \"onboarding\")."
    },
    "max_items_per_source": {
      "default": 100,
      "type": "integer",
      "description": "Max feedback items per source (default 100)."
    },
    "since": {
      "default": "",
      "type": "string",
      "description": "Only include feedback after this date (ISO 8601, e.g. \"2025-01-01\")."
    }
  },
  "required": [
    "sources"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢get_pain_points(source, top_n, max_items)

Quick single-source pain point extraction.

Input Schema

{
  "type": "object",
  "properties": {
    "source": {
      "additionalProperties": true,
      "type": "object",
      "description": "Source config with \"type\" (github_issues, hackernews, appstore) and \"target\"."
    },
    "top_n": {
      "default": 10,
      "type": "integer",
      "description": "Number of top pain points to return (default 10)."
    },
    "max_items": {
      "default": 50,
      "type": "integer",
      "description": "Max feedback items to analyze (default 50)."
    }
  },
  "required": [
    "source"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢search_feedback(query, sources, source, target, since, ...)

Full-text search across cached feedback items.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query string."
    },
    "sources": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional list of source types to filter (e.g. [\"github_issues\"], [\"github\"]).\nAccepted values: github_issues (or \"github\"), hackernews, appstore."
    },
    "source": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Singular alias for sources — accepts a single source type string.\nIf both source and sources are provided, sources takes precedence."
    },
    "target": {
      "default": "",
      "type": "string",
      "description": "Optional target filter (e.g. \"owner/repo\" or app ID)."
    },
    "since": {
      "default": "",
      "type": "string",
      "description": "Only include items after this date (ISO 8601, e.g. \"2025-01-01\")."
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "description": "Max results to return (default 20)."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}
🟢get_sentiment_trends(sources, granularity, since)

Time-series sentiment analysis across feedback sources.

Input Schema

{
  "type": "object",
  "properties": {
    "sources": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "type": "array",
      "description": "List of source configs. Each must have \"type\" and \"target\"."
    },
    "granularity": {
      "default": "weekly",
      "type": "string",
      "description": "Time granularity — \"weekly\" or \"monthly\" (default \"weekly\")."
    },
    "since": {
      "default": "",
      "type": "string",
      "description": "Only include feedback after this date (ISO 8601)."
    }
  },
  "required": [
    "sources"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "additionalProperties": true
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools