Skip to content

Fix SSE server uncaught TypeError due to incorrect routing #121

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jan 3, 2025
Merged
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
9 changes: 3 additions & 6 deletions examples/servers/simple-prompt/mcp_simple_prompt/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ async def get_prompt(
if transport == "sse":
from mcp.server.sse import SseServerTransport
from starlette.applications import Starlette
from starlette.routing import Route
from starlette.routing import Route, Mount

sse = SseServerTransport("/messages")
sse = SseServerTransport("/messages/")

async def handle_sse(request):
async with sse.connect_sse(
Expand All @@ -102,14 +102,11 @@ async def handle_sse(request):
streams[0], streams[1], app.create_initialization_options()
)

async def handle_messages(request):
await sse.handle_post_message(request.scope, request.receive, request._send)

starlette_app = Starlette(
debug=True,
routes=[
Route("/sse", endpoint=handle_sse),
Route("/messages", endpoint=handle_messages, methods=["POST"]),
Mount("/messages/", app=sse.handle_post_message),
],
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ async def read_resource(uri: AnyUrl) -> str | bytes:
if transport == "sse":
from mcp.server.sse import SseServerTransport
from starlette.applications import Starlette
from starlette.routing import Route
from starlette.routing import Route, Mount

sse = SseServerTransport("/messages")
sse = SseServerTransport("/messages/")

async def handle_sse(request):
async with sse.connect_sse(
Expand All @@ -59,14 +59,11 @@ async def handle_sse(request):
streams[0], streams[1], app.create_initialization_options()
)

async def handle_messages(request):
await sse.handle_post_message(request.scope, request.receive, request._send)

starlette_app = Starlette(
debug=True,
routes=[
Route("/sse", endpoint=handle_sse),
Route("/messages", endpoint=handle_messages, methods=["POST"]),
Mount("/messages/", app=sse.handle_post_message),
],
)

Expand Down
9 changes: 3 additions & 6 deletions examples/servers/simple-tool/mcp_simple_tool/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ async def list_tools() -> list[types.Tool]:
if transport == "sse":
from mcp.server.sse import SseServerTransport
from starlette.applications import Starlette
from starlette.routing import Route
from starlette.routing import Route, Mount

sse = SseServerTransport("/messages")
sse = SseServerTransport("/messages/")

async def handle_sse(request):
async with sse.connect_sse(
Expand All @@ -72,14 +72,11 @@ async def handle_sse(request):
streams[0], streams[1], app.create_initialization_options()
)

async def handle_messages(request):
await sse.handle_post_message(request.scope, request.receive, request._send)

starlette_app = Starlette(
debug=True,
routes=[
Route("/sse", endpoint=handle_sse),
Route("/messages", endpoint=handle_messages, methods=["POST"]),
Mount("/messages/", app=sse.handle_post_message),
],
)

Expand Down
9 changes: 3 additions & 6 deletions src/mcp/server/fastmcp/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -423,9 +423,9 @@ async def run_stdio_async(self) -> None:
async def run_sse_async(self) -> None:
"""Run the server using SSE transport."""
from starlette.applications import Starlette
from starlette.routing import Route
from starlette.routing import Route, Mount

sse = SseServerTransport("/messages")
sse = SseServerTransport("/messages/")

async def handle_sse(request):
async with sse.connect_sse(
Expand All @@ -437,14 +437,11 @@ async def handle_sse(request):
self._mcp_server.create_initialization_options(),
)

async def handle_messages(request):
await sse.handle_post_message(request.scope, request.receive, request._send)

starlette_app = Starlette(
debug=self.settings.debug,
routes=[
Route("/sse", endpoint=handle_sse),
Route("/messages", endpoint=handle_messages, methods=["POST"]),
Mount("/messages/", app=sse.handle_post_message),
],
)

Expand Down
7 changes: 2 additions & 5 deletions src/mcp/server/sse.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
Example usage:
```
# Create an SSE transport at an endpoint
sse = SseServerTransport("/messages")
sse = SseServerTransport("/messages/")

# Create Starlette routes for SSE and message handling
routes = [
Route("/sse", endpoint=handle_sse),
Route("/messages", endpoint=handle_messages, methods=["POST"])
Mount("/messages/", app=sse.handle_post_message),
]

# Define handler functions
Expand All @@ -23,9 +23,6 @@ async def handle_sse(request):
streams[0], streams[1], app.create_initialization_options()
)

async def handle_messages(request):
await sse.handle_post_message(request.scope, request.receive, request._send)

# Create and run Starlette app
starlette_app = Starlette(routes=routes)
uvicorn.run(starlette_app, host="0.0.0.0", port=port)
Expand Down