Skip to content

Commit a68723b

Browse files
committed
optimize hooks
1 parent db92287 commit a68723b

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

server/server_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"encoding/json"
77
"errors"
88
"fmt"
9+
"sync"
910
"testing"
1011
"time"
1112

@@ -1305,6 +1306,7 @@ var globalHookCtx = &globalHookContext{
13051306
}
13061307

13071308
type globalHookContext struct {
1309+
mu sync.Mutex
13081310
BeforeAnyMessages []any
13091311
BeforeAnyCount *int
13101312
OnSuccessCount *int
@@ -1368,14 +1370,23 @@ func (*globalHook) OnError(ctx context.Context, hookContext HookContext, id any,
13681370
}
13691371

13701372
func (e *globalHook) BeforeInitialize(ctx context.Context, hookContext HookContext, id any, message *mcp.InitializeRequest) {
1373+
hookContext.(*globalHookContext).mu.Lock()
1374+
defer hookContext.(*globalHookContext).mu.Unlock()
1375+
13711376
e.BeforeAny(ctx, hookContext, id, mcp.MethodInitialize, message)
13721377
}
13731378

13741379
func (e *globalHook) AfterInitialize(ctx context.Context, hookContext HookContext, id any, message *mcp.InitializeRequest, result *mcp.InitializeResult) {
1380+
hookContext.(*globalHookContext).mu.Lock()
1381+
defer hookContext.(*globalHookContext).mu.Unlock()
1382+
13751383
e.OnSuccess(ctx, hookContext, id, mcp.MethodInitialize, message, result)
13761384
}
13771385

13781386
func (e *globalHook) BeforePing(ctx context.Context, hookContext HookContext, id any, message *mcp.PingRequest) {
1387+
hookContext.(*globalHookContext).mu.Lock()
1388+
defer hookContext.(*globalHookContext).mu.Unlock()
1389+
13791390
e.BeforeAny(ctx, hookContext, id, mcp.MethodPing, message)
13801391

13811392
newCount := (*hookContext.(*globalHookContext).BeforePingCount) + 1
@@ -1385,6 +1396,9 @@ func (e *globalHook) BeforePing(ctx context.Context, hookContext HookContext, id
13851396
}
13861397

13871398
func (e *globalHook) AfterPing(ctx context.Context, hookContext HookContext, id any, message *mcp.PingRequest, result *mcp.EmptyResult) {
1399+
hookContext.(*globalHookContext).mu.Lock()
1400+
defer hookContext.(*globalHookContext).mu.Unlock()
1401+
13881402
e.OnSuccess(ctx, hookContext, id, mcp.MethodPing, message, result)
13891403

13901404
newCount := (*hookContext.(*globalHookContext).AfterPingCount) + 1
@@ -1427,24 +1441,36 @@ func (*globalHook) AfterGetPrompt(ctx context.Context, hookContext HookContext,
14271441
}
14281442

14291443
func (e *globalHook) BeforeListTools(ctx context.Context, hookContext HookContext, id any, message *mcp.ListToolsRequest) {
1444+
hookContext.(*globalHookContext).mu.Lock()
1445+
defer hookContext.(*globalHookContext).mu.Unlock()
1446+
14301447
e.BeforeAny(ctx, hookContext, id, mcp.MethodToolsList, message)
14311448

14321449
newCount := (*hookContext.(*globalHookContext).BeforeToolsCount) + 1
14331450
hookContext.(*globalHookContext).BeforeToolsCount = &(newCount)
14341451
}
14351452

14361453
func (e *globalHook) AfterListTools(ctx context.Context, hookContext HookContext, id any, message *mcp.ListToolsRequest, result *mcp.ListToolsResult) {
1454+
hookContext.(*globalHookContext).mu.Lock()
1455+
defer hookContext.(*globalHookContext).mu.Unlock()
1456+
14371457
e.OnSuccess(ctx, hookContext, id, mcp.MethodToolsList, message, result)
14381458

14391459
newCount := (*hookContext.(*globalHookContext).AfterToolsCount) + 1
14401460
hookContext.(*globalHookContext).AfterToolsCount = &(newCount)
14411461
}
14421462

14431463
func (e *globalHook) BeforeCallTool(ctx context.Context, hookContext HookContext, id any, message *mcp.CallToolRequest) {
1464+
hookContext.(*globalHookContext).mu.Lock()
1465+
defer hookContext.(*globalHookContext).mu.Unlock()
1466+
14441467
e.BeforeAny(ctx, hookContext, id, mcp.MethodToolsCall, message)
14451468
}
14461469

14471470
func (e *globalHook) AfterCallTool(ctx context.Context, hookContext HookContext, id any, message *mcp.CallToolRequest, result *mcp.CallToolResult) {
1471+
hookContext.(*globalHookContext).mu.Lock()
1472+
defer hookContext.(*globalHookContext).mu.Unlock()
1473+
14481474
e.OnSuccess(ctx, hookContext, id, mcp.MethodToolsCall, message, result)
14491475
}
14501476

0 commit comments

Comments
 (0)