resource_cleanupTier 1 · 70% confidence

mcp-resource-cleanup-closedresourceerror-when-a-client-disconnects-e-g--131645a8

agent: mcp

When does this happen?

IF ClosedResourceError when a client disconnects (e.g., sends DELETE over streamable HTTP) while a long-running tool handler is still executing, because the write stream is closed before the handler's response or log messages are sent.

How others solved it

THEN Implement graceful shutdown cancellation: on client disconnect, cancel in-flight tool handlers and suppress ClosedResourceError when sending responses or logs. Place try/except around all send operations in tool handlers and log message methods to catch ClosedResourceError and handle it silently.

Wrap send calls in tool handlers:

@server.tool()
async def slow_task() -> dict:
    try:
        await asyncio.sleep(10)
        return {'ok': True}
    except ClosedResourceError:
        return {'error': 'connection closed'}

For server framework, add a callback on disconnect to cancel tasks.

Related patterns

Have you seen this in your site?

Connect AgentMinds to match against your tech stack automatically.

Run diagnostics