VeryGoodOpenSource / VeryGoodOpenSource/very_good_cli
feat(mcp): stream progress notifications for long-running tools
@vgvbot is already working on this.
Since Aug 11, 2026.
- Dominant language
- Dart
- Stars
- 2.4k
- Forks
- 244
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 25
Description
Summary
Explore streaming MCP notifications/progress from long-running tools (test, packages_get, packages_check_licenses) so clients can show live progress while a command runs, instead of only seeing output once the tool returns.
Background
#1612 captures a command's in-process mason Logger output and returns it in CallToolResult.content. That is the reliable way to get diagnostics to the agent, because the tool result is what every client feeds back to the model.
Progress notifications are a complementary, optional UX layer on top of that — not a replacement.
Proposal
When a client includes a progressToken in a request's _meta, the server emits notifications/progress as the command runs (e.g. test counts, "Optimizing tests…", per-package steps). The MCP spec (2025-03-26+) allows an optional human-readable message field alongside progress/total.
Over the stdio transport these are valid JSON-RPC messages on the same stdout stream, so they do not conflict with the "no non-MCP content on stdout" constraint that motivated #1612 (raw logger text broke it; structured notifications are the correct channel).
Caveats / open questions
- Only allowed when the client supplies a
progressToken; otherwise the server must stay silent. - Progress is primarily a UX signal. Many clients render it as a spinner/bar for the human and do not inject it into the model's context, so the agent may never read it. Keep the final result (#1612) as the source of truth.
- Streaming is fire-and-forget with no ordering guarantee relative to the final result.
- Need to confirm whether the
dart_mcpserver package exposes a helper for sending progress notifications, or whether we'd send raw notifications ourselves.
Related
- #1612
- Refs #1599, #1600
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.