-
Notifications
You must be signed in to change notification settings - Fork 287
feat: Add Pagination for requesting list of prompts #140
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat: Add Pagination for requesting list of prompts #140
Conversation
880b366
to
4c05e1a
Compare
Adds the Pagination feature to the `prompts/list` feature as described in the specification. To make this possible mainly two changes are made: 1. The logic for cursor handling is added. 2. Handling for invalid parameters (MCP error code `-32602 (Invalid params)`) is added to the `McpServerSession`. For now the cursor is the base64 encoded start index of the next page. The page size is set to 10. When parameters are found to be invalid the newly introduced `McpParamsValidationError` is returned to handle it properly in the `McpServerSession`.
4c05e1a
to
8d48b93
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for the contribution! It is a great start, would you like to take this further and unify the logic for other listing requests?
|
||
var errorCode = McpSchema.ErrorCodes.INTERNAL_ERROR; | ||
|
||
if (error instanceof McpParamsValidationError) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suspect we have some convoluted handling of McpError here and on the client side too, but we can address this later on and clean up.
|
||
public class McpParamsValidationError extends McpError { | ||
|
||
public McpParamsValidationError(McpSchema.JSONRPCResponse.JSONRPCError jsonRpcError) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It feels that we don't need this constructor at this time. Let's remove it.
super(jsonRpcError.message()); | ||
} | ||
|
||
public McpParamsValidationError(Object error) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can be a string at the moment I believe.
new TypeReference<McpSchema.PaginatedRequest>() { | ||
}); | ||
|
||
if (!isCursorValid(request.cursor(), this.prompts.size())) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can nest this under the request.cursor() != null
and avoid returning true
inside the validation method.
int requestedStartIndex = 0; | ||
|
||
if (request.cursor() != null) { | ||
requestedStartIndex = decodeCursor(request.cursor()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we could take into account the hash of the prompts collection and based on the page size infer whether the collection has not changed - if it has we should return an error allowing the client to restart fetching the results.
Hi, thanks for your review and your feedback!
Yes I will do this. I should be able to update the pull request by the end of the week. |
Adds the Pagination feature to the
prompts/list
feature to fulfil the specification.Motivation and Context
This adds the Pagination feature to the
prompts/list
feature as described in the specification.To make this possible mainly two changes are made:
-32602 (Invalid params)
) is added to theMcpServerSession
.Decisions made:
base64
string.10
.McpParamsValidationError
is returned to handle it properly in theMcpServerSession
.If this change is ok, I'm happy to create a follow-up PR for the other MCP features. Maybe some parts of the cursor handling can be moved out to separate methods.
How Has This Been Tested?
Integration tests are added for the
prompts/list
feature.Types of changes
Checklist