@@ -402,42 +402,77 @@ func (c *SSEMCPClient) Ping(ctx context.Context) error {
402
402
return err
403
403
}
404
404
405
- func (c * SSEMCPClient ) ListResources (
405
+ // ListResourcesByPage manually list resources by page.
406
+ func (c * SSEMCPClient ) ListResourcesByPage (
406
407
ctx context.Context ,
407
408
request mcp.ListResourcesRequest ,
408
409
) (* 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" )
410
411
if err != nil {
411
412
return nil , err
412
413
}
414
+ return result , nil
415
+ }
413
416
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
417
424
}
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
+ }
418
441
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
420
451
}
421
452
422
453
func (c * SSEMCPClient ) ListResourceTemplates (
423
454
ctx context.Context ,
424
455
request mcp.ListResourceTemplatesRequest ,
425
456
) (* 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 )
431
458
if err != nil {
432
459
return nil , err
433
460
}
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
+ }
438
474
}
439
-
440
- return & result , nil
475
+ return result , nil
441
476
}
442
477
443
478
func (c * SSEMCPClient ) ReadResource (
@@ -468,21 +503,40 @@ func (c *SSEMCPClient) Unsubscribe(
468
503
return err
469
504
}
470
505
471
- func (c * SSEMCPClient ) ListPrompts (
506
+ func (c * SSEMCPClient ) ListPromptsByPage (
472
507
ctx context.Context ,
473
508
request mcp.ListPromptsRequest ,
474
509
) (* 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" )
476
511
if err != nil {
477
512
return nil , err
478
513
}
514
+ return result , nil
515
+ }
479
516
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
483
524
}
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
486
540
}
487
541
488
542
func (c * SSEMCPClient ) GetPrompt (
@@ -497,21 +551,40 @@ func (c *SSEMCPClient) GetPrompt(
497
551
return mcp .ParseGetPromptResult (response )
498
552
}
499
553
500
- func (c * SSEMCPClient ) ListTools (
554
+ func (c * SSEMCPClient ) ListToolsByPage (
501
555
ctx context.Context ,
502
556
request mcp.ListToolsRequest ,
503
557
) (* 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" )
505
559
if err != nil {
506
560
return nil , err
507
561
}
562
+ return result , nil
563
+ }
508
564
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
512
572
}
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
515
588
}
516
589
517
590
func (c * SSEMCPClient ) CallTool (
0 commit comments