summaryrefslogtreecommitdiff
path: root/internal/mcp/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/mcp/server.go')
-rw-r--r--internal/mcp/server.go87
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.