33import pytest
44
55import mcp .types as types
6- from mcp .client ._memory import InMemoryTransport
7- from mcp .client .session import ClientSession
6+ from mcp import Client
87from mcp .server import Server
98from mcp .server .fastmcp import FastMCP
109from mcp .types import ListToolsRequest , ListToolsResult
@@ -66,49 +65,43 @@ async def test_list_methods_params_parameter(
6665
6766 See: https://modelcontextprotocol.io/specification/2025-03-26/server/utilities/pagination#request-format
6867 """
69- transport = InMemoryTransport (full_featured_server )
70- async with transport .connect () as (read_stream , write_stream ):
71- async with ClientSession (read_stream , write_stream ) as session :
72- await session .initialize ()
73- spies = stream_spy ()
74-
75- # Test without params (omitted)
76- method = getattr (session , method_name )
77- _ = await method ()
78- requests = spies .get_client_requests (method = request_method )
79- assert len (requests ) == 1
80- assert requests [0 ].params is None
81-
82- spies .clear ()
83-
84- # Test with params containing cursor
85- _ = await method (params = types .PaginatedRequestParams (cursor = "from_params" ))
86- requests = spies .get_client_requests (method = request_method )
87- assert len (requests ) == 1
88- assert requests [0 ].params is not None
89- assert requests [0 ].params ["cursor" ] == "from_params"
90-
91- spies .clear ()
92-
93- # Test with empty params
94- _ = await method (params = types .PaginatedRequestParams ())
95- requests = spies .get_client_requests (method = request_method )
96- assert len (requests ) == 1
97- # Empty params means no cursor
98- assert requests [0 ].params is None or "cursor" not in requests [0 ].params
68+ async with Client (full_featured_server ) as client :
69+ spies = stream_spy ()
70+
71+ # Test without params (omitted)
72+ method = getattr (client , method_name )
73+ _ = await method ()
74+ requests = spies .get_client_requests (method = request_method )
75+ assert len (requests ) == 1
76+ assert requests [0 ].params is None
77+
78+ spies .clear ()
79+
80+ # Test with params containing cursor
81+ _ = await method (params = types .PaginatedRequestParams (cursor = "from_params" ))
82+ requests = spies .get_client_requests (method = request_method )
83+ assert len (requests ) == 1
84+ assert requests [0 ].params is not None
85+ assert requests [0 ].params ["cursor" ] == "from_params"
86+
87+ spies .clear ()
88+
89+ # Test with empty params
90+ _ = await method (params = types .PaginatedRequestParams ())
91+ requests = spies .get_client_requests (method = request_method )
92+ assert len (requests ) == 1
93+ # Empty params means no cursor
94+ assert requests [0 ].params is None or "cursor" not in requests [0 ].params
9995
10096
10197async def test_list_tools_with_strict_server_validation (
10298 full_featured_server : FastMCP ,
10399):
104100 """Test pagination with a server that validates request format strictly."""
105- transport = InMemoryTransport (full_featured_server )
106- async with transport .connect () as (read_stream , write_stream ):
107- async with ClientSession (read_stream , write_stream ) as session :
108- await session .initialize ()
109- result = await session .list_tools (params = types .PaginatedRequestParams ())
110- assert isinstance (result , ListToolsResult )
111- assert len (result .tools ) > 0
101+ async with Client (full_featured_server ) as client :
102+ result = await client .list_tools (params = types .PaginatedRequestParams ())
103+ assert isinstance (result , ListToolsResult )
104+ assert len (result .tools ) > 0
112105
113106
114107async def test_list_tools_with_lowlevel_server ():
@@ -129,13 +122,9 @@ async def handle_list_tools(request: ListToolsRequest) -> ListToolsResult:
129122 ]
130123 )
131124
132- transport = InMemoryTransport (server )
133- async with transport .connect () as (read_stream , write_stream ):
134- async with ClientSession (read_stream , write_stream ) as session :
135- await session .initialize ()
136-
137- result = await session .list_tools (params = types .PaginatedRequestParams ())
138- assert result .tools [0 ].description == "cursor=None"
125+ async with Client (server ) as client :
126+ result = await client .list_tools (params = types .PaginatedRequestParams ())
127+ assert result .tools [0 ].description == "cursor=None"
139128
140- result = await session .list_tools (params = types .PaginatedRequestParams (cursor = "page2" ))
141- assert result .tools [0 ].description == "cursor=page2"
129+ result = await client .list_tools (params = types .PaginatedRequestParams (cursor = "page2" ))
130+ assert result .tools [0 ].description == "cursor=page2"
0 commit comments