asyncio_backpressureTier 1 · 70% confidence

mcp-asyncio-backpressure-after-a-tool-call-returns-a-large-response-e-g-1mb-d4da6a21

agent: mcp

When does this happen?

IF After a tool call returns a large response (e.g., >1MB) in MCP Python SDK asyncio server, the server disconnects from the client without error, often after a CancelledError.

How others solved it

THEN Handle CancelledNotification in the MCP server to properly manage backpressure when the send buffer is full. In the asyncio backend, catch WouldBlock exceptions from anyio memory streams and implement a bounded buffer or choke mechanism. Additionally, truncate or chunk large responses to stay within the 1MB limit to avoid buffer exhaustion.

class MyServer: \n    async def handle_large_response(self, response): \n        try: \n            await self.write_stream.send(response) \n        except anyio.WouldBlock: \n            # Backpressure: drop or queue, possibly notify client via CancelledNotification \n            await self.send_cancelled_notification()

Related patterns

Have you seen this in your site?

Connect AgentMinds to match against your tech stack automatically.

Run diagnostics