Skip to content

Commit 20d16db

Browse files
committed
fix json response
1 parent 6f43d1f commit 20d16db

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

src/mcp/client/streamable_http.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from contextlib import asynccontextmanager
1212
from dataclasses import dataclass
1313
from datetime import timedelta
14+
import json
1415

1516
import anyio
1617
import httpx
@@ -299,14 +300,22 @@ async def _handle_json_response(
299300
"""Handle JSON response from the server."""
300301
try:
301302
content = await response.aread()
302-
message = JSONRPCMessage.model_validate_json(content)
303303

304-
# Extract protocol version from initialization response
305-
if is_initialization:
306-
self._maybe_extract_protocol_version_from_message(message)
304+
# Parse JSON first to determine structure
305+
data = json.loads(content)
306+
307+
if isinstance(data, list):
308+
messages = [JSONRPCMessage.model_validate(item) for item in data]
309+
else:
310+
message = JSONRPCMessage.model_validate(data)
311+
messages = [message]
312+
313+
for message in messages:
314+
if is_initialization:
315+
self._maybe_extract_protocol_version_from_message(message)
307316

308-
session_message = SessionMessage(message)
309-
await read_stream_writer.send(session_message)
317+
session_message = SessionMessage(message)
318+
await read_stream_writer.send(session_message)
310319
except Exception as exc:
311320
logger.error(f"Error parsing JSON response: {exc}")
312321
await read_stream_writer.send(exc)

0 commit comments

Comments
 (0)