1+ package mcp
2+
3+ import (
4+ "context"
5+ "fmt"
6+
7+ "github.com/mark3labs/mcp-go/mcp"
8+ "k8s.io/apimachinery/pkg/runtime/schema"
9+ )
10+
11+ // HandleDeleteResource handles the delete_resource tool
12+ func (m * Implementation ) HandleDeleteResource (ctx context.Context , request mcp.CallToolRequest ) (* mcp.CallToolResult , error ) {
13+ // Parse parameters
14+ resourceType := mcp .ParseString (request , "resource_type" , "" )
15+ group := mcp .ParseString (request , "group" , "" )
16+ version := mcp .ParseString (request , "version" , "" )
17+ resource := mcp .ParseString (request , "resource" , "" )
18+ namespace := mcp .ParseString (request , "namespace" , "" )
19+ name := mcp .ParseString (request , "name" , "" )
20+
21+ // Validate parameters
22+ if resourceType == "" {
23+ return mcp .NewToolResultError ("resource_type is required" ), nil
24+ }
25+ if version == "" {
26+ return mcp .NewToolResultError ("version is required" ), nil
27+ }
28+ if resource == "" {
29+ return mcp .NewToolResultError ("resource is required" ), nil
30+ }
31+ if name == "" {
32+ return mcp .NewToolResultError ("name is required" ), nil
33+ }
34+ if resourceType == "namespaced" && namespace == "" {
35+ return mcp .NewToolResultError ("namespace is required for namespaced resources" ), nil
36+ }
37+
38+ // Create GVR
39+ // Validate resource_type
40+ if resourceType != "clustered" && resourceType != "namespaced" {
41+ return mcp .NewToolResultError ("Invalid resource_type: " + resourceType ), nil
42+ }
43+
44+ gvr := schema.GroupVersionResource {
45+ Group : group ,
46+ Version : version ,
47+ Resource : resource ,
48+ }
49+
50+ // Delete resource
51+ var err error
52+ switch resourceType {
53+ case "clustered" :
54+ err = m .k8sClient .DeleteClusteredResource (ctx , gvr , name )
55+ case "namespaced" :
56+ err = m .k8sClient .DeleteNamespacedResource (ctx , gvr , namespace , name )
57+ default :
58+ return mcp .NewToolResultError (fmt .Sprintf ("Invalid resource_type: %s" , resourceType )), nil
59+ }
60+
61+ if err != nil {
62+ return mcp .NewToolResultErrorFromErr ("Failed to delete resource" , err ), nil
63+ }
64+
65+ return mcp .NewToolResultText (fmt .Sprintf ("Successfully deleted %s resource %s" , resourceType , name )), nil
66+ }
67+
68+ // NewDeleteResourceTool creates a new delete_resource tool
69+ func NewDeleteResourceTool () mcp.Tool {
70+ return mcp .NewTool ("delete_resource" ,
71+ mcp .WithDescription ("Delete a Kubernetes resource" ),
72+ mcp .WithString ("resource_type" ,
73+ mcp .Description ("Type of resource to delete (clustered or namespaced)" ),
74+ mcp .Required ()),
75+ mcp .WithString ("group" ,
76+ mcp .Description ("API group (e.g., apps, networking.k8s.io)" )),
77+ mcp .WithString ("version" ,
78+ mcp .Description ("API version (e.g., v1, v1beta1)" ),
79+ mcp .Required ()),
80+ mcp .WithString ("resource" ,
81+ mcp .Description ("Resource name (e.g., deployments, services)" ),
82+ mcp .Required ()),
83+ mcp .WithString ("namespace" ,
84+ mcp .Description ("Namespace (required for namespaced resources)" )),
85+ mcp .WithString ("name" ,
86+ mcp .Description ("Name of the resource to delete" ),
87+ mcp .Required ()),
88+ )
89+ }
0 commit comments