diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-10 19:36:02 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-10 19:36:02 +0200 |
| commit | ae38b11a09964e2c291a144c72814559d12d3b96 (patch) | |
| tree | 5f75b77364b7e1013e6eb84998a3044a3cc50710 /internal/mcp/server.go | |
| parent | 5551695f3b0d10c9a22cfacdb10c2cf7bd572421 (diff) | |
Refactor MCP server to meet project standards and remove built-in prompts
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 <noreply@anthropic.com>
Diffstat (limited to 'internal/mcp/server.go')
| -rw-r--r-- | internal/mcp/server.go | 87 |
1 files changed, 53 insertions, 34 deletions
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. |
