@prodisco/k8s-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +226 -0
- package/dist/codegen/generateTypes.d.ts +8 -0
- package/dist/codegen/generateTypes.d.ts.map +1 -0
- package/dist/codegen/generateTypes.js +96 -0
- package/dist/codegen/generateTypes.js.map +1 -0
- package/dist/codegen/interfaceGenerator.d.ts +9 -0
- package/dist/codegen/interfaceGenerator.d.ts.map +1 -0
- package/dist/codegen/interfaceGenerator.js +185 -0
- package/dist/codegen/interfaceGenerator.js.map +1 -0
- package/dist/codegen/toolMapping.d.ts +11 -0
- package/dist/codegen/toolMapping.d.ts.map +1 -0
- package/dist/codegen/toolMapping.js +78 -0
- package/dist/codegen/toolMapping.js.map +1 -0
- package/dist/codegen/typeExtractor.d.ts +23 -0
- package/dist/codegen/typeExtractor.d.ts.map +1 -0
- package/dist/codegen/typeExtractor.js +112 -0
- package/dist/codegen/typeExtractor.js.map +1 -0
- package/dist/kube/client.d.ts +37 -0
- package/dist/kube/client.d.ts.map +1 -0
- package/dist/kube/client.js +161 -0
- package/dist/kube/client.js.map +1 -0
- package/dist/kube/types.d.ts +27 -0
- package/dist/kube/types.d.ts.map +1 -0
- package/dist/kube/types.js +2 -0
- package/dist/kube/types.js.map +1 -0
- package/dist/resources/filesystem.d.ts +15 -0
- package/dist/resources/filesystem.d.ts.map +1 -0
- package/dist/resources/filesystem.js +54 -0
- package/dist/resources/filesystem.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +127 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/kubernetes/index.d.ts +5 -0
- package/dist/tools/kubernetes/index.d.ts.map +1 -0
- package/dist/tools/kubernetes/index.js +6 -0
- package/dist/tools/kubernetes/index.js.map +1 -0
- package/dist/tools/kubernetes/metadata.d.ts +110 -0
- package/dist/tools/kubernetes/metadata.d.ts.map +1 -0
- package/dist/tools/kubernetes/metadata.js +19 -0
- package/dist/tools/kubernetes/metadata.js.map +1 -0
- package/dist/tools/kubernetes/searchTools-old.d.ts +35 -0
- package/dist/tools/kubernetes/searchTools-old.d.ts.map +1 -0
- package/dist/tools/kubernetes/searchTools-old.js +414 -0
- package/dist/tools/kubernetes/searchTools-old.js.map +1 -0
- package/dist/tools/kubernetes/searchTools-v2.d.ts +35 -0
- package/dist/tools/kubernetes/searchTools-v2.d.ts.map +1 -0
- package/dist/tools/kubernetes/searchTools-v2.js +269 -0
- package/dist/tools/kubernetes/searchTools-v2.js.map +1 -0
- package/dist/tools/kubernetes/searchTools.d.ts +87 -0
- package/dist/tools/kubernetes/searchTools.d.ts.map +1 -0
- package/dist/tools/kubernetes/searchTools.js +529 -0
- package/dist/tools/kubernetes/searchTools.js.map +1 -0
- package/dist/tools/kubernetes/typeDefinitions.d.ts +24 -0
- package/dist/tools/kubernetes/typeDefinitions.d.ts.map +1 -0
- package/dist/tools/kubernetes/typeDefinitions.js +518 -0
- package/dist/tools/kubernetes/typeDefinitions.js.map +1 -0
- package/dist/tools/types.d.ts +10 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/util/manifest.d.ts +5 -0
- package/dist/util/manifest.d.ts.map +1 -0
- package/dist/util/manifest.js +31 -0
- package/dist/util/manifest.js.map +1 -0
- package/dist/util/paths.d.ts +7 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +14 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/summary.d.ts +403 -0
- package/dist/util/summary.d.ts.map +1 -0
- package/dist/util/summary.js +211 -0
- package/dist/util/summary.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import * as k8s from '@kubernetes/client-node';
|
|
3
|
+
import * as ts from 'typescript';
|
|
4
|
+
import { readFileSync, existsSync, readdirSync } from 'fs';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import * as os from 'os';
|
|
7
|
+
import { PACKAGE_ROOT } from '../../util/paths.js';
|
|
8
|
+
const SearchToolsInputSchema = z.object({
|
|
9
|
+
resourceType: z
|
|
10
|
+
.string()
|
|
11
|
+
.describe('Kubernetes resource type (e.g., "Pod", "Deployment", "Service", "ConfigMap")'),
|
|
12
|
+
action: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('API action: list, read, create, delete, patch, replace, connect, get, watch. Omit to return all actions for the resource.'),
|
|
16
|
+
scope: z
|
|
17
|
+
.enum(['namespaced', 'cluster', 'all'])
|
|
18
|
+
.optional()
|
|
19
|
+
.default('all')
|
|
20
|
+
.describe('Resource scope: "namespaced" for namespace-scoped resources, "cluster" for cluster-wide resources, "all" for both'),
|
|
21
|
+
exclude: z
|
|
22
|
+
.object({
|
|
23
|
+
actions: z
|
|
24
|
+
.array(z.string())
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('Actions to exclude (e.g., ["connect", "watch"]). Filters out methods with these action prefixes.'),
|
|
27
|
+
apiClasses: z
|
|
28
|
+
.array(z.string())
|
|
29
|
+
.optional()
|
|
30
|
+
.describe('API classes to exclude (e.g., ["CustomObjectsApi"]). Filters out methods from these API classes.'),
|
|
31
|
+
})
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('Exclusion criteria. If both actions and apiClasses are specified, both must match (AND logic) to exclude a method.'),
|
|
34
|
+
limit: z
|
|
35
|
+
.number()
|
|
36
|
+
.int()
|
|
37
|
+
.positive()
|
|
38
|
+
.max(50)
|
|
39
|
+
.default(10)
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('Maximum number of results to return'),
|
|
42
|
+
});
|
|
43
|
+
// Cache for Kubernetes API methods
|
|
44
|
+
let apiMethodsCache = null;
|
|
45
|
+
/**
|
|
46
|
+
* Extract type definition from a TypeScript file using TS compiler API
|
|
47
|
+
*/
|
|
48
|
+
function extractTypeFromFile(typeName) {
|
|
49
|
+
const basePath = process.cwd();
|
|
50
|
+
const modelsPath = join(basePath, 'node_modules', '@kubernetes', 'client-node', 'dist', 'gen', 'models');
|
|
51
|
+
const filePath = join(modelsPath, `${typeName}.d.ts`);
|
|
52
|
+
if (!existsSync(filePath)) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const sourceCode = readFileSync(filePath, 'utf-8');
|
|
57
|
+
const sourceFile = ts.createSourceFile(filePath, sourceCode, ts.ScriptTarget.Latest, true);
|
|
58
|
+
let result = null;
|
|
59
|
+
function visit(node) {
|
|
60
|
+
if ((ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) &&
|
|
61
|
+
node.name && node.name.text === typeName) {
|
|
62
|
+
let def = `export class ${typeName} {\n`;
|
|
63
|
+
node.members?.forEach((member) => {
|
|
64
|
+
if (ts.isPropertySignature(member) || ts.isPropertyDeclaration(member)) {
|
|
65
|
+
if (member.name) {
|
|
66
|
+
const propName = member.name.getText(sourceFile).replace(/['"]/g, '');
|
|
67
|
+
const propType = member.type?.getText(sourceFile) || 'any';
|
|
68
|
+
const optional = member.questionToken ? '?' : '';
|
|
69
|
+
def += ` ${propName}${optional}: ${propType};\n`;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
def += `}`;
|
|
74
|
+
result = def;
|
|
75
|
+
}
|
|
76
|
+
ts.forEachChild(node, visit);
|
|
77
|
+
}
|
|
78
|
+
visit(sourceFile);
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Extract input and output type definitions for a method
|
|
87
|
+
*/
|
|
88
|
+
function extractMethodTypeDefinitions(apiClass, methodName, resourceType) {
|
|
89
|
+
const result = {};
|
|
90
|
+
// Determine request type (for methods that take parameters)
|
|
91
|
+
if (methodName.includes('create') || methodName.includes('replace') || methodName.includes('patch')) {
|
|
92
|
+
const requestTypeName = `${apiClass}${methodName.charAt(0).toUpperCase() + methodName.slice(1)}Request`;
|
|
93
|
+
result.input = extractTypeFromFile(requestTypeName) || undefined;
|
|
94
|
+
}
|
|
95
|
+
// Determine response type based on method
|
|
96
|
+
if (methodName.startsWith('list')) {
|
|
97
|
+
const listTypeName = `V1${resourceType}List`;
|
|
98
|
+
result.output = extractTypeFromFile(listTypeName) || undefined;
|
|
99
|
+
}
|
|
100
|
+
else if (methodName.startsWith('read') || methodName.startsWith('create') || methodName.startsWith('replace')) {
|
|
101
|
+
const singleTypeName = `V1${resourceType}`;
|
|
102
|
+
result.output = extractTypeFromFile(singleTypeName) || undefined;
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Extract all API methods from @kubernetes/client-node
|
|
108
|
+
*/
|
|
109
|
+
function extractKubernetesApiMethods() {
|
|
110
|
+
if (apiMethodsCache) {
|
|
111
|
+
return apiMethodsCache;
|
|
112
|
+
}
|
|
113
|
+
const methods = [];
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
115
|
+
const apiClasses = [
|
|
116
|
+
{ class: 'CoreV1Api', constructor: k8s.CoreV1Api, description: 'Core Kubernetes resources (Pods, Services, ConfigMaps, Secrets, Namespaces, Nodes, etc.)' },
|
|
117
|
+
{ class: 'AppsV1Api', constructor: k8s.AppsV1Api, description: 'Applications API (Deployments, StatefulSets, DaemonSets, ReplicaSets)' },
|
|
118
|
+
{ class: 'BatchV1Api', constructor: k8s.BatchV1Api, description: 'Batch operations (Jobs, CronJobs)' },
|
|
119
|
+
{ class: 'NetworkingV1Api', constructor: k8s.NetworkingV1Api, description: 'Networking resources (Ingresses, NetworkPolicies, IngressClasses)' },
|
|
120
|
+
{ class: 'RbacAuthorizationV1Api', constructor: k8s.RbacAuthorizationV1Api, description: 'RBAC (Roles, RoleBindings, ClusterRoles, ClusterRoleBindings, ServiceAccounts)' },
|
|
121
|
+
{ class: 'StorageV1Api', constructor: k8s.StorageV1Api, description: 'Storage resources (StorageClasses, PersistentVolumes, VolumeAttachments)' },
|
|
122
|
+
{ class: 'CustomObjectsApi', constructor: k8s.CustomObjectsApi, description: 'Custom Resource Definitions (CRDs) and custom resources' },
|
|
123
|
+
{ class: 'ApiextensionsV1Api', constructor: k8s.ApiextensionsV1Api, description: 'API extensions (CustomResourceDefinitions for discovering and managing CRDs)' },
|
|
124
|
+
{ class: 'AutoscalingV1Api', constructor: k8s.AutoscalingV1Api, description: 'Autoscaling resources (HorizontalPodAutoscalers)' },
|
|
125
|
+
{ class: 'PolicyV1Api', constructor: k8s.PolicyV1Api, description: 'Policy resources (PodDisruptionBudgets)' },
|
|
126
|
+
];
|
|
127
|
+
for (const { class: className, constructor: ApiClass, description: classDesc } of apiClasses) {
|
|
128
|
+
if (!ApiClass)
|
|
129
|
+
continue;
|
|
130
|
+
const proto = ApiClass.prototype;
|
|
131
|
+
const methodNames = Object.getOwnPropertyNames(proto);
|
|
132
|
+
for (const methodName of methodNames) {
|
|
133
|
+
if (methodName === 'constructor' || methodName.startsWith('_') ||
|
|
134
|
+
methodName === 'setDefaultAuthentication' || typeof proto[methodName] !== 'function') {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const resourceType = extractResourceType(methodName);
|
|
138
|
+
const description = generateDescriptionFromMethodName(methodName, className, classDesc);
|
|
139
|
+
const parameters = inferParameters(methodName, className);
|
|
140
|
+
const example = generateUsageExample(className, methodName, parameters);
|
|
141
|
+
const inputSchema = generateInputSchema(methodName, parameters);
|
|
142
|
+
const outputSchema = generateOutputSchema(methodName, resourceType);
|
|
143
|
+
const typeDefinitionFile = `node_modules/@kubernetes/client-node/dist/gen/apis/${className}.d.ts`;
|
|
144
|
+
const typeDefinitions = extractMethodTypeDefinitions(className, methodName, resourceType);
|
|
145
|
+
methods.push({
|
|
146
|
+
apiClass: className,
|
|
147
|
+
methodName,
|
|
148
|
+
resourceType,
|
|
149
|
+
description,
|
|
150
|
+
parameters,
|
|
151
|
+
returnType: 'Promise<any>',
|
|
152
|
+
example,
|
|
153
|
+
typeDefinitionFile,
|
|
154
|
+
inputSchema,
|
|
155
|
+
outputSchema,
|
|
156
|
+
typeDefinitions: Object.keys(typeDefinitions).length > 0 ? typeDefinitions : undefined,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
apiMethodsCache = methods;
|
|
161
|
+
console.error(`Indexed ${methods.length} Kubernetes API methods`);
|
|
162
|
+
return methods;
|
|
163
|
+
}
|
|
164
|
+
function extractResourceType(methodName) {
|
|
165
|
+
let resource = methodName
|
|
166
|
+
.replace(/^(list|read|create|delete|patch|replace|connect|get|watch)/, '')
|
|
167
|
+
.replace(/^Namespaced/, '')
|
|
168
|
+
.replace(/^Cluster/, '')
|
|
169
|
+
.replace(/ForAllNamespaces$/, '')
|
|
170
|
+
.replace(/WithHttpInfo$/, '');
|
|
171
|
+
if (resource.startsWith('Collection')) {
|
|
172
|
+
resource = resource.replace(/^Collection/, '');
|
|
173
|
+
}
|
|
174
|
+
return resource || 'Resource';
|
|
175
|
+
}
|
|
176
|
+
function generateDescriptionFromMethodName(methodName, apiClass, classDesc) {
|
|
177
|
+
const words = methodName.replace(/([A-Z])/g, ' $1').toLowerCase().trim();
|
|
178
|
+
const resourceMatch = methodName.match(/(?:list|read|create|delete|patch|replace)(?:Namespaced)?(.+?)(?:ForAllNamespaces)?$/);
|
|
179
|
+
const resource = resourceMatch ? resourceMatch[1] : '';
|
|
180
|
+
let desc = words.charAt(0).toUpperCase() + words.slice(1);
|
|
181
|
+
if (resource)
|
|
182
|
+
desc += ` (${resource})`;
|
|
183
|
+
desc += ` - ${classDesc}`;
|
|
184
|
+
return desc;
|
|
185
|
+
}
|
|
186
|
+
function inferParameters(methodName, apiClass) {
|
|
187
|
+
const parameters = [];
|
|
188
|
+
// CustomObjectsApi has special parameter requirements
|
|
189
|
+
if (apiClass === 'CustomObjectsApi') {
|
|
190
|
+
if (methodName.includes('CustomObject')) {
|
|
191
|
+
parameters.push({ name: 'group', type: 'string', optional: false, description: 'API group (e.g., "webapp.example.com")' });
|
|
192
|
+
parameters.push({ name: 'version', type: 'string', optional: false, description: 'API version (e.g., "v1")' });
|
|
193
|
+
if (methodName.includes('Namespaced')) {
|
|
194
|
+
parameters.push({ name: 'namespace', type: 'string', optional: false, description: 'Namespace scope' });
|
|
195
|
+
}
|
|
196
|
+
parameters.push({ name: 'plural', type: 'string', optional: false, description: 'Resource plural name (e.g., "guestbooks")' });
|
|
197
|
+
if (methodName.includes('get') && !methodName.includes('list')) {
|
|
198
|
+
parameters.push({ name: 'name', type: 'string', optional: false, description: 'Resource name' });
|
|
199
|
+
}
|
|
200
|
+
if (methodName.includes('create') || methodName.includes('replace')) {
|
|
201
|
+
parameters.push({ name: 'body', type: 'object', optional: false, description: 'Custom resource object' });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return parameters;
|
|
205
|
+
}
|
|
206
|
+
// Standard API classes (CoreV1Api, AppsV1Api, etc.)
|
|
207
|
+
if (methodName.includes('Namespaced')) {
|
|
208
|
+
if (methodName.startsWith('list')) {
|
|
209
|
+
parameters.push({ name: 'namespace', type: 'string', optional: false, description: 'Namespace scope' });
|
|
210
|
+
}
|
|
211
|
+
else if (methodName.startsWith('read') || methodName.startsWith('delete') || methodName.startsWith('patch') || methodName.startsWith('replace')) {
|
|
212
|
+
parameters.push({ name: 'name', type: 'string', optional: false, description: 'Resource name' });
|
|
213
|
+
parameters.push({ name: 'namespace', type: 'string', optional: false, description: 'Namespace scope' });
|
|
214
|
+
}
|
|
215
|
+
else if (methodName.startsWith('create')) {
|
|
216
|
+
parameters.push({ name: 'namespace', type: 'string', optional: false, description: 'Namespace scope' });
|
|
217
|
+
parameters.push({ name: 'body', type: 'object', optional: false, description: 'Resource object' });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else if (!methodName.includes('Namespaced')) {
|
|
221
|
+
if (methodName.startsWith('read') || methodName.startsWith('delete') || methodName.startsWith('patch') || methodName.startsWith('replace')) {
|
|
222
|
+
parameters.push({ name: 'name', type: 'string', optional: false, description: 'Resource name' });
|
|
223
|
+
}
|
|
224
|
+
else if (methodName.startsWith('create')) {
|
|
225
|
+
parameters.push({ name: 'body', type: 'object', optional: false, description: 'Resource object' });
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return parameters;
|
|
229
|
+
}
|
|
230
|
+
function generateInputSchema(methodName, parameters) {
|
|
231
|
+
const properties = {};
|
|
232
|
+
const required = [];
|
|
233
|
+
for (const param of parameters) {
|
|
234
|
+
properties[param.name] = {
|
|
235
|
+
type: param.type,
|
|
236
|
+
description: param.description,
|
|
237
|
+
required: !param.optional,
|
|
238
|
+
};
|
|
239
|
+
if (!param.optional) {
|
|
240
|
+
required.push(param.name);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// CRITICAL: Always accept an object, even if empty
|
|
244
|
+
const hasRequiredParams = required.length > 0;
|
|
245
|
+
return {
|
|
246
|
+
type: 'object',
|
|
247
|
+
properties,
|
|
248
|
+
required,
|
|
249
|
+
description: hasRequiredParams
|
|
250
|
+
? `Parameters object. Required fields: ${required.join(', ')}`
|
|
251
|
+
: 'Empty object {}. This method takes no required parameters, but you MUST still pass an empty object.',
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
function generateOutputSchema(methodName, resourceType) {
|
|
255
|
+
const isList = methodName.startsWith('list');
|
|
256
|
+
const isRead = methodName.startsWith('read');
|
|
257
|
+
const isCreate = methodName.startsWith('create');
|
|
258
|
+
const isDelete = methodName.startsWith('delete');
|
|
259
|
+
let description = 'Response from Kubernetes API';
|
|
260
|
+
if (isList) {
|
|
261
|
+
description = `Response has 'items' array containing ${resourceType} resources. Access: response.items[]`;
|
|
262
|
+
}
|
|
263
|
+
else if (isRead || isCreate) {
|
|
264
|
+
description = `Response IS the ${resourceType} object. Access: response.metadata, response.spec, response.status`;
|
|
265
|
+
}
|
|
266
|
+
else if (isDelete) {
|
|
267
|
+
description = 'Response IS the status object. Access: response.status';
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
type: 'object',
|
|
271
|
+
description,
|
|
272
|
+
properties: {
|
|
273
|
+
items: {
|
|
274
|
+
type: isList ? 'array' : 'undefined',
|
|
275
|
+
description: isList ? `Array of ${resourceType} objects` : 'Not applicable',
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
function generateUsageExample(apiClass, methodName, parameters) {
|
|
281
|
+
const apiVar = apiClass.charAt(0).toLowerCase() + apiClass.slice(1);
|
|
282
|
+
const requiredParams = parameters.filter(p => !p.optional);
|
|
283
|
+
let example = `// Initialize the Kubernetes client\nconst kc = new k8s.KubeConfig();\nkc.loadFromDefault();\nconst ${apiVar} = kc.makeApiClient(k8s.${apiClass});\n\n`;
|
|
284
|
+
let paramStr = '{}';
|
|
285
|
+
if (requiredParams.length > 0) {
|
|
286
|
+
const paramPairs = requiredParams.map(p => {
|
|
287
|
+
if (p.name === 'name')
|
|
288
|
+
return `name: 'my-resource'`;
|
|
289
|
+
if (p.name === 'namespace')
|
|
290
|
+
return `namespace: 'default'`;
|
|
291
|
+
if (p.name === 'body')
|
|
292
|
+
return `body: { /* resource object */ }`;
|
|
293
|
+
return `${p.name}: 'value'`;
|
|
294
|
+
});
|
|
295
|
+
paramStr = `{ ${paramPairs.join(', ')} }`;
|
|
296
|
+
}
|
|
297
|
+
example += `// IMPORTANT: Always pass object parameter (even if empty {})\nconst response = await ${apiVar}.${methodName}(${paramStr});\n\n`;
|
|
298
|
+
if (methodName.startsWith('list')) {
|
|
299
|
+
example += `// Response structure: response.items is an array\nconst items = response.items;\nconsole.log(\`Found \${items.length} resources\`);\n// Access: items[0].metadata.name`;
|
|
300
|
+
}
|
|
301
|
+
else if (methodName.startsWith('read') || methodName.startsWith('get')) {
|
|
302
|
+
example += `// Response IS the resource object\nconsole.log(\`Resource: \${response.metadata?.name}\`);\n// Access: response.spec, response.status, etc.`;
|
|
303
|
+
}
|
|
304
|
+
else if (methodName.startsWith('create')) {
|
|
305
|
+
example += `// Response IS the created resource\nconsole.log(\`Created: \${response.metadata?.name}\`);`;
|
|
306
|
+
}
|
|
307
|
+
else if (methodName.startsWith('delete')) {
|
|
308
|
+
example += `// Response IS the status object\nconsole.log(\`Status: \${response.status}\`);`;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
example += `// Response contains the result directly\nconsole.log(response);`;
|
|
312
|
+
}
|
|
313
|
+
return example;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Match methods based on structured parameters: resourceType, action, scope, exclude
|
|
317
|
+
*/
|
|
318
|
+
function matchMethods(resourceType, action, scope, exclude, methods, limit) {
|
|
319
|
+
const lowerResourceType = resourceType.toLowerCase();
|
|
320
|
+
// Filter methods based on criteria
|
|
321
|
+
const filtered = methods.filter(method => {
|
|
322
|
+
const lowerMethod = method.methodName.toLowerCase();
|
|
323
|
+
const lowerResource = method.resourceType.toLowerCase();
|
|
324
|
+
// 1. Exclude WithHttpInfo variants (duplicates)
|
|
325
|
+
if (lowerMethod.includes('withhttpinfo')) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
// 2. Apply exclusion criteria
|
|
329
|
+
if (exclude) {
|
|
330
|
+
const hasActions = exclude.actions && exclude.actions.length > 0;
|
|
331
|
+
const hasApiClasses = exclude.apiClasses && exclude.apiClasses.length > 0;
|
|
332
|
+
if (hasActions || hasApiClasses) {
|
|
333
|
+
const matchesActionExclusion = hasActions &&
|
|
334
|
+
exclude.actions.some(a => lowerMethod.startsWith(a.toLowerCase()) || lowerMethod.includes(a.toLowerCase()));
|
|
335
|
+
const matchesApiClassExclusion = hasApiClasses &&
|
|
336
|
+
exclude.apiClasses.includes(method.apiClass);
|
|
337
|
+
// If both specified, must match both (AND logic) to be excluded
|
|
338
|
+
if (hasActions && hasApiClasses) {
|
|
339
|
+
if (matchesActionExclusion && matchesApiClassExclusion) {
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
// If only actions specified, exclude if action matches
|
|
344
|
+
else if (hasActions && matchesActionExclusion) {
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
// If only apiClasses specified, exclude if apiClass matches
|
|
348
|
+
else if (hasApiClasses && matchesApiClassExclusion) {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
// 3. Match resource type (case-insensitive)
|
|
354
|
+
// Support both exact match and partial match (e.g., "pod" matches "Pod", "PodTemplate")
|
|
355
|
+
const resourceMatches = lowerResource === lowerResourceType ||
|
|
356
|
+
lowerResource === lowerResourceType.replace(/s$/, '') || // handle plurals
|
|
357
|
+
lowerResourceType === lowerResource.replace(/s$/, '') ||
|
|
358
|
+
lowerResource.includes(lowerResourceType) ||
|
|
359
|
+
lowerResourceType.includes(lowerResource);
|
|
360
|
+
if (!resourceMatches) {
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
// 4. Match action if provided
|
|
364
|
+
if (action) {
|
|
365
|
+
const lowerAction = action.toLowerCase();
|
|
366
|
+
// Flexible matching: method can start with action or contain it early (for compound actions)
|
|
367
|
+
// e.g., "delete" matches both "deleteNamespacedPod" and "deleteCollectionNamespacedPod"
|
|
368
|
+
const actionMatches = lowerMethod.startsWith(lowerAction) ||
|
|
369
|
+
lowerMethod.includes(lowerAction);
|
|
370
|
+
if (!actionMatches) {
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// 5. Match scope
|
|
375
|
+
const hasNamespaced = lowerMethod.includes('namespaced');
|
|
376
|
+
const hasForAllNamespaces = lowerMethod.includes('forallnamespaces');
|
|
377
|
+
if (scope === 'namespaced' && !hasNamespaced) {
|
|
378
|
+
return false;
|
|
379
|
+
}
|
|
380
|
+
if (scope === 'cluster' && hasNamespaced && !hasForAllNamespaces) {
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
// scope === 'all' means no filtering
|
|
384
|
+
return true;
|
|
385
|
+
});
|
|
386
|
+
// Sort: prefer exact resource matches, then by method name alphabetically
|
|
387
|
+
const sorted = filtered.sort((a, b) => {
|
|
388
|
+
const aExact = a.resourceType.toLowerCase() === lowerResourceType;
|
|
389
|
+
const bExact = b.resourceType.toLowerCase() === lowerResourceType;
|
|
390
|
+
if (aExact && !bExact)
|
|
391
|
+
return -1;
|
|
392
|
+
if (!aExact && bExact)
|
|
393
|
+
return 1;
|
|
394
|
+
// Both exact or both partial: sort alphabetically
|
|
395
|
+
return a.methodName.localeCompare(b.methodName);
|
|
396
|
+
});
|
|
397
|
+
return sorted.slice(0, limit);
|
|
398
|
+
}
|
|
399
|
+
export const searchToolsTool = {
|
|
400
|
+
name: 'kubernetes.searchTools',
|
|
401
|
+
description: 'Find Kubernetes API methods by resource type and action. ' +
|
|
402
|
+
'Returns API methods from @kubernetes/client-node that you can use directly in your scripts. ' +
|
|
403
|
+
'Parameters: resourceType (e.g., "Pod", "Deployment"), action (optional: list, read, create, delete, patch, replace), scope (namespaced/cluster/all), exclude (optional: filter out by actions and/or apiClasses). ' +
|
|
404
|
+
'Available actions: list (list resources), read (get single resource), create (create resource), delete (delete resource), patch (update resource), replace (replace resource), connect (exec/logs/proxy), get, watch. ' +
|
|
405
|
+
'COMMON SEARCH PATTERNS: (1) Pod logs: use resourceType "Log" or "PodLog" (NOT "Pod" with action "connect"). Example: { resourceType: "Log" } returns CoreV1Api.readNamespacedPodLog. ' +
|
|
406
|
+
'(2) Pod exec/attach: use { resourceType: "Pod", action: "connect" } returns connectGetNamespacedPodExec, connectPostNamespacedPodAttach. ' +
|
|
407
|
+
'(3) Pod eviction (drain nodes): use { resourceType: "Eviction" } or { resourceType: "PodEviction" } returns CoreV1Api.createNamespacedPodEviction. ' +
|
|
408
|
+
'(4) Binding pods to nodes: use { resourceType: "Binding" } or { resourceType: "PodBinding" } returns CoreV1Api.createNamespacedPodBinding. ' +
|
|
409
|
+
'(5) Service account tokens: use { resourceType: "ServiceAccountToken" } returns CoreV1Api.createNamespacedServiceAccountToken. ' +
|
|
410
|
+
'(6) Cluster health: use { resourceType: "ComponentStatus" } returns CoreV1Api.listComponentStatus. ' +
|
|
411
|
+
'(7) Status subresources: use full resource name like { resourceType: "DeploymentStatus" }. ' +
|
|
412
|
+
'(8) Scale subresources: use full resource name like { resourceType: "DeploymentScale" }. ' +
|
|
413
|
+
'TIP: Use the exclude parameter to get more precise results by filtering out unwanted methods. ' +
|
|
414
|
+
'Exclude examples: (1) Only action: { actions: ["delete"] } excludes all delete methods. ' +
|
|
415
|
+
'(2) Multiple actions: { actions: ["delete", "create"] } excludes both delete and create methods. ' +
|
|
416
|
+
'(3) By API class: { apiClasses: ["CoreV1Api"] } excludes all CoreV1Api methods. ' +
|
|
417
|
+
'(4) Both action and apiClass (AND logic): { actions: ["delete"], apiClasses: ["CoreV1Api"] } excludes only delete methods from CoreV1Api, keeping other CoreV1Api methods and delete methods from other API classes. ' +
|
|
418
|
+
'Exclude is especially useful when searching broad resource types (e.g., "Pod" returns methods from CoreV1Api, AutoscalingV1Api, PolicyV1Api). ' +
|
|
419
|
+
'CUSTOM SCRIPTS: Before writing new scripts, check scripts/cache/ directory for existing implementations. ' +
|
|
420
|
+
'When creating custom scripts in scripts/cache/, follow Kubernetes library naming pattern to make them easily discoverable: ' +
|
|
421
|
+
'use action-scope-resource format (e.g., "list-namespaced-pod", "read-namespaced-pod-log", "create-namespaced-deployment"). ' +
|
|
422
|
+
'Example: For listing etcd pods in kube-system, name it "list-namespaced-etcd-pods.ts" NOT "get-etcd-pods.ts". ' +
|
|
423
|
+
'This naming convention makes scripts searchable and helps avoid duplicates.',
|
|
424
|
+
schema: SearchToolsInputSchema,
|
|
425
|
+
async execute(input) {
|
|
426
|
+
const { resourceType, action, scope = 'all', exclude, limit = 10 } = input;
|
|
427
|
+
const methods = extractKubernetesApiMethods();
|
|
428
|
+
const results = matchMethods(resourceType, action, scope, exclude, methods, limit);
|
|
429
|
+
// Define paths early so they can be used in summary
|
|
430
|
+
const scriptsDirectory = join(os.homedir(), '.prodisco', 'scripts', 'cache');
|
|
431
|
+
// List existing cached scripts
|
|
432
|
+
let cachedScripts = [];
|
|
433
|
+
try {
|
|
434
|
+
if (existsSync(scriptsDirectory)) {
|
|
435
|
+
cachedScripts = readdirSync(scriptsDirectory)
|
|
436
|
+
.filter(f => f.endsWith('.ts'))
|
|
437
|
+
.sort();
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
// Ignore errors if directory doesn't exist or can't be read
|
|
442
|
+
}
|
|
443
|
+
// Structured output - clear and unambiguous
|
|
444
|
+
let summary = `Found ${results.length} method(s) for resource "${resourceType}"`;
|
|
445
|
+
if (action)
|
|
446
|
+
summary += `, action "${action}"`;
|
|
447
|
+
if (scope !== 'all')
|
|
448
|
+
summary += `, scope "${scope}"`;
|
|
449
|
+
if (exclude) {
|
|
450
|
+
if (exclude.actions && exclude.actions.length > 0) {
|
|
451
|
+
summary += `, excluding actions: [${exclude.actions.join(', ')}]`;
|
|
452
|
+
}
|
|
453
|
+
if (exclude.apiClasses && exclude.apiClasses.length > 0) {
|
|
454
|
+
summary += `, excluding API classes: [${exclude.apiClasses.join(', ')}]`;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
summary += '\n\n';
|
|
458
|
+
// Show existing cached scripts if any
|
|
459
|
+
if (cachedScripts.length > 0) {
|
|
460
|
+
summary += `📝 EXISTING CACHED SCRIPTS (${cachedScripts.length}):\n`;
|
|
461
|
+
cachedScripts.forEach(script => {
|
|
462
|
+
summary += ` - ${script}\n`;
|
|
463
|
+
});
|
|
464
|
+
summary += ` (Location: ${scriptsDirectory})\n\n`;
|
|
465
|
+
}
|
|
466
|
+
summary += `Write scripts to: ${scriptsDirectory}/<name>.ts and run with: npx tsx ${scriptsDirectory}/<name>.ts\n`;
|
|
467
|
+
summary += `IMPORTANT: Check existing cached scripts above before creating new ones to avoid duplicates\n`;
|
|
468
|
+
summary += `Custom script naming convention: Use k8s library pattern (e.g., list-namespaced-pod, read-namespaced-pod-log)\n`;
|
|
469
|
+
summary += `For detailed type definitions: use kubernetes.getTypeDefinition tool\n\n`;
|
|
470
|
+
results.forEach((method, i) => {
|
|
471
|
+
summary += `${i + 1}. ${method.apiClass}.${method.methodName}\n`;
|
|
472
|
+
// Method arguments
|
|
473
|
+
if (method.inputSchema.required.length > 0) {
|
|
474
|
+
const params = method.inputSchema.required.map(r => `${r}: "${method.inputSchema.properties[r]?.type || 'string'}"`).join(', ');
|
|
475
|
+
summary += ` method_args: { ${params} }\n`;
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
summary += ` method_args: {} (empty object - required)\n`;
|
|
479
|
+
}
|
|
480
|
+
// Return values
|
|
481
|
+
const isList = method.methodName.startsWith('list');
|
|
482
|
+
if (isList) {
|
|
483
|
+
summary += ` return_values: response.items (array of ${method.resourceType})\n`;
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
summary += ` return_values: response (${method.resourceType} object)\n`;
|
|
487
|
+
}
|
|
488
|
+
// Include inline type definitions if available (brief overview)
|
|
489
|
+
if (method.typeDefinitions && method.typeDefinitions.output) {
|
|
490
|
+
const lines = method.typeDefinitions.output.split('\n');
|
|
491
|
+
const typeName = lines[0]?.trim() || 'unknown';
|
|
492
|
+
// Extract key properties (just first 2-3)
|
|
493
|
+
const propertyLines = lines.slice(1, 4).filter(l => l.trim() && !l.includes('}'));
|
|
494
|
+
summary += ` return_types: ${typeName}\n`;
|
|
495
|
+
if (propertyLines.length > 0) {
|
|
496
|
+
summary += ` key properties: ${propertyLines.map(l => l.trim()).join(', ')}\n`;
|
|
497
|
+
}
|
|
498
|
+
summary += ` (use kubernetes.getTypeDefinition for complete type details)\n`;
|
|
499
|
+
}
|
|
500
|
+
summary += `\n`;
|
|
501
|
+
});
|
|
502
|
+
if (results.length === 0) {
|
|
503
|
+
summary += `No methods found. Try:\n`;
|
|
504
|
+
summary += `- Different resourceType (e.g., "Pod", "Deployment", "Service")\n`;
|
|
505
|
+
summary += `- Omit action to see all available methods\n`;
|
|
506
|
+
summary += `- Use scope: "all" to see both namespaced and cluster methods\n`;
|
|
507
|
+
}
|
|
508
|
+
const usage = 'USAGE:\n' +
|
|
509
|
+
'- All methods require object parameter: await api.method({ param: value })\n' +
|
|
510
|
+
'- No required params: await api.method({})\n' +
|
|
511
|
+
'- List operations return: response.items (array)\n' +
|
|
512
|
+
'- Single resource operations return: response (object)\n' +
|
|
513
|
+
`- Write scripts to: ${scriptsDirectory}/<yourscript>.ts\n` +
|
|
514
|
+
`- Run scripts with: npx tsx ${scriptsDirectory}/<yourscript>.ts\n` +
|
|
515
|
+
`- Import dependencies from: ${PACKAGE_ROOT}/node_modules/@kubernetes/client-node`;
|
|
516
|
+
return {
|
|
517
|
+
summary,
|
|
518
|
+
tools: results,
|
|
519
|
+
totalMatches: results.length,
|
|
520
|
+
usage,
|
|
521
|
+
paths: {
|
|
522
|
+
scriptsDirectory,
|
|
523
|
+
packageDirectory: PACKAGE_ROOT,
|
|
524
|
+
},
|
|
525
|
+
cachedScripts,
|
|
526
|
+
};
|
|
527
|
+
},
|
|
528
|
+
};
|
|
529
|
+
//# sourceMappingURL=searchTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchTools.js","sourceRoot":"","sources":["../../../src/tools/kubernetes/searchTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ToolDefinition } from '../types.js';
|
|
3
|
+
declare const GetTypeDefinitionInputSchema: z.ZodObject<{
|
|
4
|
+
types: z.ZodArray<z.ZodString, "many">;
|
|
5
|
+
depth: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
types: string[];
|
|
8
|
+
depth?: number | undefined;
|
|
9
|
+
}, {
|
|
10
|
+
types: string[];
|
|
11
|
+
depth?: number | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
type TypeDefinitionResult = {
|
|
14
|
+
summary: string;
|
|
15
|
+
types: Record<string, {
|
|
16
|
+
name: string;
|
|
17
|
+
definition: string;
|
|
18
|
+
file: string;
|
|
19
|
+
nestedTypes: string[];
|
|
20
|
+
}>;
|
|
21
|
+
};
|
|
22
|
+
export declare const getTypeDefinitionTool: ToolDefinition<TypeDefinitionResult, typeof GetTypeDefinitionInputSchema>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=typeDefinitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeDefinitions.d.ts","sourceRoot":"","sources":["../../../src/tools/kubernetes/typeDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,QAAA,MAAM,4BAA4B;;;;;;;;;EAYhC,CAAC;AAEH,KAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC,CAAC;CACJ,CAAC;AA4dF,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,oBAAoB,EAAE,OAAO,4BAA4B,CAmJ3G,CAAC"}
|