11import logging
2- import warnings
32from datetime import timedelta
4- from typing import Any , Protocol
3+ from typing import Any , Protocol , overload
54
65import anyio .lowlevel
76from anyio .streams .memory import MemoryObjectReceiveStream , MemoryObjectSendStream
87from jsonschema import SchemaError , ValidationError , validate
98from pydantic import AnyUrl , TypeAdapter
9+ from typing_extensions import deprecated
1010
1111import mcp .types as types
1212from mcp .shared .context import RequestContext
@@ -213,6 +213,16 @@ async def set_logging_level(self, level: types.LoggingLevel) -> types.EmptyResul
213213 types .EmptyResult ,
214214 )
215215
216+ @deprecated ("Use params=PaginatedRequestParams(...) instead" )
217+ @overload
218+ async def list_resources (self , cursor : str | None ) -> types .ListResourcesResult : ...
219+
220+ @overload
221+ async def list_resources (self , * , params : types .PaginatedRequestParams | None ) -> types .ListResourcesResult : ...
222+
223+ @overload
224+ async def list_resources (self ) -> types .ListResourcesResult : ...
225+
216226 async def list_resources (
217227 self ,
218228 cursor : str | None = None ,
@@ -222,23 +232,36 @@ async def list_resources(
222232 """Send a resources/list request.
223233
224234 Args:
225- cursor: (Deprecated) Pagination cursor. Use params parameter instead.
226- params: Pagination parameters. Defaults to None (omits params field).
235+ cursor: Simple cursor string for pagination (deprecated, use params instead)
236+ params: Full pagination parameters including cursor and any future fields
227237 """
228- if cursor is not None :
229- warnings .warn (
230- "cursor parameter is deprecated, use params=PaginatedRequestParams(cursor=...) instead" ,
231- DeprecationWarning ,
232- stacklevel = 2 ,
233- )
234- if params is None :
235- params = types .PaginatedRequestParams (cursor = cursor )
238+ if params is not None and cursor is not None :
239+ raise ValueError ("Cannot specify both cursor and params" )
240+
241+ if params is not None :
242+ request_params = params
243+ elif cursor is not None :
244+ request_params = types .PaginatedRequestParams (cursor = cursor )
245+ else :
246+ request_params = None
236247
237248 return await self .send_request (
238- types .ClientRequest (types .ListResourcesRequest (params = params )),
249+ types .ClientRequest (types .ListResourcesRequest (params = request_params )),
239250 types .ListResourcesResult ,
240251 )
241252
253+ @deprecated ("Use params=PaginatedRequestParams(...) instead" )
254+ @overload
255+ async def list_resource_templates (self , cursor : str | None ) -> types .ListResourceTemplatesResult : ...
256+
257+ @overload
258+ async def list_resource_templates (
259+ self , * , params : types .PaginatedRequestParams | None
260+ ) -> types .ListResourceTemplatesResult : ...
261+
262+ @overload
263+ async def list_resource_templates (self ) -> types .ListResourceTemplatesResult : ...
264+
242265 async def list_resource_templates (
243266 self ,
244267 cursor : str | None = None ,
@@ -248,20 +271,21 @@ async def list_resource_templates(
248271 """Send a resources/templates/list request.
249272
250273 Args:
251- cursor: (Deprecated) Pagination cursor. Use params parameter instead.
252- params: Pagination parameters. Defaults to None (omits params field).
274+ cursor: Simple cursor string for pagination (deprecated, use params instead)
275+ params: Full pagination parameters including cursor and any future fields
253276 """
254- if cursor is not None :
255- warnings .warn (
256- "cursor parameter is deprecated, use params=PaginatedRequestParams(cursor=...) instead" ,
257- DeprecationWarning ,
258- stacklevel = 2 ,
259- )
260- if params is None :
261- params = types .PaginatedRequestParams (cursor = cursor )
277+ if params is not None and cursor is not None :
278+ raise ValueError ("Cannot specify both cursor and params" )
279+
280+ if params is not None :
281+ request_params = params
282+ elif cursor is not None :
283+ request_params = types .PaginatedRequestParams (cursor = cursor )
284+ else :
285+ request_params = None
262286
263287 return await self .send_request (
264- types .ClientRequest (types .ListResourceTemplatesRequest (params = params )),
288+ types .ClientRequest (types .ListResourceTemplatesRequest (params = request_params )),
265289 types .ListResourceTemplatesResult ,
266290 )
267291
@@ -330,7 +354,7 @@ async def _validate_tool_result(self, name: str, result: types.CallToolResult) -
330354 """Validate the structured content of a tool result against its output schema."""
331355 if name not in self ._tool_output_schemas :
332356 # refresh output schema cache
333- await self .list_tools ()
357+ await self .list_tools () # type: ignore[reportDeprecated]
334358
335359 output_schema = None
336360 if name in self ._tool_output_schemas :
@@ -348,6 +372,16 @@ async def _validate_tool_result(self, name: str, result: types.CallToolResult) -
348372 except SchemaError as e :
349373 raise RuntimeError (f"Invalid schema for tool { name } : { e } " )
350374
375+ @deprecated ("Use params=PaginatedRequestParams(...) instead" )
376+ @overload
377+ async def list_prompts (self , cursor : str | None ) -> types .ListPromptsResult : ...
378+
379+ @overload
380+ async def list_prompts (self , * , params : types .PaginatedRequestParams | None ) -> types .ListPromptsResult : ...
381+
382+ @overload
383+ async def list_prompts (self ) -> types .ListPromptsResult : ...
384+
351385 async def list_prompts (
352386 self ,
353387 cursor : str | None = None ,
@@ -357,20 +391,21 @@ async def list_prompts(
357391 """Send a prompts/list request.
358392
359393 Args:
360- cursor: (Deprecated) Pagination cursor. Use params parameter instead.
361- params: Pagination parameters. Defaults to None (omits params field).
394+ cursor: Simple cursor string for pagination (deprecated, use params instead)
395+ params: Full pagination parameters including cursor and any future fields
362396 """
363- if cursor is not None :
364- warnings .warn (
365- "cursor parameter is deprecated, use params=PaginatedRequestParams(cursor=...) instead" ,
366- DeprecationWarning ,
367- stacklevel = 2 ,
368- )
369- if params is None :
370- params = types .PaginatedRequestParams (cursor = cursor )
397+ if params is not None and cursor is not None :
398+ raise ValueError ("Cannot specify both cursor and params" )
399+
400+ if params is not None :
401+ request_params = params
402+ elif cursor is not None :
403+ request_params = types .PaginatedRequestParams (cursor = cursor )
404+ else :
405+ request_params = None
371406
372407 return await self .send_request (
373- types .ClientRequest (types .ListPromptsRequest (params = params )),
408+ types .ClientRequest (types .ListPromptsRequest (params = request_params )),
374409 types .ListPromptsResult ,
375410 )
376411
@@ -409,6 +444,16 @@ async def complete(
409444 types .CompleteResult ,
410445 )
411446
447+ @deprecated ("Use params=PaginatedRequestParams(...) instead" )
448+ @overload
449+ async def list_tools (self , cursor : str | None ) -> types .ListToolsResult : ...
450+
451+ @overload
452+ async def list_tools (self , * , params : types .PaginatedRequestParams | None ) -> types .ListToolsResult : ...
453+
454+ @overload
455+ async def list_tools (self ) -> types .ListToolsResult : ...
456+
412457 async def list_tools (
413458 self ,
414459 cursor : str | None = None ,
@@ -418,20 +463,21 @@ async def list_tools(
418463 """Send a tools/list request.
419464
420465 Args:
421- cursor: (Deprecated) Pagination cursor. Use params parameter instead.
422- params: Pagination parameters. Defaults to None (omits params field).
466+ cursor: Simple cursor string for pagination (deprecated, use params instead)
467+ params: Full pagination parameters including cursor and any future fields
423468 """
424- if cursor is not None :
425- warnings .warn (
426- "cursor parameter is deprecated, use params=PaginatedRequestParams(cursor=...) instead" ,
427- DeprecationWarning ,
428- stacklevel = 2 ,
429- )
430- if params is None :
431- params = types .PaginatedRequestParams (cursor = cursor )
469+ if params is not None and cursor is not None :
470+ raise ValueError ("Cannot specify both cursor and params" )
471+
472+ if params is not None :
473+ request_params = params
474+ elif cursor is not None :
475+ request_params = types .PaginatedRequestParams (cursor = cursor )
476+ else :
477+ request_params = None
432478
433479 result = await self .send_request (
434- types .ClientRequest (types .ListToolsRequest (params = params )),
480+ types .ClientRequest (types .ListToolsRequest (params = request_params )),
435481 types .ListToolsResult ,
436482 )
437483
0 commit comments