Skip to content

Commit 57aef47

Browse files
committed
Update session.py
1 parent 9e33007 commit 57aef47

File tree

1 file changed

+5
-13
lines changed

1 file changed

+5
-13
lines changed

src/mcp/server/session.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -248,37 +248,29 @@ async def create_message(
248248
The sampling result from the client.
249249
250250
Raises:
251-
McpError: If tool_use or tool_result blocks are misused
251+
McpError: If tool_use or tool_result blocks are misused when tools are provided.
252252
"""
253253

254254
if messages and tools:
255-
last_msg_content = messages[-1].content
256-
last_content = last_msg_content if isinstance(last_msg_content, list) else [last_msg_content]
255+
last_content = messages[-1].content_as_list
257256
has_tool_results = any(c.type == "tool_result" for c in last_content)
258257

259-
previous_content: list[types.SamplingMessageContentBlock] | None = None
260-
if len(messages) >= 2:
261-
prev_msg_content = messages[-2].content
262-
previous_content = prev_msg_content if isinstance(prev_msg_content, list) else [prev_msg_content]
258+
previous_content = messages[-2].content_as_list if len(messages) >= 2 else None
263259
has_previous_tool_use = previous_content and any(c.type == "tool_use" for c in previous_content)
264260

265261
if has_tool_results:
266262
if any(c.type != "tool_result" for c in last_content):
267263
raise ValueError("The last message must contain only tool_result content if any is present")
268-
if len(messages) == 1:
269-
raise ValueError(
270-
"The last message cannot contain tool_result content if there is no previous message"
271-
)
272264
if not has_previous_tool_use:
273265
raise ValueError(
274-
"The previous message must contain tool_use content if the last message contains tool_result content"
266+
"tool_result blocks are not matching any tool_use from the previous message"
275267
)
276268
if has_previous_tool_use and previous_content:
277269
tool_use_ids = {c.id for c in previous_content if c.type == "tool_use"}
278270
tool_result_ids = {c.toolUseId for c in last_content if c.type == "tool_result"}
279271
if tool_use_ids != tool_result_ids:
280272
raise ValueError(
281-
"The tool_result content in the last message must correspond to all tool_use content in the previous message"
273+
"ids of tool_result blocks should match all tool_use blocks from previous message"
282274
)
283275

284276
return await self.send_request(

0 commit comments

Comments
 (0)