From e6d5b00991a9abcfe2469e2fed929d0113ad6e3a Mon Sep 17 00:00:00 2001 From: sebin1213 <73850629+sebin1213@users.noreply.github.com> Date: Wed, 9 Apr 2025 02:02:49 +0000 Subject: [PATCH 1/3] Fix generate accurate session_uri for nested SSE paths --- src/mcp/client/sse.py | 16 +++------------- src/mcp/server/sse.py | 7 +++++-- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/mcp/client/sse.py b/src/mcp/client/sse.py index c41c414ed..0194c02a5 100644 --- a/src/mcp/client/sse.py +++ b/src/mcp/client/sse.py @@ -1,5 +1,4 @@ import logging -import re from contextlib import asynccontextmanager from typing import Any from urllib.parse import urljoin, urlparse @@ -62,21 +61,12 @@ async def sse_reader( logger.debug(f"Received SSE event: {sse.event}") match sse.event: case "endpoint": - url_parsed = urlparse(url) - - base_path = re.search( - r"https?://[^/]+/(.+?)(?:/mcp)?/sse$", url - ) - base_path = ( - base_path.group(1) if base_path else "" - ) - endpoint_url = urljoin( - url_parsed.scheme + "://" + url_parsed.netloc, # noqa: E501 - base_path + sse.data - ) + endpoint_url = urljoin(url, sse.data) logger.info( f"Received endpoint URL: {endpoint_url}" ) + + url_parsed = urlparse(url) endpoint_parsed = urlparse(endpoint_url) if ( diff --git a/src/mcp/server/sse.py b/src/mcp/server/sse.py index d051c25bf..dbb40bed0 100644 --- a/src/mcp/server/sse.py +++ b/src/mcp/server/sse.py @@ -94,8 +94,11 @@ async def connect_sse(self, scope: Scope, receive: Receive, send: Send): read_stream_writer, read_stream = anyio.create_memory_object_stream(0) write_stream, write_stream_reader = anyio.create_memory_object_stream(0) - session_id = uuid4() - session_uri = f"{quote(self._endpoint)}?session_id={session_id.hex}" + request_path = scope["path"] + match = re.match(r"^/([^/]+(?:/mcp)?)/sse$", request_path) + mount_prefix = match.group(1) if match else "" + session_uri = f"/{quote(mount_prefix)}{quote(self._endpoint)}?session_id={session_id.hex}" + self._read_stream_writers[session_id] = read_stream_writer logger.debug(f"Created new session with ID: {session_id}") From 1ac7b63fe648fb2c8bcf87bed0797da79650881e Mon Sep 17 00:00:00 2001 From: sebin1213 <73850629+sebin1213@users.noreply.github.com> Date: Wed, 9 Apr 2025 11:13:29 +0900 Subject: [PATCH 2/3] Fix generate accurate session_uri for nested SSE paths --- src/mcp/server/sse.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mcp/server/sse.py b/src/mcp/server/sse.py index dbb40bed0..a51190376 100644 --- a/src/mcp/server/sse.py +++ b/src/mcp/server/sse.py @@ -94,6 +94,7 @@ async def connect_sse(self, scope: Scope, receive: Receive, send: Send): read_stream_writer, read_stream = anyio.create_memory_object_stream(0) write_stream, write_stream_reader = anyio.create_memory_object_stream(0) + session_id = uuid4() request_path = scope["path"] match = re.match(r"^/([^/]+(?:/mcp)?)/sse$", request_path) mount_prefix = match.group(1) if match else "" From 7cece5e8e6afeb97eb4e81988acb948a4d512ac5 Mon Sep 17 00:00:00 2001 From: sebin1213 <73850629+sebin1213@users.noreply.github.com> Date: Wed, 9 Apr 2025 13:15:47 +0900 Subject: [PATCH 3/3] Fix generate accurate session_uri for nested SSE paths --- src/mcp/server/sse.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mcp/server/sse.py b/src/mcp/server/sse.py index a51190376..ad6059c3d 100644 --- a/src/mcp/server/sse.py +++ b/src/mcp/server/sse.py @@ -37,6 +37,7 @@ async def handle_sse(request): from urllib.parse import quote from uuid import UUID, uuid4 +import re import anyio from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream from pydantic import ValidationError