Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/mcp/server/sse.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ async def handle_sse(request):
import anyio
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
from pydantic import ValidationError
from sse_starlette import EventSourceResponse
from starlette.requests import Request
from starlette.responses import Response
from starlette.types import Receive, Scope, Send
Expand Down Expand Up @@ -185,6 +184,8 @@ async def response_wrapper(scope: Scope, receive: Receive, send: Send):
In this case we close our side of the streams to signal the client that
the connection has been closed.
"""
from sse_starlette import EventSourceResponse

await EventSourceResponse(content=sse_stream_reader, data_sender_callable=sse_writer)(
scope, receive, send
)
Expand Down
9 changes: 7 additions & 2 deletions src/mcp/server/streamable_http.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import anyio
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
from pydantic import ValidationError
from sse_starlette import EventSourceResponse
from starlette.requests import Request
from starlette.responses import Response
from starlette.types import Receive, Scope, Send
Expand Down Expand Up @@ -441,7 +440,7 @@ async def _validate_accept_header(self, request: Request, scope: Scope, send: Se
return False
return True

async def _handle_post_request(self, scope: Scope, request: Request, receive: Receive, send: Send) -> None:
async def _handle_post_request(self, scope: Scope, request: Request, receive: Receive, send: Send) -> None: # noqa: PLR0915
"""Handle POST requests containing JSON-RPC messages."""
writer = self._read_stream_writer
if writer is None: # pragma: no cover
Expand Down Expand Up @@ -613,6 +612,8 @@ async def sse_writer():
self._sse_stream_writers.pop(request_id, None)
await self._clean_up_memory_streams(request_id)

from sse_starlette import EventSourceResponse

# Create and start EventSourceResponse
# SSE stream mode (original behavior)
# Set up headers
Expand Down Expand Up @@ -730,6 +731,8 @@ async def standalone_sse_writer():
logger.debug("Closing standalone SSE writer")
await self._clean_up_memory_streams(GET_STREAM_KEY)

from sse_starlette import EventSourceResponse

# Create and start EventSourceResponse
response = EventSourceResponse(
content=sse_stream_reader,
Expand Down Expand Up @@ -934,6 +937,8 @@ async def send_event(event_message: EventMessage) -> None:
except Exception:
logger.exception("Error in replay sender")

from sse_starlette import EventSourceResponse

# Create and start EventSourceResponse
response = EventSourceResponse(
content=sse_stream_reader,
Expand Down
Loading