@@ -49,35 +49,28 @@ func createAgentFilteredServer(unifiedServer *UnifiedServer, backendID, agentID
4949 logRouted .Printf ("Creating filtered server for %s with %d tools" , backendID , len (tools ))
5050 logRouted .Printf ("Backend %s has %d tools available" , backendID , len (tools ))
5151
52- // Register each tool (without prefix) using the unified server's handlers
53- for _ , toolInfo := range tools {
54- // Capture for closure
55- toolNameCopy := toolInfo .Name
52+ // Register each tool (without prefix) using the unified server's handlers.
53+ registerFilteredTools (
54+ server ,
55+ tools ,
56+ agentID ,
57+ func (toolInfo ToolInfo ) (string , string ) {
58+ return backendID , toolInfo .Name
59+ },
60+ unifiedServer .agentCanUseTool ,
61+ func (toolInfo ToolInfo ) func (context.Context , * sdk.CallToolRequest , interface {}) (* sdk.CallToolResult , interface {}, error ) {
62+ handler := unifiedServer .GetToolHandler (backendID , toolInfo .Name )
63+ if handler == nil {
64+ logRouted .Printf ("WARNING: No handler found for %s___%s" , backendID , toolInfo .Name )
65+ return nil
66+ }
5667
57- // Per-agent tool visibility: skip tools this agent's policy does not permit.
58- if ! unifiedServer .agentCanUseTool (agentID , backendID , toolNameCopy ) {
59- continue
60- }
61-
62- // Get the unified server's handler for this tool
63- handler := unifiedServer .GetToolHandler (backendID , toolInfo .Name )
64- if handler == nil {
65- logRouted .Printf ("WARNING: No handler found for %s___%s" , backendID , toolInfo .Name )
66- continue
67- }
68-
69- // Use registerToolWithoutValidation to bypass JSON Schema validation, allowing
70- // InputSchema from backends using different JSON Schema versions (e.g., draft-07).
71- registerToolWithoutValidation (server , & sdk.Tool {
72- Name : toolInfo .Name , // Without prefix for the client
73- Description : toolInfo .Description ,
74- InputSchema : toolInfo .InputSchema , // Include schema for clients
75- Annotations : toolInfo .Annotations , // Preserve readOnly/destructive hints
76- }, func (ctx context.Context , req * sdk.CallToolRequest , _ interface {}) (* sdk.CallToolResult , interface {}, error ) {
77- logRouted .Printf ("[ROUTED] Calling unified handler for: %s" , toolNameCopy )
78- return handler (ctx , req , nil )
79- })
80- }
68+ return func (ctx context.Context , req * sdk.CallToolRequest , _ interface {}) (* sdk.CallToolResult , interface {}, error ) {
69+ logRouted .Printf ("[ROUTED] Calling unified handler for: %s" , toolInfo .Name )
70+ return handler (ctx , req , nil )
71+ }
72+ },
73+ )
8174
8275 return server
8376}
0 commit comments