@@ -407,11 +407,18 @@ func (s *MCPServer) AddResource(
407
407
resource mcp.Resource ,
408
408
handler ResourceHandlerFunc ,
409
409
) {
410
- s .capabilitiesMu .Lock ()
410
+ s .capabilitiesMu .RLock ()
411
411
if s .capabilities .resources == nil {
412
- s .capabilities .resources = & resourceCapabilities {}
412
+ s .capabilitiesMu .RUnlock ()
413
+
414
+ s .capabilitiesMu .Lock ()
415
+ if s .capabilities .resources == nil {
416
+ s .capabilities .resources = & resourceCapabilities {}
417
+ }
418
+ s .capabilitiesMu .Unlock ()
419
+ } else {
420
+ s .capabilitiesMu .RUnlock ()
413
421
}
414
- s .capabilitiesMu .Unlock ()
415
422
416
423
s .resourcesMu .Lock ()
417
424
defer s .resourcesMu .Unlock ()
@@ -444,11 +451,19 @@ func (s *MCPServer) AddResourceTemplate(
444
451
template mcp.ResourceTemplate ,
445
452
handler ResourceTemplateHandlerFunc ,
446
453
) {
447
- s .capabilitiesMu .Lock ()
454
+ s .capabilitiesMu .RLock ()
448
455
if s .capabilities .resources == nil {
449
- s .capabilities .resources = & resourceCapabilities {}
456
+ s .capabilitiesMu .RUnlock ()
457
+
458
+ s .capabilitiesMu .Lock ()
459
+ if s .capabilities .resources == nil {
460
+ s .capabilities .resources = & resourceCapabilities {}
461
+ }
462
+ s .capabilitiesMu .Unlock ()
463
+ } else {
464
+ s .capabilitiesMu .RUnlock ()
450
465
}
451
- s . capabilitiesMu . Unlock ()
466
+
452
467
453
468
s .resourcesMu .Lock ()
454
469
defer s .resourcesMu .Unlock ()
@@ -466,11 +481,18 @@ func (s *MCPServer) AddResourceTemplate(
466
481
467
482
// AddPrompt registers a new prompt handler with the given name
468
483
func (s * MCPServer ) AddPrompt (prompt mcp.Prompt , handler PromptHandlerFunc ) {
469
- s .capabilitiesMu .Lock ()
484
+ s .capabilitiesMu .RLock ()
470
485
if s .capabilities .prompts == nil {
471
- s .capabilities .prompts = & promptCapabilities {}
486
+ s .capabilitiesMu .RUnlock ()
487
+
488
+ s .capabilitiesMu .Lock ()
489
+ if s .capabilities .prompts == nil {
490
+ s .capabilities .prompts = & promptCapabilities {}
491
+ }
492
+ s .capabilitiesMu .Unlock ()
493
+ } else {
494
+ s .capabilitiesMu .RUnlock ()
472
495
}
473
- s .capabilitiesMu .Unlock ()
474
496
475
497
s .promptsMu .Lock ()
476
498
defer s .promptsMu .Unlock ()
@@ -491,11 +513,18 @@ func (s *MCPServer) AddTool(tool mcp.Tool, handler ToolHandlerFunc) {
491
513
492
514
// AddTools registers multiple tools at once
493
515
func (s * MCPServer ) AddTools (tools ... ServerTool ) {
494
- s .capabilitiesMu .Lock ()
516
+ s .capabilitiesMu .RLock ()
495
517
if s .capabilities .tools == nil {
496
- s .capabilities .tools = & toolCapabilities {}
518
+ s .capabilitiesMu .RUnlock ()
519
+
520
+ s .capabilitiesMu .Lock ()
521
+ if s .capabilities .tools == nil {
522
+ s .capabilities .tools = & toolCapabilities {}
523
+ }
524
+ s .capabilitiesMu .Unlock ()
525
+ } else {
526
+ s .capabilitiesMu .RUnlock ()
497
527
}
498
- s .capabilitiesMu .Unlock ()
499
528
500
529
s .toolsMu .Lock ()
501
530
for _ , entry := range tools {
0 commit comments