From 20d16db27b850f655f60edff373252875ecb577a Mon Sep 17 00:00:00 2001 From: notsobad Date: Mon, 30 Jun 2025 16:38:58 +0800 Subject: [PATCH 1/4] fix json response --- src/mcp/client/streamable_http.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/mcp/client/streamable_http.py b/src/mcp/client/streamable_http.py index 39ac34d8a..90373637b 100644 --- a/src/mcp/client/streamable_http.py +++ b/src/mcp/client/streamable_http.py @@ -11,6 +11,7 @@ from contextlib import asynccontextmanager from dataclasses import dataclass from datetime import timedelta +import json import anyio import httpx @@ -299,14 +300,22 @@ async def _handle_json_response( """Handle JSON response from the server.""" try: content = await response.aread() - message = JSONRPCMessage.model_validate_json(content) - # Extract protocol version from initialization response - if is_initialization: - self._maybe_extract_protocol_version_from_message(message) + # Parse JSON first to determine structure + data = json.loads(content) + + if isinstance(data, list): + messages = [JSONRPCMessage.model_validate(item) for item in data] + else: + message = JSONRPCMessage.model_validate(data) + messages = [message] + + for message in messages: + if is_initialization: + self._maybe_extract_protocol_version_from_message(message) - session_message = SessionMessage(message) - await read_stream_writer.send(session_message) + session_message = SessionMessage(message) + await read_stream_writer.send(session_message) except Exception as exc: logger.error(f"Error parsing JSON response: {exc}") await read_stream_writer.send(exc) From 69d693c9fdd0d07aa4857b2abce4996015f8142f Mon Sep 17 00:00:00 2001 From: notsobad Date: Mon, 30 Jun 2025 16:50:49 +0800 Subject: [PATCH 2/4] fix lint --- src/mcp/client/streamable_http.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mcp/client/streamable_http.py b/src/mcp/client/streamable_http.py index 90373637b..b73cd56cc 100644 --- a/src/mcp/client/streamable_http.py +++ b/src/mcp/client/streamable_http.py @@ -6,12 +6,12 @@ and session management. """ +import json import logging from collections.abc import AsyncGenerator, Awaitable, Callable from contextlib import asynccontextmanager from dataclasses import dataclass from datetime import timedelta -import json import anyio import httpx From f4201bdbe3bd1bde09f0439dfb1bf5298a728a4a Mon Sep 17 00:00:00 2001 From: notsobad Date: Mon, 30 Jun 2025 17:13:35 +0800 Subject: [PATCH 3/4] fix lint --- src/mcp/client/streamable_http.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mcp/client/streamable_http.py b/src/mcp/client/streamable_http.py index b73cd56cc..84cb2e088 100644 --- a/src/mcp/client/streamable_http.py +++ b/src/mcp/client/streamable_http.py @@ -305,7 +305,7 @@ async def _handle_json_response( data = json.loads(content) if isinstance(data, list): - messages = [JSONRPCMessage.model_validate(item) for item in data] + messages = [JSONRPCMessage.model_validate(item) for item in data] # type: ignore else: message = JSONRPCMessage.model_validate(data) messages = [message] From c3342c92493a6c197bbe883a2446a925cf9cfe5c Mon Sep 17 00:00:00 2001 From: notsobad Date: Mon, 30 Jun 2025 17:16:14 +0800 Subject: [PATCH 4/4] fix lint --- src/mcp/client/streamable_http.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mcp/client/streamable_http.py b/src/mcp/client/streamable_http.py index 84cb2e088..050187baa 100644 --- a/src/mcp/client/streamable_http.py +++ b/src/mcp/client/streamable_http.py @@ -305,7 +305,7 @@ async def _handle_json_response( data = json.loads(content) if isinstance(data, list): - messages = [JSONRPCMessage.model_validate(item) for item in data] # type: ignore + messages = [JSONRPCMessage.model_validate(item) for item in data] # type: ignore else: message = JSONRPCMessage.model_validate(data) messages = [message]