Skip to content

Commit 0970ef4

Browse files
committed
Fix SSE server bug with uncaught TypeError
1 parent 59fff69 commit 0970ef4

File tree

5 files changed

+13
-25
lines changed

5 files changed

+13
-25
lines changed

examples/servers/simple-prompt/mcp_simple_prompt/server.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ async def get_prompt(
9090
if transport == "sse":
9191
from mcp.server.sse import SseServerTransport
9292
from starlette.applications import Starlette
93-
from starlette.routing import Route
93+
from starlette.routing import Route, Mount
9494

95-
sse = SseServerTransport("/messages")
95+
sse = SseServerTransport("/messages/")
9696

9797
async def handle_sse(request):
9898
async with sse.connect_sse(
@@ -102,14 +102,11 @@ async def handle_sse(request):
102102
streams[0], streams[1], app.create_initialization_options()
103103
)
104104

105-
async def handle_messages(request):
106-
await sse.handle_post_message(request.scope, request.receive, request._send)
107-
108105
starlette_app = Starlette(
109106
debug=True,
110107
routes=[
111108
Route("/sse", endpoint=handle_sse),
112-
Route("/messages", endpoint=handle_messages, methods=["POST"]),
109+
Mount("/messages/", app=sse.handle_post_message)
113110
],
114111
)
115112

examples/servers/simple-resource/mcp_simple_resource/server.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ async def read_resource(uri: AnyUrl) -> str | bytes:
4747
if transport == "sse":
4848
from mcp.server.sse import SseServerTransport
4949
from starlette.applications import Starlette
50-
from starlette.routing import Route
50+
from starlette.routing import Route, Mount
5151

52-
sse = SseServerTransport("/messages")
52+
sse = SseServerTransport("/messages/")
5353

5454
async def handle_sse(request):
5555
async with sse.connect_sse(
@@ -59,14 +59,11 @@ async def handle_sse(request):
5959
streams[0], streams[1], app.create_initialization_options()
6060
)
6161

62-
async def handle_messages(request):
63-
await sse.handle_post_message(request.scope, request.receive, request._send)
64-
6562
starlette_app = Starlette(
6663
debug=True,
6764
routes=[
6865
Route("/sse", endpoint=handle_sse),
69-
Route("/messages", endpoint=handle_messages, methods=["POST"]),
66+
Mount("/messages/", app=sse.handle_post_message),
7067
],
7168
)
7269

examples/servers/simple-tool/mcp_simple_tool/server.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ async def list_tools() -> list[types.Tool]:
6060
if transport == "sse":
6161
from mcp.server.sse import SseServerTransport
6262
from starlette.applications import Starlette
63-
from starlette.routing import Route
63+
from starlette.routing import Route, Mount
6464

65-
sse = SseServerTransport("/messages")
65+
sse = SseServerTransport("/messages/")
6666

6767
async def handle_sse(request):
6868
async with sse.connect_sse(
@@ -72,14 +72,11 @@ async def handle_sse(request):
7272
streams[0], streams[1], app.create_initialization_options()
7373
)
7474

75-
async def handle_messages(request):
76-
await sse.handle_post_message(request.scope, request.receive, request._send)
77-
7875
starlette_app = Starlette(
7976
debug=True,
8077
routes=[
8178
Route("/sse", endpoint=handle_sse),
82-
Route("/messages", endpoint=handle_messages, methods=["POST"]),
79+
Mount("/messages/", app=sse.handle_post_message),
8380
],
8481
)
8582

src/mcp/server/fastmcp/server.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,9 @@ async def run_stdio_async(self) -> None:
423423
async def run_sse_async(self) -> None:
424424
"""Run the server using SSE transport."""
425425
from starlette.applications import Starlette
426-
from starlette.routing import Route
426+
from starlette.routing import Route, Mount
427427

428-
sse = SseServerTransport("/messages")
428+
sse = SseServerTransport("/messages/")
429429

430430
async def handle_sse(request):
431431
async with sse.connect_sse(
@@ -437,14 +437,11 @@ async def handle_sse(request):
437437
self._mcp_server.create_initialization_options(),
438438
)
439439

440-
async def handle_messages(request):
441-
await sse.handle_post_message(request.scope, request.receive, request._send)
442-
443440
starlette_app = Starlette(
444441
debug=self.settings.debug,
445442
routes=[
446443
Route("/sse", endpoint=handle_sse),
447-
Route("/messages", endpoint=handle_messages, methods=["POST"]),
444+
Mount("/messages/", app=sse.handle_post_message),
448445
],
449446
)
450447

src/mcp/server/sse.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
# Create Starlette routes for SSE and message handling
1212
routes = [
1313
Route("/sse", endpoint=handle_sse),
14-
Route("/messages", endpoint=handle_messages, methods=["POST"])
14+
Mount("/messages", endpoint=handle_messages, methods=["POST"])
1515
]
1616
1717
# Define handler functions

0 commit comments

Comments
 (0)