Skip to content

Commit be4ce67

Browse files
committed
optimize hooks
1 parent 8cdb6c6 commit be4ce67

File tree

7 files changed

+600
-524
lines changed

7 files changed

+600
-524
lines changed

examples/everything/main.go

+85-23
Original file line numberDiff line numberDiff line change
@@ -28,31 +28,93 @@ const (
2828
COMPLEX PromptName = "complex_prompt"
2929
)
3030

31+
type exampleHook struct{}
32+
33+
func (*exampleHook) RegisterSession(ctx context.Context, session server.ClientSession) {
34+
}
35+
36+
func (*exampleHook) CreateHookContext() server.HookContext {
37+
return nil
38+
}
39+
40+
func (*exampleHook) GetHookContext() server.HookContext {
41+
return nil
42+
}
43+
44+
func (*exampleHook) BeforeAny(ctx context.Context, hookContext server.HookContext, id any, method mcp.MCPMethod, message any) {
45+
fmt.Printf("beforeAny: %s, %v, %v\n", method, id, message)
46+
}
47+
48+
func (*exampleHook) OnSuccess(ctx context.Context, hookContext server.HookContext, id any, method mcp.MCPMethod, message any, result any) {
49+
fmt.Printf("onSuccess: %s, %v, %v, %v\n", method, id, message, result)
50+
}
51+
52+
func (*exampleHook) OnError(ctx context.Context, hookContext server.HookContext, id any, method mcp.MCPMethod, message any, err error) {
53+
fmt.Printf("onError: %s, %v, %v, %v\n", method, id, message, err)
54+
}
55+
56+
func (*exampleHook) BeforeInitialize(ctx context.Context, hookContext server.HookContext, id any, message *mcp.InitializeRequest) {
57+
fmt.Printf("beforeInitialize: %v, %v\n", id, message)
58+
}
59+
60+
func (*exampleHook) AfterInitialize(ctx context.Context, hookContext server.HookContext, id any, message *mcp.InitializeRequest, result *mcp.InitializeResult) {
61+
fmt.Printf("afterInitialize: %v, %v, %v\n", id, message, result)
62+
}
63+
64+
func (*exampleHook) BeforePing(ctx context.Context, hookContext server.HookContext, id any, message *mcp.PingRequest) {
65+
}
66+
67+
func (*exampleHook) AfterPing(ctx context.Context, hookContext server.HookContext, id any, message *mcp.PingRequest, result *mcp.EmptyResult) {
68+
}
69+
70+
func (*exampleHook) BeforeListResources(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ListResourcesRequest) {
71+
}
72+
73+
func (*exampleHook) AfterListResources(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ListResourcesRequest, result *mcp.ListResourcesResult) {
74+
}
75+
76+
func (*exampleHook) BeforeListResourceTemplates(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ListResourceTemplatesRequest) {
77+
}
78+
79+
func (*exampleHook) AfterListResourceTemplates(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ListResourceTemplatesRequest, result *mcp.ListResourceTemplatesResult) {
80+
}
81+
82+
func (*exampleHook) BeforeReadResource(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ReadResourceRequest) {
83+
}
84+
85+
func (*exampleHook) AfterReadResource(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ReadResourceRequest, result *mcp.ReadResourceResult) {
86+
}
87+
88+
func (*exampleHook) BeforeListPrompts(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ListPromptsRequest) {
89+
}
90+
91+
func (*exampleHook) AfterListPrompts(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ListPromptsRequest, result *mcp.ListPromptsResult) {
92+
}
93+
94+
func (*exampleHook) BeforeGetPrompt(ctx context.Context, hookContext server.HookContext, id any, message *mcp.GetPromptRequest) {
95+
}
96+
97+
func (*exampleHook) AfterGetPrompt(ctx context.Context, hookContext server.HookContext, id any, message *mcp.GetPromptRequest, result *mcp.GetPromptResult) {
98+
}
99+
100+
func (*exampleHook) BeforeListTools(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ListToolsRequest) {
101+
fmt.Printf("beforeCallTool: %v, %v\n", id, message)
102+
}
103+
104+
func (*exampleHook) AfterListTools(ctx context.Context, hookContext server.HookContext, id any, message *mcp.ListToolsRequest, result *mcp.ListToolsResult) {
105+
fmt.Printf("afterCallTool: %v, %v, %v\n", id, message, result)
106+
}
107+
108+
func (*exampleHook) BeforeCallTool(ctx context.Context, hookContext server.HookContext, id any, message *mcp.CallToolRequest) {
109+
}
110+
111+
func (*exampleHook) AfterCallTool(ctx context.Context, hookContext server.HookContext, id any, message *mcp.CallToolRequest, result *mcp.CallToolResult) {
112+
}
113+
31114
func NewMCPServer() *server.MCPServer {
32115

33-
hooks := &server.Hooks{}
34-
35-
hooks.AddBeforeAny(func(ctx context.Context, id any, method mcp.MCPMethod, message any) {
36-
fmt.Printf("beforeAny: %s, %v, %v\n", method, id, message)
37-
})
38-
hooks.AddOnSuccess(func(ctx context.Context, id any, method mcp.MCPMethod, message any, result any) {
39-
fmt.Printf("onSuccess: %s, %v, %v, %v\n", method, id, message, result)
40-
})
41-
hooks.AddOnError(func(ctx context.Context, id any, method mcp.MCPMethod, message any, err error) {
42-
fmt.Printf("onError: %s, %v, %v, %v\n", method, id, message, err)
43-
})
44-
hooks.AddBeforeInitialize(func(ctx context.Context, id any, message *mcp.InitializeRequest) {
45-
fmt.Printf("beforeInitialize: %v, %v\n", id, message)
46-
})
47-
hooks.AddAfterInitialize(func(ctx context.Context, id any, message *mcp.InitializeRequest, result *mcp.InitializeResult) {
48-
fmt.Printf("afterInitialize: %v, %v, %v\n", id, message, result)
49-
})
50-
hooks.AddAfterCallTool(func(ctx context.Context, id any, message *mcp.CallToolRequest, result *mcp.CallToolResult) {
51-
fmt.Printf("afterCallTool: %v, %v, %v\n", id, message, result)
52-
})
53-
hooks.AddBeforeCallTool(func(ctx context.Context, id any, message *mcp.CallToolRequest) {
54-
fmt.Printf("beforeCallTool: %v, %v\n", id, message)
55-
})
116+
hooks := &server.ChainedHook{}
117+
hooks.Add(&exampleHook{})
56118

57119
mcpServer := server.NewMCPServer(
58120
"example-servers/everything",

0 commit comments

Comments
 (0)