@@ -78,7 +78,7 @@ async def test_stdio_server(run_context: RunContext[int]):
7878 server = MCPServerStdio ('python' , ['-m' , 'tests.mcp_server' ])
7979 async with server :
8080 tools = [tool .tool_def for tool in (await server .get_tools (run_context )).values ()]
81- assert len (tools ) == snapshot (19 )
81+ assert len (tools ) == snapshot (20 )
8282 assert tools [0 ].name == 'celsius_to_fahrenheit'
8383 assert isinstance (tools [0 ].description , str )
8484 assert tools [0 ].description .startswith ('Convert Celsius to Fahrenheit.' )
@@ -92,16 +92,30 @@ async def test_tool_response_metadata(run_context: RunContext[int]):
9292 server = MCPServerStdio ('python' , ['-m' , 'tests.mcp_server' ])
9393 async with server :
9494 tools = [tool .tool_def for tool in (await server .get_tools (run_context )).values ()]
95- assert len (tools ) == snapshot (19 )
96- assert tools [4 ].name == 'collatz_conjecture '
95+ assert len (tools ) == snapshot (20 )
96+ assert tools [4 ].name == 'get_collatz_conjecture '
9797 assert isinstance (tools [4 ].description , str )
9898 assert tools [4 ].description .startswith ('Generate the Collatz conjecture sequence for a given number.' )
9999
100- # Test calling the Collatz conjecture generator tool
101- result = await server .direct_call_tool ('collatz_conjecture' , {'n' : 7 })
100+ result = await server .direct_call_tool ('get_collatz_conjecture' , {'n' : 7 })
102101 assert isinstance (result , ToolReturn )
103- assert result .return_value == '[7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]'
104- assert result .metadata == {'pydantic_ai' : {'tool' : 'collatz_conjecture' , 'length' : 17 }}
102+ assert result .return_value == snapshot ([7 , 22 , 11 , 34 , 17 , 52 , 26 , 13 , 40 , 20 , 10 , 5 , 16 , 8 , 4 , 2 , 1 ])
103+ assert result .metadata == snapshot ({'pydantic_ai' : {'tool' : 'collatz_conjecture' , 'n' : 7 , 'length' : 17 }})
104+
105+
106+ async def test_tool_structured_response_metadata (run_context : RunContext [int ]):
107+ server = MCPServerStdio ('python' , ['-m' , 'tests.mcp_server' ])
108+ async with server :
109+ tools = [tool .tool_def for tool in (await server .get_tools (run_context )).values ()]
110+ assert len (tools ) == snapshot (20 )
111+ assert tools [5 ].name == 'get_structured_text_content_with_metadata'
112+ assert isinstance (tools [5 ].description , str )
113+ assert tools [5 ].description .startswith ('Return structured dict with metadata.' )
114+
115+ result = await server .direct_call_tool ('get_structured_text_content_with_metadata' , {})
116+ assert isinstance (result , ToolReturn )
117+ assert result .return_value == 'This is some text content.'
118+ assert result .metadata == snapshot ({'pydantic_ai' : {'source' : 'get_structured_text_content_with_metadata' }})
105119
106120
107121async def test_reentrant_context_manager ():
@@ -155,7 +169,7 @@ async def test_stdio_server_with_cwd(run_context: RunContext[int]):
155169 server = MCPServerStdio ('python' , ['mcp_server.py' ], cwd = test_dir )
156170 async with server :
157171 tools = await server .get_tools (run_context )
158- assert len (tools ) == snapshot (19 )
172+ assert len (tools ) == snapshot (20 )
159173
160174
161175async def test_process_tool_call (run_context : RunContext [int ]) -> int :
0 commit comments