diff --git a/core/agent/mcp.go b/core/agent/mcp.go index 7ef9273..7204818 100644 --- a/core/agent/mcp.go +++ b/core/agent/mcp.go @@ -3,6 +3,7 @@ package agent import ( "context" "encoding/json" + "strings" "github.com/mark3labs/mcp-go/client" "github.com/mark3labs/mcp-go/client/transport" @@ -64,19 +65,37 @@ func (m *mcpAction) Run(ctx context.Context, sharedState *types.AgentSharedState // Traiter le résultat textResult := "" - if result.IsError { - return types.ActionResult{}, err - } // Extraire le texte du résultat selon le format de mark3labs/mcp-go for _, content := range result.Content { - if textContent, ok := content.(*mcp.TextContent); ok { + if textContent, ok := mcp.AsTextContent(content); ok { textResult += textContent.Text + "\n" } else { xlog.Error("Unsupported content type", "type", content) } } + // Si c'est une erreur, retourner le contenu de l'erreur comme résultat + // plutôt que de faire échouer complètement l'action + if result.IsError { + xlog.Error("MCP tool returned error", "tool", m.toolName, "error", textResult) + + // Fournir des suggestions spécifiques selon le type d'erreur + errorMessage := textResult + if strings.Contains(strings.ToLower(textResult), "not found") { + if m.toolName == "web-search-web_url_read" { + errorMessage = "L'URL spécifiée n'a pas pu être trouvée. Essayez plutôt d'utiliser l'outil de recherche web 'web-search-searxng_web_search' pour chercher des informations sur ce sujet." + } else { + errorMessage = "Ressource non trouvée: " + textResult + } + } + + // Retourner le message d'erreur comme résultat pour que l'agent puisse réagir + return types.ActionResult{ + Result: "Erreur: " + errorMessage, + }, nil + } + return types.ActionResult{ Result: textResult, }, nil