@@ -44,6 +44,12 @@ type Gateway struct {
44
44
45
45
sessionCacheMu sync.RWMutex
46
46
sessionCache map [* mcp.ServerSession ]* ServerSessionCache
47
+
48
+ // Track registered capabilities for cleanup during reload
49
+ registeredToolNames []string
50
+ registeredPromptNames []string
51
+ registeredResourceURIs []string
52
+ registeredResourceTemplateURIs []string
47
53
}
48
54
49
55
func NewGateway (config Config , docker docker.Client ) * Gateway {
@@ -135,7 +141,6 @@ func (g *Gateway) Run(ctx context.Context) error {
135
141
log ("- Client initialized: " , ss .ID ())
136
142
g .ListRoots (ctx , ss )
137
143
},
138
- PageSize : 100 ,
139
144
HasPrompts : true ,
140
145
HasResources : true ,
141
146
HasTools : true ,
@@ -255,16 +260,40 @@ func (g *Gateway) reloadConfiguration(ctx context.Context, configuration Configu
255
260
// Clear existing capabilities and register new ones
256
261
// Note: The new SDK doesn't have bulk set methods, so we register individually
257
262
263
+ // Clear all existing capabilities by tracking them in the Gateway struct
264
+ if g .registeredToolNames != nil {
265
+ g .mcpServer .RemoveTools (g .registeredToolNames ... )
266
+ }
267
+ if g .registeredPromptNames != nil {
268
+ g .mcpServer .RemovePrompts (g .registeredPromptNames ... )
269
+ }
270
+ if g .registeredResourceURIs != nil {
271
+ g .mcpServer .RemoveResources (g .registeredResourceURIs ... )
272
+ }
273
+ if g .registeredResourceTemplateURIs != nil {
274
+ g .mcpServer .RemoveResourceTemplates (g .registeredResourceTemplateURIs ... )
275
+ }
276
+
277
+ // Reset tracking slices
278
+ g .registeredToolNames = nil
279
+ g .registeredPromptNames = nil
280
+ g .registeredResourceURIs = nil
281
+ g .registeredResourceTemplateURIs = nil
282
+
283
+ // Add new capabilities and track them
258
284
for _ , tool := range capabilities .Tools {
259
285
g .mcpServer .AddTool (tool .Tool , tool .Handler )
286
+ g .registeredToolNames = append (g .registeredToolNames , tool .Tool .Name )
260
287
}
261
288
262
289
for _ , prompt := range capabilities .Prompts {
263
290
g .mcpServer .AddPrompt (prompt .Prompt , prompt .Handler )
291
+ g .registeredPromptNames = append (g .registeredPromptNames , prompt .Prompt .Name )
264
292
}
265
293
266
294
for _ , resource := range capabilities .Resources {
267
295
g .mcpServer .AddResource (resource .Resource , resource .Handler )
296
+ g .registeredResourceURIs = append (g .registeredResourceURIs , resource .Resource .URI )
268
297
}
269
298
270
299
// Resource templates are handled as regular resources in the new SDK
@@ -277,6 +306,7 @@ func (g *Gateway) reloadConfiguration(ctx context.Context, configuration Configu
277
306
MIMEType : template .ResourceTemplate .MIMEType ,
278
307
}
279
308
g .mcpServer .AddResourceTemplate (resource , template .Handler )
309
+ g .registeredResourceTemplateURIs = append (g .registeredResourceTemplateURIs , resource .URITemplate )
280
310
}
281
311
282
312
g .health .SetHealthy ()
0 commit comments