DEV Community

ForgeWorkflows
ForgeWorkflows

Posted on Originally published at forgeworkflows.com

Give Your Coding Agent Real User Feedback via MCP

What We Set Out to Build

In 2026, according to McKinsey's State of AI report, 72% of organizations now use AI in at least one business function, up from 50% in previous years (McKinsey, 2024). Most of those deployments stop at code generation. The coding assistant writes a function; a human reads a Slack thread full of complaints; someone files a ticket; eventually a fix ships. The loop is still manual in the middle.

We wanted to close that gap. The question we kept returning to: what would it take for a coding assistant to read actual user complaints, identify which ones clustered around the same root cause, and propose a fix without a product manager translating between the two? That's the problem Usero's Model Context Protocol server is designed to solve, and it's the problem we've been stress-testing in our own pipelines.

What Happened - Including What Went Wrong

The Model Context Protocol gives an LLM a standardized interface to call external tools natively, the same way a browser calls an API. Usero's MCP implementation exposes user feedback from widgets, email, Slack, and app store reviews as callable context. The reasoning model doesn't receive a dump of raw text. It receives clusters, ordered by size, with verbatim quotes attached. That ordering matters: it mirrors how a human product team actually prioritizes, by volume first, then severity.

Our first attempt at wiring this into a development pipeline used a flat three-node architecture. A research component pulled feedback clusters, a scoring component ranked them by estimated impact, and a writing component drafted fix proposals. All three reported to a single orchestrator. It worked fine on a handful of feedback items. At fifty, the scoring module sat idle waiting on research that had nothing to do with scoring. The bottleneck wasn't the LLM. It was the implicit assumption that one node's output would always be ready when the next needed it.

I made this mistake myself building the Autonomous SDR: five leads worked, fifty exposed the flaw. Splitting into discrete components with explicit handoff contracts between them cut processing time and made each module independently testable. That's why every ForgeWorkflows blueprint now uses explicit inter-component schemas. Implicit data passing doesn't hold up when volume increases.

The second failure was subtler. We assumed the feedback clusters would be clean enough for the reasoning layer to act on directly. They weren't. App store reviews mix genuine UX complaints with one-star ratings about pricing. Slack threads contain internal team noise alongside real user pain. We had to add a filtering step before the clustering output reached the reasoning model, which added latency we hadn't budgeted for.

Lessons Learned

Three things changed how we think about feedback-driven automation after this build.

Cluster size is a proxy for priority, not a guarantee of it. The largest cluster in a feedback set is usually the most important thing to fix. Usually. We found cases where a small cluster of five complaints about a broken checkout flow outweighed a large cluster of forty complaints about button color. Volume is a starting signal, not a verdict. The pipeline needs a secondary scoring pass that weights by user segment or revenue impact before the reasoning layer acts.

Verbatim quotes are the most valuable part of the MCP output. Summaries lose the specific language users reach for when something breaks. That language is diagnostic. "It just stops" tells you something different than "the spinner runs forever." We now pass verbatim quotes directly into the prompt context rather than letting the system paraphrase them. The fix proposals that came back were noticeably more specific.

Autonomous iteration has a hard boundary at deployment. The pipeline we built can read feedback, cluster it, score it, and draft a pull request description with proposed changes. It cannot and should not merge that PR without a human review step. This is the honest limitation of what we'd call agentic logic in a production context: the system is good at pattern recognition and proposal generation, but it lacks the organizational context to know when a fix will break a contract with an enterprise customer. Keep a human in the loop at the deployment gate, even if everything upstream is automated.

For teams building similar pipelines, our Feature Request Extractor blueprint handles the ingestion and clustering layer in n8n, pulling from multiple feedback channels and outputting structured clusters ready for a reasoning model to consume. The setup guide walks through connecting it to your existing feedback sources. It's the component we wish we'd had before we built the filtering step by hand.

The broader architecture question, whether to use a single reasoning model or a hierarchy of specialized components, is one we've written about separately. If you're deciding between those approaches, this breakdown of single-model versus hierarchical architectures covers the tradeoffs in detail.

What the Feedback-to-Shipping Loop Actually Looks Like

When the pipeline runs correctly, the sequence is: Usero MCP pulls clusters from connected channels, the filtering step removes noise, the scoring pass weights clusters by user segment, the reasoning model drafts a fix proposal with references to specific verbatim complaints, and a PR description lands in the queue for human review.

That's four automated steps before a human touches anything. For a two-person engineering team, that's the difference between shipping a fix in the same week feedback arrives versus letting it age in a backlog. The productivity gain isn't from removing humans. It's from removing the translation work between "user said something" and "engineer knows what to build."

This approach works well for teams with a steady volume of feedback across multiple channels. It breaks down when feedback volume is too low to form meaningful clusters, typically fewer than thirty items per cycle, or when the product is in a phase where qualitative interviews matter more than quantitative clustering. Don't automate a feedback loop you haven't manually validated first.

What We'd Do Differently

Build the filtering step before the clustering step, not after. We added noise filtering as a patch when the output quality disappointed us. If we'd designed the pipeline with filtering as the first stage, we'd have cleaner clusters from the start and less prompt engineering downstream to compensate for bad input.

Version the inter-component schemas from day one. When we updated the scoring module's output format, the downstream reasoning component broke silently. It produced output, just wrong output. Explicit schema versioning with a validation check between components would have caught this immediately. What ForgeWorkflows calls a modular swarm only stays coherent if the contracts between modules are treated as first-class artifacts, not afterthoughts.

Test with adversarial feedback before going live. We tested with clean, representative feedback samples. Production data included spam, competitor reviews, and internal test submissions that hadn't been filtered. Run your pipeline against the messiest data you can find before you trust it with anything that touches a real codebase.

Top comments (0)