Commit d67e930

mo khan <mo@mokhan.ca>
2025-08-15 23:23:22
refactor: remove toolHandlers
1 parent 3a9fdfc
Changed files (2)
pkg/mcp/server.go
@@ -18,7 +18,6 @@ type Server struct {
 	capabilities ServerCapabilities
 
 	// Handler functions
-	toolHandlers        map[string]ToolHandler
 	toolDefinitions     map[string]Tool
 	promptHandlers      map[string]PromptHandler
 	promptDefinitions   map[string]Prompt
@@ -37,7 +36,6 @@ type Server struct {
 }
 
 // Handler types
-type ToolHandler func(CallToolRequest) (CallToolResult, error)
 type PromptHandler func(GetPromptRequest) (GetPromptResult, error)
 type ResourceHandler func(ReadResourceRequest) (ReadResourceResult, error)
 
@@ -46,7 +44,6 @@ func NewServer(name, version string, tools []Tool, resources []Resource) *Server
 	server := &Server{
 		name:                  name,
 		version:               version,
-		toolHandlers:          make(map[string]ToolHandler),
 		toolDefinitions:       make(map[string]Tool),
 		promptHandlers:        make(map[string]PromptHandler),
 		promptDefinitions:     make(map[string]Prompt),
@@ -64,7 +61,6 @@ func NewServer(name, version string, tools []Tool, resources []Resource) *Server
 	}
 
 	for _, tool := range tools {
-		server.toolHandlers[tool.Name] = tool.Handler
 		server.toolDefinitions[tool.Name] = tool
 	}
 
@@ -76,12 +72,10 @@ func NewServer(name, version string, tools []Tool, resources []Resource) *Server
 	return server
 }
 
-
 // RegisterToolWithDefinition registers a tool with its full definition and handler
 func (s *Server) RegisterToolWithDefinition(tool Tool, handler ToolHandler) {
 	s.mu.Lock()
 	defer s.mu.Unlock()
-	s.toolHandlers[tool.Name] = handler
 	s.toolDefinitions[tool.Name] = tool
 }
 
@@ -310,14 +304,14 @@ func (s *Server) handleCallTool(req JSONRPCRequest) JSONRPCResponse {
 	}
 
 	s.mu.RLock()
-	handler, exists := s.toolHandlers[callReq.Name]
+	tool, exists := s.toolDefinitions[callReq.Name]
 	s.mu.RUnlock()
 
 	if !exists {
 		return s.createErrorResponse(req.ID, MethodNotFound, "Tool not found")
 	}
 
-	result, err := handler(callReq)
+	result, err := tool.Handler(callReq)
 	if err != nil {
 		return s.createErrorResponse(req.ID, InternalError, err.Error())
 	}
@@ -376,9 +370,9 @@ func (s *Server) handleReadResource(req JSONRPCRequest) JSONRPCResponse {
 	if !exists {
 		// Try to find a pattern-based handler (e.g., for "file://" prefix)
 		for pattern, h := range s.resourceHandlers {
-			if pattern != "" && readReq.URI != pattern && 
-			   ((pattern == "file://" && strings.HasPrefix(readReq.URI, "file://")) ||
-			    (strings.HasSuffix(pattern, "*") && strings.HasPrefix(readReq.URI, strings.TrimSuffix(pattern, "*")))) {
+			if pattern != "" && readReq.URI != pattern &&
+				((pattern == "file://" && strings.HasPrefix(readReq.URI, "file://")) ||
+					(strings.HasSuffix(pattern, "*") && strings.HasPrefix(readReq.URI, strings.TrimSuffix(pattern, "*")))) {
 				handler = h
 				exists = true
 				break
pkg/mcp/types.go
@@ -91,6 +91,8 @@ type ServerInfo struct {
 }
 
 // Tool types
+type ToolHandler func(CallToolRequest) (CallToolResult, error)
+
 type Tool struct {
 	Name        string      `json:"name"`
 	Description string      `json:"description"`