@@ -402,42 +402,77 @@ func (c *SSEMCPClient) Ping(ctx context.Context) error {
402402 return err
403403}
404404
405- func (c * SSEMCPClient ) ListResources (
405+ // ListResourcesByPage manually list resources by page.
406+ func (c * SSEMCPClient ) ListResourcesByPage (
406407 ctx context.Context ,
407408 request mcp.ListResourcesRequest ,
408409) (* mcp.ListResourcesResult , error ) {
409- response , err := c . sendRequest (ctx , "resources/list" , request . Params )
410+ result , err := listByPage [mcp. ListResourcesResult ] (ctx , c , request . PaginatedRequest , "resources/list" )
410411 if err != nil {
411412 return nil , err
412413 }
414+ return result , nil
415+ }
413416
414- var result mcp.ListResourcesResult
415- if err := json .Unmarshal (* response , & result ); err != nil {
416- return nil , fmt .Errorf ("failed to unmarshal response: %w" , err )
417+ func (c * SSEMCPClient ) ListResources (
418+ ctx context.Context ,
419+ request mcp.ListResourcesRequest ,
420+ ) (* mcp.ListResourcesResult , error ) {
421+ result , err := c .ListResourcesByPage (ctx , request )
422+ if err != nil {
423+ return nil , err
417424 }
425+ for result .NextCursor != "" {
426+ select {
427+ case <- ctx .Done ():
428+ return nil , ctx .Err ()
429+ default :
430+ request .Params .Cursor = result .NextCursor
431+ newPageRes , err := c .ListResourcesByPage (ctx , request )
432+ if err != nil {
433+ return nil , err
434+ }
435+ result .Resources = append (result .Resources , newPageRes .Resources ... )
436+ result .NextCursor = newPageRes .NextCursor
437+ }
438+ }
439+ return result , nil
440+ }
418441
419- return & result , nil
442+ func (c * SSEMCPClient ) ListResourceTemplatesByPage (
443+ ctx context.Context ,
444+ request mcp.ListResourceTemplatesRequest ,
445+ ) (* mcp.ListResourceTemplatesResult , error ) {
446+ result , err := listByPage [mcp.ListResourceTemplatesResult ](ctx , c , request .PaginatedRequest , "resources/templates/list" )
447+ if err != nil {
448+ return nil , err
449+ }
450+ return result , nil
420451}
421452
422453func (c * SSEMCPClient ) ListResourceTemplates (
423454 ctx context.Context ,
424455 request mcp.ListResourceTemplatesRequest ,
425456) (* mcp.ListResourceTemplatesResult , error ) {
426- response , err := c .sendRequest (
427- ctx ,
428- "resources/templates/list" ,
429- request .Params ,
430- )
457+ result , err := c .ListResourceTemplatesByPage (ctx , request )
431458 if err != nil {
432459 return nil , err
433460 }
434-
435- var result mcp.ListResourceTemplatesResult
436- if err := json .Unmarshal (* response , & result ); err != nil {
437- return nil , fmt .Errorf ("failed to unmarshal response: %w" , err )
461+ for result .NextCursor != "" {
462+ select {
463+ case <- ctx .Done ():
464+ return nil , ctx .Err ()
465+ default :
466+ request .Params .Cursor = result .NextCursor
467+ newPageRes , err := c .ListResourceTemplatesByPage (ctx , request )
468+ if err != nil {
469+ return nil , err
470+ }
471+ result .ResourceTemplates = append (result .ResourceTemplates , newPageRes .ResourceTemplates ... )
472+ result .NextCursor = newPageRes .NextCursor
473+ }
438474 }
439-
440- return & result , nil
475+ return result , nil
441476}
442477
443478func (c * SSEMCPClient ) ReadResource (
@@ -468,21 +503,40 @@ func (c *SSEMCPClient) Unsubscribe(
468503 return err
469504}
470505
471- func (c * SSEMCPClient ) ListPrompts (
506+ func (c * SSEMCPClient ) ListPromptsByPage (
472507 ctx context.Context ,
473508 request mcp.ListPromptsRequest ,
474509) (* mcp.ListPromptsResult , error ) {
475- response , err := c . sendRequest (ctx , "prompts/list" , request . Params )
510+ result , err := listByPage [mcp. ListPromptsResult ] (ctx , c , request . PaginatedRequest , "prompts/list" )
476511 if err != nil {
477512 return nil , err
478513 }
514+ return result , nil
515+ }
479516
480- var result mcp.ListPromptsResult
481- if err := json .Unmarshal (* response , & result ); err != nil {
482- return nil , fmt .Errorf ("failed to unmarshal response: %w" , err )
517+ func (c * SSEMCPClient ) ListPrompts (
518+ ctx context.Context ,
519+ request mcp.ListPromptsRequest ,
520+ ) (* mcp.ListPromptsResult , error ) {
521+ result , err := c .ListPromptsByPage (ctx , request )
522+ if err != nil {
523+ return nil , err
483524 }
484-
485- return & result , nil
525+ for result .NextCursor != "" {
526+ select {
527+ case <- ctx .Done ():
528+ return nil , ctx .Err ()
529+ default :
530+ request .Params .Cursor = result .NextCursor
531+ newPageRes , err := c .ListPromptsByPage (ctx , request )
532+ if err != nil {
533+ return nil , err
534+ }
535+ result .Prompts = append (result .Prompts , newPageRes .Prompts ... )
536+ result .NextCursor = newPageRes .NextCursor
537+ }
538+ }
539+ return result , nil
486540}
487541
488542func (c * SSEMCPClient ) GetPrompt (
@@ -497,21 +551,40 @@ func (c *SSEMCPClient) GetPrompt(
497551 return mcp .ParseGetPromptResult (response )
498552}
499553
500- func (c * SSEMCPClient ) ListTools (
554+ func (c * SSEMCPClient ) ListToolsByPage (
501555 ctx context.Context ,
502556 request mcp.ListToolsRequest ,
503557) (* mcp.ListToolsResult , error ) {
504- response , err := c . sendRequest (ctx , "tools/list" , request . Params )
558+ result , err := listByPage [mcp. ListToolsResult ] (ctx , c , request . PaginatedRequest , "tools/list" )
505559 if err != nil {
506560 return nil , err
507561 }
562+ return result , nil
563+ }
508564
509- var result mcp.ListToolsResult
510- if err := json .Unmarshal (* response , & result ); err != nil {
511- return nil , fmt .Errorf ("failed to unmarshal response: %w" , err )
565+ func (c * SSEMCPClient ) ListTools (
566+ ctx context.Context ,
567+ request mcp.ListToolsRequest ,
568+ ) (* mcp.ListToolsResult , error ) {
569+ result , err := c .ListToolsByPage (ctx , request )
570+ if err != nil {
571+ return nil , err
512572 }
513-
514- return & result , nil
573+ for result .NextCursor != "" {
574+ select {
575+ case <- ctx .Done ():
576+ return nil , ctx .Err ()
577+ default :
578+ request .Params .Cursor = result .NextCursor
579+ newPageRes , err := c .ListToolsByPage (ctx , request )
580+ if err != nil {
581+ return nil , err
582+ }
583+ result .Tools = append (result .Tools , newPageRes .Tools ... )
584+ result .NextCursor = newPageRes .NextCursor
585+ }
586+ }
587+ return result , nil
515588}
516589
517590func (c * SSEMCPClient ) CallTool (
0 commit comments