@@ -43,7 +43,7 @@ async def handle_sse(request):
43
43
from sse_starlette import EventSourceResponse
44
44
from starlette .requests import Request
45
45
from starlette .responses import Response
46
- from starlette .types import Receive , Scope , Send
46
+ from starlette .types import Message , Receive , Scope , Send
47
47
48
48
import mcp .types as types
49
49
@@ -120,9 +120,15 @@ async def sse_writer():
120
120
}
121
121
)
122
122
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
+
123
127
async with anyio .create_task_group () as tg :
124
128
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
126
132
)
127
133
logger .debug ("Starting SSE response task" )
128
134
tg .start_soon (response , scope , receive , send )
0 commit comments