Skip to content

Commit 30b475b

Browse files
committed
convert to Pydantic models
1 parent 9664c8a commit 30b475b

File tree

17 files changed

+67
-51
lines changed

17 files changed

+67
-51
lines changed

examples/servers/simple-prompt/mcp_simple_prompt/server.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,12 @@ async def get_prompt(
8888
)
8989

9090
if transport == "sse":
91+
from mcp.server.message_queue.redis import RedisMessageDispatch
9192
from mcp.server.sse import SseServerTransport
9293
from starlette.applications import Starlette
9394
from starlette.responses import Response
9495
from starlette.routing import Mount, Route
9596

96-
from mcp.server.message_queue.redis import RedisMessageDispatch
97-
9897
message_dispatch = RedisMessageDispatch("redis://localhost:6379/0")
9998

10099
sse = SseServerTransport("/messages/", message_dispatch=message_dispatch)

src/mcp/client/sse.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ async def sse_reader(
9898
await read_stream_writer.send(exc)
9999
continue
100100

101-
session_message = SessionMessage(message)
101+
session_message = SessionMessage(message=message)
102102
await read_stream_writer.send(session_message)
103103
case _:
104104
logger.warning(

src/mcp/client/stdio/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ async def stdout_reader():
144144
await read_stream_writer.send(exc)
145145
continue
146146

147-
session_message = SessionMessage(message)
147+
session_message = SessionMessage(message=message)
148148
await read_stream_writer.send(session_message)
149149
except anyio.ClosedResourceError:
150150
await anyio.lowlevel.checkpoint()

src/mcp/client/streamable_http.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ async def _handle_sse_event(
153153
):
154154
message.root.id = original_request_id
155155

156-
session_message = SessionMessage(message)
156+
session_message = SessionMessage(message=message)
157157
await read_stream_writer.send(session_message)
158158

159159
# Call resumption token callback if we have an ID
@@ -286,7 +286,7 @@ async def _handle_json_response(
286286
try:
287287
content = await response.aread()
288288
message = JSONRPCMessage.model_validate_json(content)
289-
session_message = SessionMessage(message)
289+
session_message = SessionMessage(message=message)
290290
await read_stream_writer.send(session_message)
291291
except Exception as exc:
292292
logger.error(f"Error parsing JSON response: {exc}")
@@ -333,7 +333,7 @@ async def _send_session_terminated_error(
333333
id=request_id,
334334
error=ErrorData(code=32600, message="Session terminated"),
335335
)
336-
session_message = SessionMessage(JSONRPCMessage(jsonrpc_error))
336+
session_message = SessionMessage(message=JSONRPCMessage(jsonrpc_error))
337337
await read_stream_writer.send(session_message)
338338

339339
async def post_writer(

src/mcp/client/websocket.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ async def ws_reader():
6060
async for raw_text in ws:
6161
try:
6262
message = types.JSONRPCMessage.model_validate_json(raw_text)
63-
session_message = SessionMessage(message)
63+
session_message = SessionMessage(message=message)
6464
await read_stream_writer.send(session_message)
6565
except ValidationError as exc:
6666
# If JSON parse or model validation fails, send the exception

src/mcp/server/message_queue/redis.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from anyio.abc import TaskGroup
99
from pydantic import ValidationError
1010

11-
import mcp.types as types
1211
from mcp.server.message_queue.base import MessageCallback
12+
from mcp.shared.message import SessionMessage
1313

1414
try:
1515
import redis.asyncio as redis
@@ -165,7 +165,7 @@ async def _handle_message(self, session_id: UUID, data: str) -> None:
165165
# Parse message or pass validation error to callback
166166
msg_or_error = None
167167
try:
168-
msg_or_error = types.JSONRPCMessage.model_validate_json(data)
168+
msg_or_error = SessionMessage.model_validate_json(data)
169169
except ValidationError as exc:
170170
msg_or_error = exc
171171

@@ -174,7 +174,7 @@ async def _handle_message(self, session_id: UUID, data: str) -> None:
174174
logger.error(f"Error in message handler for {session_id}: {e}")
175175

176176
async def publish_message(
177-
self, session_id: UUID, message: types.JSONRPCMessage | str
177+
self, session_id: UUID, message: SessionMessage | str
178178
) -> bool:
179179
"""Publish a message for the specified session."""
180180
if not await self.session_exists(session_id):

src/mcp/server/stdio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ async def stdin_reader():
6767
await read_stream_writer.send(exc)
6868
continue
6969

70-
session_message = SessionMessage(message)
70+
session_message = SessionMessage(message=message)
7171
await read_stream_writer.send(session_message)
7272
except anyio.ClosedResourceError:
7373
await anyio.lowlevel.checkpoint()

src/mcp/server/streamable_http.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ async def _handle_post_request(
398398
await response(scope, receive, send)
399399

400400
# Process the message after sending the response
401-
session_message = SessionMessage(message)
401+
session_message = SessionMessage(message=message)
402402
await writer.send(session_message)
403403

404404
return
@@ -413,7 +413,7 @@ async def _handle_post_request(
413413

414414
if self.is_json_response_enabled:
415415
# Process the message
416-
session_message = SessionMessage(message)
416+
session_message = SessionMessage(message=message)
417417
await writer.send(session_message)
418418
try:
419419
# Process messages from the request-specific stream
@@ -512,7 +512,7 @@ async def sse_writer():
512512
async with anyio.create_task_group() as tg:
513513
tg.start_soon(response, scope, receive, send)
514514
# Then send the message to be processed by the server
515-
session_message = SessionMessage(message)
515+
session_message = SessionMessage(message=message)
516516
await writer.send(session_message)
517517
except Exception:
518518
logger.exception("SSE response error")

src/mcp/server/websocket.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ async def ws_reader():
4242
await read_stream_writer.send(exc)
4343
continue
4444

45-
session_message = SessionMessage(client_message)
45+
session_message = SessionMessage(message=client_message)
4646
await read_stream_writer.send(session_message)
4747
except anyio.ClosedResourceError:
4848
await websocket.close()

src/mcp/shared/message.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ class SessionMessage(BaseModel):
3838
"""A message with specific metadata for transport-specific features."""
3939

4040
message: JSONRPCMessage
41-
metadata: MessageMetadata = None
41+
metadata: MessageMetadata | None = None

0 commit comments

Comments
 (0)