FeedbackFlow MCP Server
A lightweight Model Context Protocol (MCP) server exposing FeedbackFlow analysis/reporting features to MCP‑compatible clients. Distributed as a ready-to-run Docker image for fast setup (stdio only; no ports).
What You Get
Tools exposed to an MCP-compatible client:
autoanalyze_feedback– Run AI analysis on a single feedback source URL (GitHub issue, PR/discussion, YouTube video, Reddit post, Hacker News story, etc.)github_issues_report– Generate a repository issues/discussions activity reportreddit_report– Full subreddit activity & insights reportreddit_report_summary– Condensed subreddit summary
All output is returned as plain text or JSON exactly as provided by the public FeedbackFlow API.
Quick Start (Docker)
Pull and run the official image (ensure your API key is exported first):
# 1. Pull image
docker pull jamesmontemagno/feedbackflowmcp:latest
# 2. Run container (foreground)
docker run -i --rm -e FEEDBACKFLOW_API_KEY=ff_your_key_here jamesmontemagno/feedbackflowmcp:latest
-i keeps STDIN open for MCP JSON‑RPC. No network port is exposed (communication exclusively over stdio).
Optional Script Wrapper
Linux/macOS (run-feedbackflow-mcp.sh):
#!/usr/bin/env bash
docker run -i --rm \
-e FEEDBACKFLOW_API_KEY="${FEEDBACKFLOW_API_KEY}" \
jamesmontemagno/feedbackflowmcp:latest
PowerShell (run-feedbackflow-mcp.ps1):
docker run -i --rm `
-e FEEDBACKFLOW_API_KEY=$Env:FEEDBACKFLOW_API_KEY `
jamesmontemagno/feedbackflowmcp:latest
Requirements
| Item | Description |
|---|---|
| FeedbackFlow Account | Pro+ tier (or higher) with active API key |
| API Key | Starts with ff_ (Account Settings) |
| Environment Var | FEEDBACKFLOW_API_KEY must be set (or passed) |
| Container Runtime | Docker (or compatible) |
| MCP Client / Extension | VS Code MCP-capable extension or other tooling |
| Outbound HTTPS | Container needs egress to api.feedbackflow.pp |
Environment Variable
| Name | Required | Purpose |
|---|---|---|
FEEDBACKFLOW_API_KEY |
Yes | Authenticates all API calls |
Set it (examples):
export FEEDBACKFLOW_API_KEY=ff_your_key_here # bash / zsh
$Env:FEEDBACKFLOW_API_KEY = "ff_your_key_here" # PowerShell
Or pass via -e FEEDBACKFLOW_API_KEY=... in docker run.
VS Code Integration (remote)
{
"inputs": [
{
"type": "promptString",
"id": "feedbackflow_api_key",
"description": "FeedbackFlow API Key (starts with ff_)",
"password": true
}
],
"servers": {
"feedbackflow": {
"type": "http",
"url": "https://func-feedbackflow-mcp-rr7fxhjrrtpdq.azurewebsites.net/mcp",
"headers": {
"Authorization": "${input:feedbackflow_api_key}"
}
}
}
}
VS Code Integration (local)
If your VS Code setup (via an MCP-enabled extension) supports a user-level JSON configuration similar to the GitHub MCP server example, you can define interactive inputs and map them to environment variables for the container.
Example MCP Configuration Snippet (Docker)
{
"inputs": [
{
"type": "promptString",
"id": "feedbackflow_api_key",
"description": "FeedbackFlow API Key (starts with ff_)",
"password": true
}
],
"servers": {
"feedbackflow": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"FEEDBACKFLOW_API_KEY",
"jamesmontemagno/feedbackflowmcp:latest"
],
"env": {
"FEEDBACKFLOW_API_KEY": "${input:feedbackflow_api_key}"
}
}
}
}
This pattern prompts once for the API key (secured as a password) and injects it into the container environment each run.
Alternative: Local Build (Instead of Docker)
If you prefer running the local project directly (useful while debugging):
{
"inputs": [
{
"type": "promptString",
"id": "feedbackflow_api_key",
"description": "FeedbackFlow API Key (starts with ff_)",
"password": true
}
],
"servers": {
"feedbackflow": {
"command": "dotnet",
"args": [
"run",
"--project",
"FeedbackFlow.MCP.Remote/FeedbackFlow.MCP.Remote.csproj"
],
"env": {
"FEEDBACKFLOW_API_KEY": "${input:feedbackflow_api_key}"
}
}
}
}
VS Code Tasks (Optional Convenience)
.vscode/tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "Run FeedbackFlow MCP (Docker)",
"type": "shell",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"FEEDBACKFLOW_API_KEY=${FEEDBACKFLOW_API_KEY}",
"jamesmontemagno/feedbackflowmcp:latest"
],
"problemMatcher": []
},
{
"label": "Run FeedbackFlow MCP (Local Dotnet)",
"type": "shell",
"command": "dotnet",
"args": [
"run",
"--project",
"FeedbackFlow.MCP.Remote/FeedbackFlow.MCP.Remote.csproj"
],
"options": {
"env": {
"FEEDBACKFLOW_API_KEY": "ff_your_key_here"
}
},
"problemMatcher": []
}
]
}
(Replace ff_your_key_here or rely on a globally-set environment variable.)
Debugging Locally
Add .vscode/launch.json if you want breakpoints in FeedbackFlowTools:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug FeedbackFlow MCP",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
"run",
"--project",
"FeedbackFlow.MCP.Remote/FeedbackFlow.MCP.Remote.csproj"
],
"env": {
"FEEDBACKFLOW_API_KEY": "ff_your_key_here"
},
"cwd": "${workspaceFolder}"
}
]
}
Visual Studio Usage
- Set
FeedbackFlow.MCP.Remoteas Startup Project. - Add
FEEDBACKFLOW_API_KEY=ff_your_key_hereunder Project Properties > Debug > Environment Variables. - F5 to debug (breakpoints in
FeedbackFlowToolssupported) or Ctrl+F5 to run. - If integrating with an external MCP-aware tool that launches commands, point it to:
dotnet run --project <full path>/FeedbackFlow.MCP.Remote/FeedbackFlow.MCP.Remote.csproj
- For Docker-based launching from Visual Studio, use a custom external tool entry or a simple batch/script file wrapping the
docker runcommand.
Tool Reference
1. autoanalyze_feedback
| Parameter | Type | Required | Description |
|---|---|---|---|
url |
string | Yes | Feedback source URL (GitHub issue/PR/discussion, YouTube video, Reddit post, HN story, etc.) |
maxComments |
int | No | Limit comments scanned (server may clamp excessively large values) |
customPrompt |
string | No | Override default analysis prompt (applies only to type=0 or 2) |
type |
int/enum | No | Output mode enum: 0=AnalysisOnly (markdown), 1=CommentsOnly (comments JSON), 2=AnalysisAndComments (combined JSON) |
2. github_issues_report
| Parameter | Type | Required | Description |
|---|---|---|---|
repo |
string | Yes | owner/repo identifier |
force |
bool | No | Regenerate ignoring cache (may consume more quota) |
3. reddit_report
| Parameter | Type | Required | Description |
|---|---|---|---|
subreddit |
string | Yes | Subreddit name (omit r/) |
force |
bool | No | Regenerate ignoring cache |
4. reddit_report_summary
| Parameter | Type | Required | Description |
|---|---|---|---|
subreddit |
string | Yes | Subreddit name (omit r/) |
force |
bool | No | Regenerate ignoring cache |
Output Format Notes
| Tool | Typical Default Output | Alt Modes |
|---|---|---|
| autoanalyze_feedback | Markdown analysis (AnalysisOnly / type=0) | JSON (CommentsOnly / type=1, AnalysisAndComments / type=2) |
| github_issues_report | Markdown (narrative) | — |
| reddit_report | Markdown (detailed sections) | — |
| reddit_report_summary | Markdown (condensed) | — |
Sample JSON (autoanalyze_feedback type=2 / AnalysisAndComments excerpt)
{
"url": "https://github.com/dotnet/runtime/issues/1",
"commentCount": 23,
"comments": [ { "author": "user1", "body": "..." } ],
"analysis": {
"summary": "High-level issue themes...",
"sentiment": "mixed",
"keyPoints": ["Point A", "Point B"]
}
}
Manual JSON-RPC (Debug Only)
{"jsonrpc":"2.0","id":1,"method":"tools/list"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"autoanalyze_feedback","arguments":{"url":"https://github.com/dotnet/runtime/issues/1"}}}
Typical Flow
- Configure VS Code (or Visual Studio launch) with Docker or dotnet run command.
- MCP-enabled extension/tool starts the process.
- Tool invocation sends JSON-RPC over stdio.
- Output (markdown or JSON) returned to the client.
Error & Usage Limit Handling
| Case | Example Message / Pattern | Notes |
|---|---|---|
| Missing key | Error: FEEDBACKFLOW_API_KEY environment variable is required |
Set env var before launch |
| HTTP failure | Error: API call failed with status 401. Response: ... |
Verify key validity / tier |
| Exception | Error: Exception occurred - <details> |
Check stack / transient network |
| Usage limit | JSON with "ErrorCode":"USAGE_LIMIT_EXCEEDED" |
Client can detect and surface a quota dialog |
When integrating, parse JSON bodies for ErrorCode to gracefully handle quota exhaustion instead of displaying raw text.
Updating
docker pull jamesmontemagno/feedbackflowmcp:latest
Restart the MCP client/extension to use the updated image.
Local (Optional) Development Run
dotnet run --project FeedbackFlow.MCP.Remote/FeedbackFlow.MCP.Remote.csproj
Security Tips
- Never commit your API key.
- Use input-driven secrets (as shown) rather than hardcoding.
- Rotate if exposure suspected.
FAQ
| Question | Answer |
|---|---|
| Do I need another functions key? | No. Only the API key is required. |
| Does it open a port? | No. Communication is stdio only. |
| Can I add more tools? | Yes. Fork, extend FeedbackFlowTools, rebuild & republish image. |
| Why is output large sometimes? | Some analyses are verbose; summarize client-side if desired. |
Image Information
| Detail | Value |
|---|---|
| Image | jamesmontemagno/feedbackflowmcp:latest |
| Base | .NET 10 runtime (console) |
| Version Tags | latest (rolling) – use a digest or future version tag for pinning |
| Protocol | MCP (JSON-RPC over stdio) |
For feature requests or issues, open a discussion or issue in the repository.
Changelog (doc):
- Added output examples, clarified enum values, expanded error handling, consistency improvements.