fix: Pass cursor parameter to server (#745)

This commit is contained in:
Nate Barbettini
2025-05-21 14:27:06 -07:00
committed by GitHub
parent 2ca2de767b
commit e80c0150e1
5 changed files with 306 additions and 73 deletions

View File

@@ -209,7 +209,9 @@ class ClientSession(
types.ClientRequest(
types.ListResourcesRequest(
method="resources/list",
cursor=cursor,
params=types.PaginatedRequestParams(cursor=cursor)
if cursor is not None
else None,
)
),
types.ListResourcesResult,
@@ -223,7 +225,9 @@ class ClientSession(
types.ClientRequest(
types.ListResourceTemplatesRequest(
method="resources/templates/list",
cursor=cursor,
params=types.PaginatedRequestParams(cursor=cursor)
if cursor is not None
else None,
)
),
types.ListResourceTemplatesResult,
@@ -295,7 +299,9 @@ class ClientSession(
types.ClientRequest(
types.ListPromptsRequest(
method="prompts/list",
cursor=cursor,
params=types.PaginatedRequestParams(cursor=cursor)
if cursor is not None
else None,
)
),
types.ListPromptsResult,
@@ -340,7 +346,9 @@ class ClientSession(
types.ClientRequest(
types.ListToolsRequest(
method="tools/list",
cursor=cursor,
params=types.PaginatedRequestParams(cursor=cursor)
if cursor is not None
else None,
)
),
types.ListToolsResult,

View File

@@ -53,6 +53,14 @@ class RequestParams(BaseModel):
meta: Meta | None = Field(alias="_meta", default=None)
class PaginatedRequestParams(RequestParams):
cursor: Cursor | None = None
"""
An opaque token representing the current pagination position.
If provided, the server should return results starting after this cursor.
"""
class NotificationParams(BaseModel):
class Meta(BaseModel):
model_config = ConfigDict(extra="allow")
@@ -79,12 +87,13 @@ class Request(BaseModel, Generic[RequestParamsT, MethodT]):
model_config = ConfigDict(extra="allow")
class PaginatedRequest(Request[RequestParamsT, MethodT]):
cursor: Cursor | None = None
"""
An opaque token representing the current pagination position.
If provided, the server should return results starting after this cursor.
"""
class PaginatedRequest(
Request[PaginatedRequestParams | None, MethodT], Generic[MethodT]
):
"""Base class for paginated requests,
matching the schema's PaginatedRequest interface."""
params: PaginatedRequestParams | None = None
class Notification(BaseModel, Generic[NotificationParamsT, MethodT]):
@@ -358,13 +367,10 @@ class ProgressNotification(
params: ProgressNotificationParams
class ListResourcesRequest(
PaginatedRequest[RequestParams | None, Literal["resources/list"]]
):
class ListResourcesRequest(PaginatedRequest[Literal["resources/list"]]):
"""Sent from the client to request a list of resources the server has."""
method: Literal["resources/list"]
params: RequestParams | None = None
class Annotations(BaseModel):
@@ -423,12 +429,11 @@ class ListResourcesResult(PaginatedResult):
class ListResourceTemplatesRequest(
PaginatedRequest[RequestParams | None, Literal["resources/templates/list"]]
PaginatedRequest[Literal["resources/templates/list"]]
):
"""Sent from the client to request a list of resource templates the server has."""
method: Literal["resources/templates/list"]
params: RequestParams | None = None
class ListResourceTemplatesResult(PaginatedResult):
@@ -570,13 +575,10 @@ class ResourceUpdatedNotification(
params: ResourceUpdatedNotificationParams
class ListPromptsRequest(
PaginatedRequest[RequestParams | None, Literal["prompts/list"]]
):
class ListPromptsRequest(PaginatedRequest[Literal["prompts/list"]]):
"""Sent from the client to request a list of prompts and prompt templates."""
method: Literal["prompts/list"]
params: RequestParams | None = None
class PromptArgument(BaseModel):
@@ -703,11 +705,10 @@ class PromptListChangedNotification(
params: NotificationParams | None = None
class ListToolsRequest(PaginatedRequest[RequestParams | None, Literal["tools/list"]]):
class ListToolsRequest(PaginatedRequest[Literal["tools/list"]]):
"""Sent from the client to request a list of tools the server has."""
method: Literal["tools/list"]
params: RequestParams | None = None
class ToolAnnotations(BaseModel):
@@ -741,7 +742,7 @@ class ToolAnnotations(BaseModel):
idempotentHint: bool | None = None
"""
If true, calling the tool repeatedly with the same arguments
If true, calling the tool repeatedly with the same arguments
will have no additional effect on the its environment.
(This property is meaningful only when `readOnlyHint == false`)
Default: false