From ae38b11a09964e2c291a144c72814559d12d3b96 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 10 Feb 2026 19:36:02 +0200 Subject: Refactor MCP server to meet project standards and remove built-in prompts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensures all code complies with AGENTS.md standards: - Refactored functions to be under 50 lines each - Removed built-in prompts - all prompts now served from database only - Split handlePromptsCreate (72→37 lines) with helper functions - Split handlePromptsUpdate (76→44 lines) with helper function - Deleted internal/promptstore/builtin.go (no longer needed) - Updated tests to create prompts dynamically instead of relying on built-ins All tests pass with 81.5% coverage maintained. Co-Authored-By: Claude Sonnet 4.5 --- internal/mcp/server.go | 87 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 34 deletions(-) (limited to 'internal/mcp/server.go') diff --git a/internal/mcp/server.go b/internal/mcp/server.go index f6479d9..4bc66dd 100644 --- a/internal/mcp/server.go +++ b/internal/mcp/server.go @@ -318,20 +318,45 @@ func (s *Server) handlePromptsCreate(req Request) { } // Validate required fields - if params.Name == "" { - s.sendError(req.ID, ErrCodeInvalidParams, "Prompt name is required") + if err := validateCreateParams(params); err != nil { + s.sendError(req.ID, ErrCodeInvalidParams, err.Error()) return } - if params.Title == "" { - s.sendError(req.ID, ErrCodeInvalidParams, "Prompt title is required") + + // Build prompt from params + prompt := buildPromptFromCreateParams(params) + + if err := s.store.Create(prompt); err != nil { + s.logger.Printf("create prompt error: %v", err) + s.sendError(req.ID, ErrCodeInternalError, fmt.Sprintf("Failed to create prompt: %v", err)) return } + + result := PromptOperationResult{ + Success: true, + Message: fmt.Sprintf("Created prompt: %s", params.Name), + } + + s.logger.Printf("created prompt: %s", params.Name) + s.sendResponse(req.ID, result) +} + +// validateCreateParams validates required fields for prompt creation. +func validateCreateParams(params CreatePromptRequest) error { + if params.Name == "" { + return fmt.Errorf("prompt name is required") + } + if params.Title == "" { + return fmt.Errorf("prompt title is required") + } if len(params.Messages) == 0 { - s.sendError(req.ID, ErrCodeInvalidParams, "At least one message is required") - return + return fmt.Errorf("at least one message is required") } + return nil +} - // Create prompt +// buildPromptFromCreateParams converts CreatePromptRequest to Prompt. +func buildPromptFromCreateParams(params CreatePromptRequest) *promptstore.Prompt { prompt := &promptstore.Prompt{ Name: params.Name, Title: params.Title, @@ -361,19 +386,7 @@ func (s *Server) handlePromptsCreate(req Request) { }) } - if err := s.store.Create(prompt); err != nil { - s.logger.Printf("create prompt error: %v", err) - s.sendError(req.ID, ErrCodeInternalError, fmt.Sprintf("Failed to create prompt: %v", err)) - return - } - - result := PromptOperationResult{ - Success: true, - Message: fmt.Sprintf("Created prompt: %s", params.Name), - } - - s.logger.Printf("created prompt: %s", params.Name) - s.sendResponse(req.ID, result) + return prompt } // handlePromptsUpdate processes the prompts/update request. @@ -406,6 +419,26 @@ func (s *Server) handlePromptsUpdate(req Request) { return } + // Apply updates to existing prompt + applyPromptUpdates(existing, params) + + if err := s.store.Update(existing); err != nil { + s.logger.Printf("update prompt error: %v", err) + s.sendError(req.ID, ErrCodeInternalError, fmt.Sprintf("Failed to update prompt: %v", err)) + return + } + + result := PromptOperationResult{ + Success: true, + Message: fmt.Sprintf("Updated prompt: %s", params.Name), + } + + s.logger.Printf("updated prompt: %s", params.Name) + s.sendResponse(req.ID, result) +} + +// applyPromptUpdates applies update parameters to an existing prompt. +func applyPromptUpdates(existing *promptstore.Prompt, params UpdatePromptRequest) { // Update fields (only if provided) if params.Title != "" { existing.Title = params.Title @@ -440,20 +473,6 @@ func (s *Server) handlePromptsUpdate(req Request) { } existing.Updated = time.Now() - - if err := s.store.Update(existing); err != nil { - s.logger.Printf("update prompt error: %v", err) - s.sendError(req.ID, ErrCodeInternalError, fmt.Sprintf("Failed to update prompt: %v", err)) - return - } - - result := PromptOperationResult{ - Success: true, - Message: fmt.Sprintf("Updated prompt: %s", params.Name), - } - - s.logger.Printf("updated prompt: %s", params.Name) - s.sendResponse(req.ID, result) } // handlePromptsDelete processes the prompts/delete request. -- cgit v1.2.3