@@ -43,7 +43,7 @@ async def handle_sse(request):
4343from sse_starlette import EventSourceResponse
4444from starlette .requests import Request
4545from starlette .responses import Response
46- from starlette .types import Receive , Scope , Send
46+ from starlette .types import Message , Receive , Scope , Send
4747
4848import mcp .types as types
4949
@@ -120,9 +120,15 @@ async def sse_writer():
120120 }
121121 )
122122
123+ async def handle_see_disconnect (message : Message ) -> None :
124+ logger .debug (f"Disconnect sse { session_id } " )
125+ del self ._read_stream_writers [session_id ]
126+
123127 async with anyio .create_task_group () as tg :
124128 response = EventSourceResponse (
125- content = sse_stream_reader , data_sender_callable = sse_writer
129+ content = sse_stream_reader ,
130+ data_sender_callable = sse_writer ,
131+ client_close_handler_callable = handle_see_disconnect , # type: ignore
126132 )
127133 logger .debug ("Starting SSE response task" )
128134 tg .start_soon (response , scope , receive , send )
0 commit comments