@@ -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 ()
@@ -438,11 +445,17 @@ func (s *MCPServer) AddResourceTemplate(
438
445
template mcp.ResourceTemplate ,
439
446
handler ResourceTemplateHandlerFunc ,
440
447
) {
441
- s .capabilitiesMu .Lock ()
448
+ s .capabilitiesMu .RLock ()
442
449
if s .capabilities .resources == nil {
450
+ s .capabilitiesMu .RUnlock ()
451
+
452
+ s .capabilitiesMu .Lock ()
443
453
s .capabilities .resources = & resourceCapabilities {}
454
+ s .capabilitiesMu .Unlock ()
455
+ } else {
456
+ s .capabilitiesMu .RUnlock ()
444
457
}
445
- s . capabilitiesMu . Unlock ()
458
+
446
459
447
460
s .resourcesMu .Lock ()
448
461
defer s .resourcesMu .Unlock ()
@@ -454,11 +467,16 @@ func (s *MCPServer) AddResourceTemplate(
454
467
455
468
// AddPrompt registers a new prompt handler with the given name
456
469
func (s * MCPServer ) AddPrompt (prompt mcp.Prompt , handler PromptHandlerFunc ) {
457
- s .capabilitiesMu .Lock ()
470
+ s .capabilitiesMu .RLock ()
458
471
if s .capabilities .prompts == nil {
472
+ s .capabilitiesMu .RUnlock ()
473
+
474
+ s .capabilitiesMu .Lock ()
459
475
s .capabilities .prompts = & promptCapabilities {}
476
+ s .capabilitiesMu .Unlock ()
477
+ } else {
478
+ s .capabilitiesMu .RUnlock ()
460
479
}
461
- s .capabilitiesMu .Unlock ()
462
480
463
481
s .promptsMu .Lock ()
464
482
defer s .promptsMu .Unlock ()
@@ -473,11 +491,16 @@ func (s *MCPServer) AddTool(tool mcp.Tool, handler ToolHandlerFunc) {
473
491
474
492
// AddTools registers multiple tools at once
475
493
func (s * MCPServer ) AddTools (tools ... ServerTool ) {
476
- s .capabilitiesMu .Lock ()
494
+ s .capabilitiesMu .RLock ()
477
495
if s .capabilities .tools == nil {
496
+ s .capabilitiesMu .RUnlock ()
497
+
498
+ s .capabilitiesMu .Lock ()
478
499
s .capabilities .tools = & toolCapabilities {}
500
+ s .capabilitiesMu .Unlock ()
501
+ } else {
502
+ s .capabilitiesMu .RUnlock ()
479
503
}
480
- s .capabilitiesMu .Unlock ()
481
504
482
505
s .toolsMu .Lock ()
483
506
for _ , entry := range tools {
0 commit comments