@@ -2,6 +2,7 @@ package tools
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"fmt"
6
7
"os"
7
8
@@ -36,7 +37,7 @@ func setupDestroyTool(s *server.MCPServer, cluster string, providerId cliClient.
36
37
term .Debug ("Function invoked: cli.Connect" )
37
38
client , err := cli .Connect (ctx , cluster )
38
39
if err != nil {
39
- return mcp .NewToolResultErrorFromErr ("Could not connect" , err ), nil
40
+ return mcp .NewToolResultErrorFromErr ("Could not connect" , err ), err
40
41
}
41
42
42
43
client .Track ("MCP Destroy Tool" )
@@ -45,15 +46,19 @@ func setupDestroyTool(s *server.MCPServer, cluster string, providerId cliClient.
45
46
provider , err := cli .NewProvider (ctx , providerId , client )
46
47
if err != nil {
47
48
term .Error ("Failed to get new provider" , "error" , err )
48
- return mcp .NewToolResultErrorFromErr ("Failed to get new provider" , err ), nil
49
+ return mcp .NewToolResultErrorFromErr ("Failed to get new provider" , err ), err
49
50
}
50
51
51
- wd , ok := request .Params .Arguments ["working_directory" ].(string )
52
- if ! ok || wd != "" {
53
- err := os .Chdir (wd )
54
- if err != nil {
55
- term .Error ("Failed to change working directory" , "error" , err )
56
- }
52
+ wd , err := request .RequireString ("working_directory" )
53
+ if err != nil || wd == "" {
54
+ term .Error ("Invalid working directory" , "error" , errors .New ("working_directory is required" ))
55
+ return mcp .NewToolResultErrorFromErr ("Invalid working directory" , errors .New ("working_directory is required" )), err
56
+ }
57
+
58
+ err = os .Chdir (wd )
59
+ if err != nil {
60
+ term .Error ("Failed to change working directory" , "error" , err )
61
+ return mcp .NewToolResultErrorFromErr ("Failed to change working directory" , err ), err
57
62
}
58
63
59
64
loader := configureLoader (request )
@@ -62,13 +67,13 @@ func setupDestroyTool(s *server.MCPServer, cluster string, providerId cliClient.
62
67
projectName , err := cliClient .LoadProjectNameWithFallback (ctx , loader , provider )
63
68
if err != nil {
64
69
term .Error ("Failed to load project name" , "error" , err )
65
- return mcp .NewToolResultErrorFromErr ("Failed to load project name" , err ), nil
70
+ return mcp .NewToolResultErrorFromErr ("Failed to load project name" , err ), err
66
71
}
67
72
68
73
err = canIUseProvider (ctx , client , projectName , provider )
69
74
if err != nil {
70
75
term .Error ("Failed to use provider" , "error" , err )
71
- return mcp .NewToolResultErrorFromErr ("Failed to use provider" , err ), nil
76
+ return mcp .NewToolResultErrorFromErr ("Failed to use provider" , err ), err
72
77
}
73
78
74
79
term .Debug ("Function invoked: cli.ComposeDown" )
@@ -77,15 +82,15 @@ func setupDestroyTool(s *server.MCPServer, cluster string, providerId cliClient.
77
82
if connect .CodeOf (err ) == connect .CodeNotFound {
78
83
// Show a warning (not an error) if the service was not found
79
84
term .Warn ("Project not found" , "error" , err )
80
- return mcp .NewToolResultText ("Project not found, nothing to destroy. Please use a valid project name, compose file path or project directory." ), nil
85
+ return mcp .NewToolResultText ("Project not found, nothing to destroy. Please use a valid project name, compose file path or project directory." ), err
81
86
}
82
87
83
88
result := HandleTermsOfServiceError (err )
84
89
if result != nil {
85
- return result , nil
90
+ return result , err
86
91
}
87
92
88
- return mcp .NewToolResultErrorFromErr ("Failed to destroy project" , err ), nil
93
+ return mcp .NewToolResultErrorFromErr ("Failed to destroy project" , err ), err
89
94
}
90
95
91
96
return mcp .NewToolResultText (fmt .Sprintf ("Successfully destroyed project: %s, etag: %s" , projectName , deployment )), nil
0 commit comments