@@ -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