From 84a79ab56ea3d7252cc36736da3f9c450f761886 Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Sat, 10 May 2025 16:10:39 -0400 Subject: [PATCH] Fix bug that sets message path and sse path to same value --- src/fastmcp/server/server.py | 2 +- src/fastmcp/utilities/tests.py | 6 ++++-- tests/client/test_sse.py | 11 +++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/fastmcp/server/server.py b/src/fastmcp/server/server.py index 4ea5822fc..9dabc8735 100644 --- a/src/fastmcp/server/server.py +++ b/src/fastmcp/server/server.py @@ -869,7 +869,7 @@ class FastMCP(Generic[LifespanResultT]): elif transport == "sse": return create_sse_app( server=self, - message_path=path or self.settings.message_path, + message_path=self.settings.message_path, sse_path=path or self.settings.sse_path, auth_server_provider=self._auth_server_provider, auth_settings=self.settings.auth, diff --git a/src/fastmcp/utilities/tests.py b/src/fastmcp/utilities/tests.py index 8f6e3bd7d..39bd6b9c7 100644 --- a/src/fastmcp/utilities/tests.py +++ b/src/fastmcp/utilities/tests.py @@ -71,7 +71,7 @@ def _run_server(mcp_server: FastMCP, transport: Literal["sse"], port: int) -> No @contextmanager def run_server_in_process( - server_fn: Callable[[str, int], None], + server_fn: Callable[[str, int], None], *args ) -> Generator[str, None, None]: """ Context manager that runs a Starlette app in a separate process and returns the @@ -88,7 +88,9 @@ def run_server_in_process( s.bind((host, 0)) port = s.getsockname()[1] - proc = multiprocessing.Process(target=server_fn, args=(host, port), daemon=True) + proc = multiprocessing.Process( + target=server_fn, args=(host, port, *args), daemon=True + ) proc.start() # Wait for server to be running diff --git a/tests/client/test_sse.py b/tests/client/test_sse.py index 1a09a38ec..e4bdf9066 100644 --- a/tests/client/test_sse.py +++ b/tests/client/test_sse.py @@ -56,9 +56,9 @@ def fastmcp_server(): return server -def run_server(host: str, port: int) -> None: +def run_server(host: str, port: int, path: str | None = None) -> None: try: - app = fastmcp_server().http_app(transport="sse") + app = fastmcp_server().http_app(transport="sse", path=path) server = uvicorn.Server( config=uvicorn.Config(app=app, host=host, port=port, log_level="error") ) @@ -109,6 +109,13 @@ def run_nested_server(host: str, port: int) -> None: sys.exit(0) +async def test_run_server_on_path(): + with run_server_in_process(run_server, "/help") as url: + async with Client(transport=SSETransport(f"{url}/help")) as client: + result = await client.ping() + assert result is True + + async def test_nested_sse_server_resolves_correctly(): # tests patch for # https://github.com/modelcontextprotocol/python-sdk/pull/659