Title: First-class streaming tool output · Issue #484 · modelcontextprotocol/modelcontextprotocol · GitHub
Open Graph Title: First-class streaming tool output · Issue #484 · modelcontextprotocol/modelcontextprotocol
X Title: First-class streaming tool output · Issue #484 · modelcontextprotocol/modelcontextprotocol
Description: Proposal: Define streamed tool result semantics in MCP I’m working on a project experimenting with long-running tools and realtime updates in AI agent frameworks using MCP. While MCP currently supports notifications (for progress updates...
Open Graph Description: Proposal: Define streamed tool result semantics in MCP I’m working on a project experimenting with long-running tools and realtime updates in AI agent frameworks using MCP. While MCP currently supp...
X Description: Proposal: Define streamed tool result semantics in MCP I’m working on a project experimenting with long-running tools and realtime updates in AI agent frameworks using MCP. While MCP currently supp...
Opengraph URL: https://github.com/modelcontextprotocol/modelcontextprotocol/issues/484
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"First-class streaming tool output","articleBody":"## Proposal: Define streamed tool result semantics in MCP\n\nI’m working on a project experimenting with long-running tools and realtime updates in AI agent frameworks using MCP.\n\nWhile MCP currently supports notifications (for progress updates or resource changes) and pagination (for batched result fetching), these mechanisms are not suited for tools that emit result data incrementally as they run.\n\nWhat’s missing is a native protocol mechanism to surface these incremental tool outputs in real time — both:\n- to user interfaces (for live display), and\n- to agents (for use in ongoing reasoning and decision making *before* the tool call completes).\n\n---\n\n### Why this matters\n\nMany important tool use cases involve progressive results that should be available during execution:\n- AI agents acting as tools (streamed sub-agent responses)\n- Recursive planning and mid-execution decisions\n- Large result sets (e.g. databases, logs, datasets) returning partial rows\n- User-interactive tools or streaming input/output\n- Long-running pipelines or background tasks\n\nThese scenarios need *true streaming semantics*, where partial results are emitted as chunks and can be consumed by the agent and/or UI while the tool is still active.\n\nToday, MCP has no defined mechanism for this — notifications and pagination alone are not sufficient.\n\n---\n\n### Proposed addition to MCP\n\nIt would be ideal for MCP to define streamed result semantics as a first-class pattern in the protocol:\n\n- Allow tool implementations to yield result chunks incrementally while running (not only final results)\n- Define protocol-level messages specifically for streamed tool result chunks (distinct from notifications and pagination)\n- Ensure that agent frameworks consuming MCP can ingest these streamed result chunks as they arrive and optionally surface them into LLM context at reasoning steps\n\nThis would unlock important real-time and incremental execution patterns for agents, enabling much more advanced and dynamic tool integrations.\n\n---\n\n### Demonstration project (proof of gap)\n\nAn experimental project demonstrates the current protocol gap and explores an interim solution using notifications + SDK extension:\n\nhttps://github.com/josephbharrison/streamable-mcp-client\n\nWhile this prototype streams chunks via notifications and forcibly advances agent reasoning, it does **not solve the problem fully**, as streamed chunks are not surfaced into agent context without protocol-level support.\n\nThis reinforces that first-class streamed tool result support should be defined at the protocol level for proper integration and reasoning.","author":{"url":"https://github.com/josephbharrison","@type":"Person","name":"josephbharrison"},"datePublished":"2025-05-07T17:41:35.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/484/modelcontextprotocol/issues/484"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:7e2cdae0-4657-b92b-82e9-8440f10f64b0 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C342:37B953:876B70:B465CE:6A5B6AE6 |
| html-safe-nonce | f3ba0e9a8a02656f8bba607751ba202e2f1e82f8f3214db2d43813d51339673e |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDMzQyOjM3Qjk1Mzo4NzZCNzA6QjQ2NUNFOjZBNUI2QUU2IiwidmlzaXRvcl9pZCI6IjgyMzAzMTE3MzM2NDAyNjAzMjciLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | d5ad16d5e00ec5f8108720f3938bd1b7c32cf12a6403936f08cc881b8c76428c |
| hovercard-subject-tag | issue:3046722418 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/modelcontextprotocol/modelcontextprotocol/484/issue_layout |
| twitter:image | https://opengraph.githubassets.com/10fe94563b0743179a53c27f6e201e7743caa2178d505d294849a58b149088ba/modelcontextprotocol/modelcontextprotocol/issues/484 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/10fe94563b0743179a53c27f6e201e7743caa2178d505d294849a58b149088ba/modelcontextprotocol/modelcontextprotocol/issues/484 |
| og:image:alt | Proposal: Define streamed tool result semantics in MCP I’m working on a project experimenting with long-running tools and realtime updates in AI agent frameworks using MCP. While MCP currently supp... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | josephbharrison |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b |
| turbo-cache-control | no-preview |
| go-import | github.com/modelcontextprotocol/modelcontextprotocol git https://github.com/modelcontextprotocol/modelcontextprotocol.git |
| octolytics-dimension-user_id | 182288589 |
| octolytics-dimension-user_login | modelcontextprotocol |
| octolytics-dimension-repository_id | 862570523 |
| octolytics-dimension-repository_nwo | modelcontextprotocol/modelcontextprotocol |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 862570523 |
| octolytics-dimension-repository_network_root_nwo | modelcontextprotocol/modelcontextprotocol |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9c975978430e9ad293956f2bbdaf153b1bd84a99 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width