@kryptosai/mcp-observatory 0.27.0 → 1.28.1
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/COMMERCIAL.md +28 -2
- package/CONTRIBUTORS.md +39 -0
- package/README.md +114 -22
- package/dist/src/action-receipt.d.ts +20 -0
- package/dist/src/action-receipt.js +85 -0
- package/dist/src/action-receipt.js.map +1 -0
- package/dist/src/adapters/http.js +1 -5
- package/dist/src/adapters/http.js.map +1 -1
- package/dist/src/audit.d.ts +64 -0
- package/dist/src/audit.js +359 -0
- package/dist/src/audit.js.map +1 -0
- package/dist/src/cassette.js +3 -2
- package/dist/src/cassette.js.map +1 -1
- package/dist/src/checks/attack-sim.d.ts +20 -0
- package/dist/src/checks/attack-sim.js +316 -0
- package/dist/src/checks/attack-sim.js.map +1 -0
- package/dist/src/ci-issue.js +4 -3
- package/dist/src/ci-issue.js.map +1 -1
- package/dist/src/cli.js +25 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/attack-sim.d.ts +2 -0
- package/dist/src/commands/attack-sim.js +220 -0
- package/dist/src/commands/attack-sim.js.map +1 -0
- package/dist/src/commands/audit.d.ts +2 -0
- package/dist/src/commands/audit.js +132 -0
- package/dist/src/commands/audit.js.map +1 -0
- package/dist/src/commands/init-ci.d.ts +3 -0
- package/dist/src/commands/init-ci.js +78 -13
- package/dist/src/commands/init-ci.js.map +1 -1
- package/dist/src/commands/legacy.js +8 -1
- package/dist/src/commands/legacy.js.map +1 -1
- package/dist/src/commands/receipt.d.ts +2 -0
- package/dist/src/commands/receipt.js +113 -0
- package/dist/src/commands/receipt.js.map +1 -0
- package/dist/src/commands/scan.js +30 -6
- package/dist/src/commands/scan.js.map +1 -1
- package/dist/src/commands/score.js +63 -0
- package/dist/src/commands/score.js.map +1 -1
- package/dist/src/commands/serve.js +9 -1
- package/dist/src/commands/serve.js.map +1 -1
- package/dist/src/commands/setup-ci-conversion.d.ts +3 -1
- package/dist/src/commands/setup-ci-conversion.js +23 -8
- package/dist/src/commands/setup-ci-conversion.js.map +1 -1
- package/dist/src/commands/telemetry.js +20 -14
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/test.js +31 -2
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/findings.d.ts +1 -0
- package/dist/src/findings.js +42 -1
- package/dist/src/findings.js.map +1 -1
- package/dist/src/history.js +3 -2
- package/dist/src/history.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/smithery.js +5 -1
- package/dist/src/integrations/smithery.js.map +1 -1
- package/dist/src/receipt.d.ts +100 -0
- package/dist/src/receipt.js +375 -0
- package/dist/src/receipt.js.map +1 -0
- package/dist/src/reporters/attack-sim.d.ts +2 -0
- package/dist/src/reporters/attack-sim.js +89 -0
- package/dist/src/reporters/attack-sim.js.map +1 -0
- package/dist/src/reporters/pr-comment.js +20 -6
- package/dist/src/reporters/pr-comment.js.map +1 -1
- package/dist/src/reporters/sarif.js +11 -1
- package/dist/src/reporters/sarif.js.map +1 -1
- package/dist/src/runner.d.ts +3 -0
- package/dist/src/runner.js +5 -0
- package/dist/src/runner.js.map +1 -1
- package/dist/src/score.js +1 -1
- package/dist/src/score.js.map +1 -1
- package/dist/src/security-profiles.d.ts +13 -0
- package/dist/src/security-profiles.js +59 -0
- package/dist/src/security-profiles.js.map +1 -0
- package/dist/src/storage.js +3 -2
- package/dist/src/storage.js.map +1 -1
- package/dist/src/telemetry.d.ts +10 -0
- package/dist/src/telemetry.js +17 -1
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/utils/files.d.ts +1 -0
- package/dist/src/utils/files.js +21 -0
- package/dist/src/utils/files.js.map +1 -0
- package/dist/src/utils/ids.js +18 -5
- package/dist/src/utils/ids.js.map +1 -1
- package/dist/src/utils/url.d.ts +2 -0
- package/dist/src/utils/url.js +15 -0
- package/dist/src/utils/url.js.map +1 -0
- package/dist/src/validate.js +1 -1
- package/dist/src/validate.js.map +1 -1
- package/docs/10x-agentic-growth-sprint.md +47 -0
- package/docs/agent-ecosystem-promotion-plan.md +244 -0
- package/docs/agent-tasks.md +95 -0
- package/docs/agentic-contributor-outreach.md +52 -0
- package/docs/automatic-ci-integration.md +33 -0
- package/docs/campaign-attribution.md +58 -0
- package/docs/code-scanning-demo.md +57 -0
- package/docs/commercial-boundary.md +83 -0
- package/docs/contributor-proof-cards/README.md +33 -0
- package/docs/contributor-recognition.md +92 -0
- package/docs/examples/nsa-mcp-audit-report.md +372 -0
- package/docs/examples/nsa-mcp-results.sarif +930 -0
- package/docs/examples/nsa-mcp-score.json +13 -0
- package/docs/feishu-lark-mcp.md +1 -1
- package/docs/github-code-scanning-for-mcp.md +1 -1
- package/docs/government-enterprise-pilot.md +93 -0
- package/docs/launch.md +64 -0
- package/docs/mcp-attack-simulator.md +57 -0
- package/docs/mcp-receipts.md +109 -0
- package/docs/mcp-server-safety-index.md +29 -22
- package/docs/nsa-mcp-audit-ci.md +88 -0
- package/docs/procurement-one-pager.md +74 -0
- package/docs/proof.md +5 -2
- package/docs/public-guidance-crosswalk.md +48 -0
- package/docs/receipt-graph.md +54 -0
- package/docs/safety-index/artifacts/antv-chart-server.json +40 -22
- package/docs/safety-index/artifacts/antv-chart-server.md +22 -9
- package/docs/safety-index/artifacts/browsermcp-server.json +36 -18
- package/docs/safety-index/artifacts/browsermcp-server.md +22 -9
- package/docs/safety-index/artifacts/context7-server.json +83 -26
- package/docs/safety-index/artifacts/context7-server.md +33 -20
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +2438 -0
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +176 -0
- package/docs/safety-index/artifacts/everything-server.json +150 -57
- package/docs/safety-index/artifacts/everything-server.md +36 -23
- package/docs/safety-index/artifacts/executeautomation-playwright-server.json +162 -19
- package/docs/safety-index/artifacts/executeautomation-playwright-server.md +25 -12
- package/docs/safety-index/artifacts/filesystem-server.json +221 -19
- package/docs/safety-index/artifacts/filesystem-server.md +24 -11
- package/docs/safety-index/artifacts/kubernetes-server.attack.json +1559 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.md +43 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.sarif +2857 -0
- package/docs/safety-index/artifacts/kubernetes-server.json +1573 -0
- package/docs/safety-index/artifacts/kubernetes-server.md +176 -0
- package/docs/safety-index/artifacts/memory-server.json +93 -32
- package/docs/safety-index/artifacts/memory-server.md +45 -25
- package/docs/safety-index/artifacts/opentofu-server.json +44 -18
- package/docs/safety-index/artifacts/opentofu-server.md +23 -10
- package/docs/safety-index/artifacts/playwright-mcp-server.json +177 -21
- package/docs/safety-index/artifacts/playwright-mcp-server.md +27 -14
- package/docs/safety-index/artifacts/promptopia-server.json +45 -19
- package/docs/safety-index/artifacts/promptopia-server.md +21 -8
- package/docs/safety-index/artifacts/puppeteer-server.json +77 -22
- package/docs/safety-index/artifacts/puppeteer-server.md +28 -15
- package/docs/safety-index/artifacts/ref-tools-server.json +36 -18
- package/docs/safety-index/artifacts/ref-tools-server.md +21 -8
- package/docs/safety-index/artifacts/sequential-thinking-server.json +38 -21
- package/docs/safety-index/artifacts/sequential-thinking-server.md +22 -9
- package/docs/safety-index/targets.json +90 -14
- package/docs/security-due-diligence.md +87 -0
- package/docs/setup-ci-doctor.md +13 -1
- package/docs/target-gallery.md +49 -0
- package/docs/target-registry.md +5 -1
- package/docs/tool-call-receipts.md +115 -0
- package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
- package/examples/insecure-mcp-server/server.mjs +62 -0
- package/package.json +31 -2
- package/schemas/run-artifact.schema.json +1 -0
- package/scripts/postinstall.mjs +138 -0
|
@@ -0,0 +1,1573 @@
|
|
|
1
|
+
{
|
|
2
|
+
"artifactType": "run",
|
|
3
|
+
"schemaVersion": "1.0.0",
|
|
4
|
+
"gate": "fail",
|
|
5
|
+
"runId": "run_2026-07-06T194958878Z_b41bb221",
|
|
6
|
+
"createdAt": "2026-07-06T19:49:58.878Z",
|
|
7
|
+
"toolVersion": "0.28.0",
|
|
8
|
+
"target": {
|
|
9
|
+
"targetId": "kubernetes-server",
|
|
10
|
+
"adapter": "local-process",
|
|
11
|
+
"command": "npx",
|
|
12
|
+
"args": [
|
|
13
|
+
"-y",
|
|
14
|
+
"mcp-server-kubernetes"
|
|
15
|
+
],
|
|
16
|
+
"cwd": ".",
|
|
17
|
+
"metadata": {
|
|
18
|
+
"package": "mcp-server-kubernetes",
|
|
19
|
+
"purpose": "mcp-safety-index",
|
|
20
|
+
"riskClass": "Kubernetes control plane",
|
|
21
|
+
"failureClass": "Command and cluster mutation boundary",
|
|
22
|
+
"whyItMatters": "Kubernetes MCP servers can expose cluster mutation, pod exec, manifest apply/delete, and broad kubectl command surfaces to agents."
|
|
23
|
+
},
|
|
24
|
+
"serverName": "kubernetes",
|
|
25
|
+
"serverVersion": "3.9.3"
|
|
26
|
+
},
|
|
27
|
+
"environment": {
|
|
28
|
+
"platform": "darwin 25.5.0",
|
|
29
|
+
"nodeVersion": "v22.22.1"
|
|
30
|
+
},
|
|
31
|
+
"summary": {
|
|
32
|
+
"total": 8,
|
|
33
|
+
"pass": 4,
|
|
34
|
+
"fail": 3,
|
|
35
|
+
"partial": 1,
|
|
36
|
+
"unsupported": 0,
|
|
37
|
+
"flaky": 0,
|
|
38
|
+
"skipped": 0,
|
|
39
|
+
"gate": "fail"
|
|
40
|
+
},
|
|
41
|
+
"checks": [
|
|
42
|
+
{
|
|
43
|
+
"id": "tools",
|
|
44
|
+
"capability": "tools",
|
|
45
|
+
"status": "pass",
|
|
46
|
+
"durationMs": 1.2567500000004657,
|
|
47
|
+
"message": "Advertised capability responded with the minimal expected shape (23 items).",
|
|
48
|
+
"evidence": [
|
|
49
|
+
{
|
|
50
|
+
"endpoint": "tools/list",
|
|
51
|
+
"advertised": true,
|
|
52
|
+
"responded": true,
|
|
53
|
+
"minimalShapePresent": true,
|
|
54
|
+
"itemCount": 23,
|
|
55
|
+
"identifiers": [
|
|
56
|
+
"cleanup",
|
|
57
|
+
"kubectl_get",
|
|
58
|
+
"kubectl_describe",
|
|
59
|
+
"kubectl_apply",
|
|
60
|
+
"kubectl_delete",
|
|
61
|
+
"kubectl_create",
|
|
62
|
+
"kubectl_logs",
|
|
63
|
+
"kubectl_scale",
|
|
64
|
+
"kubectl_patch",
|
|
65
|
+
"kubectl_rollout",
|
|
66
|
+
"kubectl_context",
|
|
67
|
+
"kubectl_reconnect",
|
|
68
|
+
"explain_resource",
|
|
69
|
+
"install_helm_chart",
|
|
70
|
+
"upgrade_helm_chart",
|
|
71
|
+
"uninstall_helm_chart",
|
|
72
|
+
"node_management",
|
|
73
|
+
"port_forward",
|
|
74
|
+
"stop_port_forward",
|
|
75
|
+
"exec_in_pod",
|
|
76
|
+
"list_api_resources",
|
|
77
|
+
"kubectl_generic",
|
|
78
|
+
"ping"
|
|
79
|
+
],
|
|
80
|
+
"diagnostics": [
|
|
81
|
+
"Starting Kubernetes MCP server v3.9.3, handling commands...",
|
|
82
|
+
"Telemetry: Disabled",
|
|
83
|
+
"(node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.",
|
|
84
|
+
"(Use `node --trace-deprecation ...` to show where the warning was created)"
|
|
85
|
+
],
|
|
86
|
+
"schemas": {
|
|
87
|
+
"cleanup": {
|
|
88
|
+
"type": "object",
|
|
89
|
+
"properties": {}
|
|
90
|
+
},
|
|
91
|
+
"kubectl_get": {
|
|
92
|
+
"type": "object",
|
|
93
|
+
"properties": {
|
|
94
|
+
"resourceType": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"description": "Type of resource to get (e.g., pods, deployments, services, configmaps, events, etc.)"
|
|
97
|
+
},
|
|
98
|
+
"name": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"description": "Name of the resource (optional - if not provided, lists all resources of the specified type)"
|
|
101
|
+
},
|
|
102
|
+
"namespace": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"description": "Kubernetes namespace",
|
|
105
|
+
"default": "default"
|
|
106
|
+
},
|
|
107
|
+
"output": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"enum": [
|
|
110
|
+
"json",
|
|
111
|
+
"yaml",
|
|
112
|
+
"wide",
|
|
113
|
+
"name",
|
|
114
|
+
"custom"
|
|
115
|
+
],
|
|
116
|
+
"description": "Output format",
|
|
117
|
+
"default": "json"
|
|
118
|
+
},
|
|
119
|
+
"allNamespaces": {
|
|
120
|
+
"type": "boolean",
|
|
121
|
+
"description": "If true, list resources across all namespaces",
|
|
122
|
+
"default": false
|
|
123
|
+
},
|
|
124
|
+
"labelSelector": {
|
|
125
|
+
"type": "string",
|
|
126
|
+
"description": "Filter resources by label selector (e.g. 'app=nginx')"
|
|
127
|
+
},
|
|
128
|
+
"fieldSelector": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"description": "Filter resources by field selector (e.g. 'metadata.name=my-pod')"
|
|
131
|
+
},
|
|
132
|
+
"sortBy": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"description": "Sort events by a field (default: lastTimestamp). Only applicable for events."
|
|
135
|
+
},
|
|
136
|
+
"context": {
|
|
137
|
+
"type": "string",
|
|
138
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
139
|
+
"default": ""
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"required": [
|
|
143
|
+
"resourceType"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
"kubectl_describe": {
|
|
147
|
+
"type": "object",
|
|
148
|
+
"properties": {
|
|
149
|
+
"resourceType": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"description": "Type of resource to describe (e.g., pods, deployments, services, etc.)"
|
|
152
|
+
},
|
|
153
|
+
"name": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"description": "Name of the resource to describe"
|
|
156
|
+
},
|
|
157
|
+
"namespace": {
|
|
158
|
+
"type": "string",
|
|
159
|
+
"description": "Kubernetes namespace",
|
|
160
|
+
"default": "default"
|
|
161
|
+
},
|
|
162
|
+
"context": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
165
|
+
"default": ""
|
|
166
|
+
},
|
|
167
|
+
"allNamespaces": {
|
|
168
|
+
"type": "boolean",
|
|
169
|
+
"description": "If true, describe resources across all namespaces",
|
|
170
|
+
"default": false
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"required": [
|
|
174
|
+
"resourceType",
|
|
175
|
+
"name"
|
|
176
|
+
]
|
|
177
|
+
},
|
|
178
|
+
"kubectl_apply": {
|
|
179
|
+
"type": "object",
|
|
180
|
+
"properties": {
|
|
181
|
+
"manifest": {
|
|
182
|
+
"type": "string",
|
|
183
|
+
"description": "YAML manifest to apply"
|
|
184
|
+
},
|
|
185
|
+
"filename": {
|
|
186
|
+
"type": "string",
|
|
187
|
+
"description": "Path to a YAML file to apply (optional - use either manifest or filename)"
|
|
188
|
+
},
|
|
189
|
+
"namespace": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"description": "Kubernetes namespace",
|
|
192
|
+
"default": "default"
|
|
193
|
+
},
|
|
194
|
+
"dryRun": {
|
|
195
|
+
"type": "boolean",
|
|
196
|
+
"description": "If true, only validate the resource, don't actually execute the operation",
|
|
197
|
+
"default": false
|
|
198
|
+
},
|
|
199
|
+
"force": {
|
|
200
|
+
"type": "boolean",
|
|
201
|
+
"description": "If true, immediately remove resources from API and bypass graceful deletion",
|
|
202
|
+
"default": false
|
|
203
|
+
},
|
|
204
|
+
"context": {
|
|
205
|
+
"type": "string",
|
|
206
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
207
|
+
"default": ""
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"required": []
|
|
211
|
+
},
|
|
212
|
+
"kubectl_delete": {
|
|
213
|
+
"type": "object",
|
|
214
|
+
"properties": {
|
|
215
|
+
"resourceType": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"description": "Type of resource to delete (e.g., pods, deployments, services, etc.)"
|
|
218
|
+
},
|
|
219
|
+
"name": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"description": "Name of the resource to delete"
|
|
222
|
+
},
|
|
223
|
+
"namespace": {
|
|
224
|
+
"type": "string",
|
|
225
|
+
"description": "Kubernetes namespace",
|
|
226
|
+
"default": "default"
|
|
227
|
+
},
|
|
228
|
+
"labelSelector": {
|
|
229
|
+
"type": "string",
|
|
230
|
+
"description": "Delete resources matching this label selector (e.g. 'app=nginx')"
|
|
231
|
+
},
|
|
232
|
+
"manifest": {
|
|
233
|
+
"type": "string",
|
|
234
|
+
"description": "YAML manifest defining resources to delete (optional)"
|
|
235
|
+
},
|
|
236
|
+
"filename": {
|
|
237
|
+
"type": "string",
|
|
238
|
+
"description": "Path to a YAML file to delete resources from (optional)"
|
|
239
|
+
},
|
|
240
|
+
"allNamespaces": {
|
|
241
|
+
"type": "boolean",
|
|
242
|
+
"description": "If true, delete resources across all namespaces",
|
|
243
|
+
"default": false
|
|
244
|
+
},
|
|
245
|
+
"force": {
|
|
246
|
+
"type": "boolean",
|
|
247
|
+
"description": "If true, immediately remove resources from API and bypass graceful deletion",
|
|
248
|
+
"default": false
|
|
249
|
+
},
|
|
250
|
+
"gracePeriodSeconds": {
|
|
251
|
+
"type": "number",
|
|
252
|
+
"description": "Period of time in seconds given to the resource to terminate gracefully"
|
|
253
|
+
},
|
|
254
|
+
"context": {
|
|
255
|
+
"type": "string",
|
|
256
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
257
|
+
"default": ""
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"required": []
|
|
261
|
+
},
|
|
262
|
+
"kubectl_create": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"properties": {
|
|
265
|
+
"dryRun": {
|
|
266
|
+
"type": "boolean",
|
|
267
|
+
"description": "If true, only validate the resource, don't actually execute the operation",
|
|
268
|
+
"default": false
|
|
269
|
+
},
|
|
270
|
+
"output": {
|
|
271
|
+
"type": "string",
|
|
272
|
+
"enum": [
|
|
273
|
+
"json",
|
|
274
|
+
"yaml",
|
|
275
|
+
"name",
|
|
276
|
+
"go-template",
|
|
277
|
+
"go-template-file",
|
|
278
|
+
"template",
|
|
279
|
+
"templatefile",
|
|
280
|
+
"jsonpath",
|
|
281
|
+
"jsonpath-as-json",
|
|
282
|
+
"jsonpath-file"
|
|
283
|
+
],
|
|
284
|
+
"description": "Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file",
|
|
285
|
+
"default": "yaml"
|
|
286
|
+
},
|
|
287
|
+
"validate": {
|
|
288
|
+
"type": "boolean",
|
|
289
|
+
"description": "If true, validate resource schema against server schema",
|
|
290
|
+
"default": true
|
|
291
|
+
},
|
|
292
|
+
"manifest": {
|
|
293
|
+
"type": "string",
|
|
294
|
+
"description": "YAML manifest to create resources from"
|
|
295
|
+
},
|
|
296
|
+
"filename": {
|
|
297
|
+
"type": "string",
|
|
298
|
+
"description": "Path to a YAML file to create resources from"
|
|
299
|
+
},
|
|
300
|
+
"resourceType": {
|
|
301
|
+
"type": "string",
|
|
302
|
+
"description": "Type of resource to create (namespace, configmap, deployment, service, etc.)"
|
|
303
|
+
},
|
|
304
|
+
"name": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"description": "Name of the resource to create"
|
|
307
|
+
},
|
|
308
|
+
"namespace": {
|
|
309
|
+
"type": "string",
|
|
310
|
+
"description": "Kubernetes namespace",
|
|
311
|
+
"default": "default"
|
|
312
|
+
},
|
|
313
|
+
"fromLiteral": {
|
|
314
|
+
"type": "array",
|
|
315
|
+
"items": {
|
|
316
|
+
"type": "string"
|
|
317
|
+
},
|
|
318
|
+
"description": "Key-value pair for creating configmap (e.g. [\"key1=value1\", \"key2=value2\"])"
|
|
319
|
+
},
|
|
320
|
+
"fromFile": {
|
|
321
|
+
"type": "array",
|
|
322
|
+
"items": {
|
|
323
|
+
"type": "string"
|
|
324
|
+
},
|
|
325
|
+
"description": "Path to file for creating configmap (e.g. [\"key1=/path/to/file1\", \"key2=/path/to/file2\"])"
|
|
326
|
+
},
|
|
327
|
+
"secretType": {
|
|
328
|
+
"type": "string",
|
|
329
|
+
"enum": [
|
|
330
|
+
"generic",
|
|
331
|
+
"docker-registry",
|
|
332
|
+
"tls"
|
|
333
|
+
],
|
|
334
|
+
"description": "Type of secret to create (generic, docker-registry, tls)"
|
|
335
|
+
},
|
|
336
|
+
"serviceType": {
|
|
337
|
+
"type": "string",
|
|
338
|
+
"enum": [
|
|
339
|
+
"clusterip",
|
|
340
|
+
"nodeport",
|
|
341
|
+
"loadbalancer",
|
|
342
|
+
"externalname"
|
|
343
|
+
],
|
|
344
|
+
"description": "Type of service to create (clusterip, nodeport, loadbalancer, externalname)"
|
|
345
|
+
},
|
|
346
|
+
"tcpPort": {
|
|
347
|
+
"type": "array",
|
|
348
|
+
"items": {
|
|
349
|
+
"type": "string"
|
|
350
|
+
},
|
|
351
|
+
"description": "Port pairs for tcp service (e.g. [\"80:8080\", \"443:8443\"])"
|
|
352
|
+
},
|
|
353
|
+
"image": {
|
|
354
|
+
"type": "string",
|
|
355
|
+
"description": "Image to use for the containers in the deployment"
|
|
356
|
+
},
|
|
357
|
+
"replicas": {
|
|
358
|
+
"type": "number",
|
|
359
|
+
"description": "Number of replicas to create for the deployment",
|
|
360
|
+
"default": 1
|
|
361
|
+
},
|
|
362
|
+
"port": {
|
|
363
|
+
"type": "number",
|
|
364
|
+
"description": "Port that the container exposes"
|
|
365
|
+
},
|
|
366
|
+
"schedule": {
|
|
367
|
+
"type": "string",
|
|
368
|
+
"description": "Cron schedule expression for the CronJob (e.g. \"*/5 * * * *\")"
|
|
369
|
+
},
|
|
370
|
+
"suspend": {
|
|
371
|
+
"type": "boolean",
|
|
372
|
+
"description": "Whether to suspend the CronJob",
|
|
373
|
+
"default": false
|
|
374
|
+
},
|
|
375
|
+
"command": {
|
|
376
|
+
"type": "array",
|
|
377
|
+
"items": {
|
|
378
|
+
"type": "string"
|
|
379
|
+
},
|
|
380
|
+
"description": "Command to run in the container"
|
|
381
|
+
},
|
|
382
|
+
"labels": {
|
|
383
|
+
"type": "array",
|
|
384
|
+
"items": {
|
|
385
|
+
"type": "string"
|
|
386
|
+
},
|
|
387
|
+
"description": "Labels to apply to the resource (e.g. [\"key1=value1\", \"key2=value2\"])"
|
|
388
|
+
},
|
|
389
|
+
"annotations": {
|
|
390
|
+
"type": "array",
|
|
391
|
+
"items": {
|
|
392
|
+
"type": "string"
|
|
393
|
+
},
|
|
394
|
+
"description": "Annotations to apply to the resource (e.g. [\"key1=value1\", \"key2=value2\"])"
|
|
395
|
+
},
|
|
396
|
+
"context": {
|
|
397
|
+
"type": "string",
|
|
398
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
399
|
+
"default": ""
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
"required": []
|
|
403
|
+
},
|
|
404
|
+
"kubectl_logs": {
|
|
405
|
+
"type": "object",
|
|
406
|
+
"properties": {
|
|
407
|
+
"resourceType": {
|
|
408
|
+
"type": "string",
|
|
409
|
+
"enum": [
|
|
410
|
+
"pod",
|
|
411
|
+
"deployment",
|
|
412
|
+
"job",
|
|
413
|
+
"cronjob"
|
|
414
|
+
],
|
|
415
|
+
"description": "Type of resource to get logs from"
|
|
416
|
+
},
|
|
417
|
+
"name": {
|
|
418
|
+
"type": "string",
|
|
419
|
+
"description": "Name of the resource"
|
|
420
|
+
},
|
|
421
|
+
"namespace": {
|
|
422
|
+
"type": "string",
|
|
423
|
+
"description": "Kubernetes namespace",
|
|
424
|
+
"default": "default"
|
|
425
|
+
},
|
|
426
|
+
"container": {
|
|
427
|
+
"type": "string",
|
|
428
|
+
"description": "Container name (required when pod has multiple containers)"
|
|
429
|
+
},
|
|
430
|
+
"tail": {
|
|
431
|
+
"type": "number",
|
|
432
|
+
"description": "Number of lines to show from end of logs"
|
|
433
|
+
},
|
|
434
|
+
"since": {
|
|
435
|
+
"type": "string",
|
|
436
|
+
"description": "Show logs since relative time (e.g. '5s', '2m', '3h')"
|
|
437
|
+
},
|
|
438
|
+
"sinceTime": {
|
|
439
|
+
"type": "string",
|
|
440
|
+
"description": "Show logs since absolute time (RFC3339)"
|
|
441
|
+
},
|
|
442
|
+
"timestamps": {
|
|
443
|
+
"type": "boolean",
|
|
444
|
+
"description": "Include timestamps in logs",
|
|
445
|
+
"default": false
|
|
446
|
+
},
|
|
447
|
+
"previous": {
|
|
448
|
+
"type": "boolean",
|
|
449
|
+
"description": "Include logs from previously terminated containers",
|
|
450
|
+
"default": false
|
|
451
|
+
},
|
|
452
|
+
"follow": {
|
|
453
|
+
"type": "boolean",
|
|
454
|
+
"description": "Follow logs output (not recommended, may cause timeouts)",
|
|
455
|
+
"default": false
|
|
456
|
+
},
|
|
457
|
+
"labelSelector": {
|
|
458
|
+
"type": "string",
|
|
459
|
+
"description": "Filter resources by label selector"
|
|
460
|
+
},
|
|
461
|
+
"context": {
|
|
462
|
+
"type": "string",
|
|
463
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
464
|
+
"default": ""
|
|
465
|
+
}
|
|
466
|
+
},
|
|
467
|
+
"required": [
|
|
468
|
+
"resourceType",
|
|
469
|
+
"name",
|
|
470
|
+
"namespace"
|
|
471
|
+
]
|
|
472
|
+
},
|
|
473
|
+
"kubectl_scale": {
|
|
474
|
+
"type": "object",
|
|
475
|
+
"properties": {
|
|
476
|
+
"name": {
|
|
477
|
+
"type": "string",
|
|
478
|
+
"description": "Name of the deployment to scale"
|
|
479
|
+
},
|
|
480
|
+
"namespace": {
|
|
481
|
+
"type": "string",
|
|
482
|
+
"description": "Kubernetes namespace",
|
|
483
|
+
"default": "default"
|
|
484
|
+
},
|
|
485
|
+
"replicas": {
|
|
486
|
+
"type": "number",
|
|
487
|
+
"description": "Number of replicas to scale to"
|
|
488
|
+
},
|
|
489
|
+
"resourceType": {
|
|
490
|
+
"type": "string",
|
|
491
|
+
"description": "Resource type to scale (deployment, replicaset, statefulset)",
|
|
492
|
+
"default": "deployment"
|
|
493
|
+
},
|
|
494
|
+
"context": {
|
|
495
|
+
"type": "string",
|
|
496
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
497
|
+
"default": ""
|
|
498
|
+
}
|
|
499
|
+
},
|
|
500
|
+
"required": [
|
|
501
|
+
"name",
|
|
502
|
+
"replicas"
|
|
503
|
+
]
|
|
504
|
+
},
|
|
505
|
+
"kubectl_patch": {
|
|
506
|
+
"type": "object",
|
|
507
|
+
"properties": {
|
|
508
|
+
"resourceType": {
|
|
509
|
+
"type": "string",
|
|
510
|
+
"description": "Type of resource to patch (e.g., pods, deployments, services)"
|
|
511
|
+
},
|
|
512
|
+
"name": {
|
|
513
|
+
"type": "string",
|
|
514
|
+
"description": "Name of the resource to patch"
|
|
515
|
+
},
|
|
516
|
+
"namespace": {
|
|
517
|
+
"type": "string",
|
|
518
|
+
"description": "Kubernetes namespace",
|
|
519
|
+
"default": "default"
|
|
520
|
+
},
|
|
521
|
+
"patchType": {
|
|
522
|
+
"type": "string",
|
|
523
|
+
"description": "Type of patch to apply",
|
|
524
|
+
"enum": [
|
|
525
|
+
"strategic",
|
|
526
|
+
"merge",
|
|
527
|
+
"json"
|
|
528
|
+
],
|
|
529
|
+
"default": "strategic"
|
|
530
|
+
},
|
|
531
|
+
"patchData": {
|
|
532
|
+
"type": "object",
|
|
533
|
+
"description": "Patch data as a JSON object"
|
|
534
|
+
},
|
|
535
|
+
"patchFile": {
|
|
536
|
+
"type": "string",
|
|
537
|
+
"description": "Path to a file containing the patch data (alternative to patchData)"
|
|
538
|
+
},
|
|
539
|
+
"dryRun": {
|
|
540
|
+
"type": "boolean",
|
|
541
|
+
"description": "If true, only validate the resource, don't actually execute the operation",
|
|
542
|
+
"default": false
|
|
543
|
+
},
|
|
544
|
+
"context": {
|
|
545
|
+
"type": "string",
|
|
546
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
547
|
+
"default": ""
|
|
548
|
+
}
|
|
549
|
+
},
|
|
550
|
+
"required": [
|
|
551
|
+
"resourceType",
|
|
552
|
+
"name"
|
|
553
|
+
]
|
|
554
|
+
},
|
|
555
|
+
"kubectl_rollout": {
|
|
556
|
+
"type": "object",
|
|
557
|
+
"properties": {
|
|
558
|
+
"subCommand": {
|
|
559
|
+
"type": "string",
|
|
560
|
+
"description": "Rollout subcommand to execute",
|
|
561
|
+
"enum": [
|
|
562
|
+
"history",
|
|
563
|
+
"pause",
|
|
564
|
+
"restart",
|
|
565
|
+
"resume",
|
|
566
|
+
"status",
|
|
567
|
+
"undo"
|
|
568
|
+
],
|
|
569
|
+
"default": "status"
|
|
570
|
+
},
|
|
571
|
+
"resourceType": {
|
|
572
|
+
"type": "string",
|
|
573
|
+
"description": "Type of resource to manage rollout for",
|
|
574
|
+
"enum": [
|
|
575
|
+
"deployment",
|
|
576
|
+
"daemonset",
|
|
577
|
+
"statefulset"
|
|
578
|
+
],
|
|
579
|
+
"default": "deployment"
|
|
580
|
+
},
|
|
581
|
+
"name": {
|
|
582
|
+
"type": "string",
|
|
583
|
+
"description": "Name of the resource"
|
|
584
|
+
},
|
|
585
|
+
"namespace": {
|
|
586
|
+
"type": "string",
|
|
587
|
+
"description": "Kubernetes namespace",
|
|
588
|
+
"default": "default"
|
|
589
|
+
},
|
|
590
|
+
"revision": {
|
|
591
|
+
"type": "number",
|
|
592
|
+
"description": "Revision to rollback to (for undo subcommand)"
|
|
593
|
+
},
|
|
594
|
+
"toRevision": {
|
|
595
|
+
"type": "number",
|
|
596
|
+
"description": "Revision to roll back to (for history subcommand)"
|
|
597
|
+
},
|
|
598
|
+
"timeout": {
|
|
599
|
+
"type": "string",
|
|
600
|
+
"description": "The length of time to wait before giving up (e.g., '30s', '1m', '2m30s')"
|
|
601
|
+
},
|
|
602
|
+
"watch": {
|
|
603
|
+
"type": "boolean",
|
|
604
|
+
"description": "Watch the rollout status in real-time until completion",
|
|
605
|
+
"default": false
|
|
606
|
+
},
|
|
607
|
+
"context": {
|
|
608
|
+
"type": "string",
|
|
609
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
610
|
+
"default": ""
|
|
611
|
+
}
|
|
612
|
+
},
|
|
613
|
+
"required": [
|
|
614
|
+
"subCommand",
|
|
615
|
+
"resourceType",
|
|
616
|
+
"name",
|
|
617
|
+
"namespace"
|
|
618
|
+
]
|
|
619
|
+
},
|
|
620
|
+
"kubectl_context": {
|
|
621
|
+
"type": "object",
|
|
622
|
+
"properties": {
|
|
623
|
+
"operation": {
|
|
624
|
+
"type": "string",
|
|
625
|
+
"enum": [
|
|
626
|
+
"list",
|
|
627
|
+
"get",
|
|
628
|
+
"set"
|
|
629
|
+
],
|
|
630
|
+
"description": "Operation to perform: list contexts, get current context, or set current context",
|
|
631
|
+
"default": "list"
|
|
632
|
+
},
|
|
633
|
+
"name": {
|
|
634
|
+
"type": "string",
|
|
635
|
+
"description": "Name of the context to set as current (required for set operation)"
|
|
636
|
+
},
|
|
637
|
+
"showCurrent": {
|
|
638
|
+
"type": "boolean",
|
|
639
|
+
"description": "When listing contexts, highlight which one is currently active",
|
|
640
|
+
"default": true
|
|
641
|
+
},
|
|
642
|
+
"detailed": {
|
|
643
|
+
"type": "boolean",
|
|
644
|
+
"description": "Include detailed information about the context",
|
|
645
|
+
"default": false
|
|
646
|
+
},
|
|
647
|
+
"output": {
|
|
648
|
+
"type": "string",
|
|
649
|
+
"enum": [
|
|
650
|
+
"json",
|
|
651
|
+
"yaml",
|
|
652
|
+
"name",
|
|
653
|
+
"custom"
|
|
654
|
+
],
|
|
655
|
+
"description": "Output format",
|
|
656
|
+
"default": "json"
|
|
657
|
+
}
|
|
658
|
+
},
|
|
659
|
+
"required": [
|
|
660
|
+
"operation"
|
|
661
|
+
]
|
|
662
|
+
},
|
|
663
|
+
"kubectl_reconnect": {
|
|
664
|
+
"type": "object",
|
|
665
|
+
"properties": {},
|
|
666
|
+
"required": []
|
|
667
|
+
},
|
|
668
|
+
"explain_resource": {
|
|
669
|
+
"type": "object",
|
|
670
|
+
"properties": {
|
|
671
|
+
"resource": {
|
|
672
|
+
"type": "string",
|
|
673
|
+
"description": "Resource name or field path (e.g. 'pods' or 'pods.spec.containers')"
|
|
674
|
+
},
|
|
675
|
+
"apiVersion": {
|
|
676
|
+
"type": "string",
|
|
677
|
+
"description": "API version to use (e.g. 'apps/v1')"
|
|
678
|
+
},
|
|
679
|
+
"recursive": {
|
|
680
|
+
"type": "boolean",
|
|
681
|
+
"description": "Print the fields of fields recursively",
|
|
682
|
+
"default": false
|
|
683
|
+
},
|
|
684
|
+
"context": {
|
|
685
|
+
"type": "string",
|
|
686
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
687
|
+
"default": ""
|
|
688
|
+
},
|
|
689
|
+
"output": {
|
|
690
|
+
"type": "string",
|
|
691
|
+
"description": "Output format (plaintext or plaintext-openapiv2)",
|
|
692
|
+
"enum": [
|
|
693
|
+
"plaintext",
|
|
694
|
+
"plaintext-openapiv2"
|
|
695
|
+
],
|
|
696
|
+
"default": "plaintext"
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
"required": [
|
|
700
|
+
"resource"
|
|
701
|
+
]
|
|
702
|
+
},
|
|
703
|
+
"install_helm_chart": {
|
|
704
|
+
"type": "object",
|
|
705
|
+
"properties": {
|
|
706
|
+
"name": {
|
|
707
|
+
"type": "string",
|
|
708
|
+
"description": "Name of the Helm release"
|
|
709
|
+
},
|
|
710
|
+
"chart": {
|
|
711
|
+
"type": "string",
|
|
712
|
+
"description": "Chart name (e.g., 'nginx') or path to chart directory"
|
|
713
|
+
},
|
|
714
|
+
"namespace": {
|
|
715
|
+
"type": "string",
|
|
716
|
+
"description": "Kubernetes namespace",
|
|
717
|
+
"default": "default"
|
|
718
|
+
},
|
|
719
|
+
"context": {
|
|
720
|
+
"type": "string",
|
|
721
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
722
|
+
"default": ""
|
|
723
|
+
},
|
|
724
|
+
"repo": {
|
|
725
|
+
"type": "string",
|
|
726
|
+
"description": "Helm repository URL (optional if using local chart path)"
|
|
727
|
+
},
|
|
728
|
+
"values": {
|
|
729
|
+
"type": "object",
|
|
730
|
+
"description": "Custom values to override chart defaults"
|
|
731
|
+
},
|
|
732
|
+
"valuesFile": {
|
|
733
|
+
"type": "string",
|
|
734
|
+
"description": "Path to values file (alternative to values object)"
|
|
735
|
+
},
|
|
736
|
+
"useTemplate": {
|
|
737
|
+
"type": "boolean",
|
|
738
|
+
"description": "Use helm template + kubectl apply instead of helm install (bypasses auth issues)",
|
|
739
|
+
"default": false
|
|
740
|
+
},
|
|
741
|
+
"createNamespace": {
|
|
742
|
+
"type": "boolean",
|
|
743
|
+
"description": "Create namespace if it doesn't exist",
|
|
744
|
+
"default": true
|
|
745
|
+
}
|
|
746
|
+
},
|
|
747
|
+
"required": [
|
|
748
|
+
"name",
|
|
749
|
+
"chart",
|
|
750
|
+
"namespace"
|
|
751
|
+
]
|
|
752
|
+
},
|
|
753
|
+
"upgrade_helm_chart": {
|
|
754
|
+
"type": "object",
|
|
755
|
+
"properties": {
|
|
756
|
+
"name": {
|
|
757
|
+
"type": "string",
|
|
758
|
+
"description": "Name of the Helm release to upgrade"
|
|
759
|
+
},
|
|
760
|
+
"chart": {
|
|
761
|
+
"type": "string",
|
|
762
|
+
"description": "Chart name or path to chart directory"
|
|
763
|
+
},
|
|
764
|
+
"namespace": {
|
|
765
|
+
"type": "string",
|
|
766
|
+
"description": "Kubernetes namespace",
|
|
767
|
+
"default": "default"
|
|
768
|
+
},
|
|
769
|
+
"context": {
|
|
770
|
+
"type": "string",
|
|
771
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
772
|
+
"default": ""
|
|
773
|
+
},
|
|
774
|
+
"repo": {
|
|
775
|
+
"type": "string",
|
|
776
|
+
"description": "Helm repository URL (optional if using local chart path)"
|
|
777
|
+
},
|
|
778
|
+
"values": {
|
|
779
|
+
"type": "object",
|
|
780
|
+
"description": "Custom values to override chart defaults"
|
|
781
|
+
},
|
|
782
|
+
"valuesFile": {
|
|
783
|
+
"type": "string",
|
|
784
|
+
"description": "Path to values file (alternative to values object)"
|
|
785
|
+
}
|
|
786
|
+
},
|
|
787
|
+
"required": [
|
|
788
|
+
"name",
|
|
789
|
+
"chart",
|
|
790
|
+
"namespace"
|
|
791
|
+
]
|
|
792
|
+
},
|
|
793
|
+
"uninstall_helm_chart": {
|
|
794
|
+
"type": "object",
|
|
795
|
+
"properties": {
|
|
796
|
+
"name": {
|
|
797
|
+
"type": "string",
|
|
798
|
+
"description": "Name of the Helm release to uninstall"
|
|
799
|
+
},
|
|
800
|
+
"namespace": {
|
|
801
|
+
"type": "string",
|
|
802
|
+
"description": "Kubernetes namespace",
|
|
803
|
+
"default": "default"
|
|
804
|
+
},
|
|
805
|
+
"context": {
|
|
806
|
+
"type": "string",
|
|
807
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
808
|
+
"default": ""
|
|
809
|
+
}
|
|
810
|
+
},
|
|
811
|
+
"required": [
|
|
812
|
+
"name",
|
|
813
|
+
"namespace"
|
|
814
|
+
]
|
|
815
|
+
},
|
|
816
|
+
"node_management": {
|
|
817
|
+
"type": "object",
|
|
818
|
+
"properties": {
|
|
819
|
+
"operation": {
|
|
820
|
+
"type": "string",
|
|
821
|
+
"description": "Node operation to perform",
|
|
822
|
+
"enum": [
|
|
823
|
+
"cordon",
|
|
824
|
+
"drain",
|
|
825
|
+
"uncordon"
|
|
826
|
+
]
|
|
827
|
+
},
|
|
828
|
+
"nodeName": {
|
|
829
|
+
"type": "string",
|
|
830
|
+
"description": "Name of the node to operate on (required for cordon, drain, uncordon)"
|
|
831
|
+
},
|
|
832
|
+
"force": {
|
|
833
|
+
"type": "boolean",
|
|
834
|
+
"description": "Force the operation even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (for drain operation)",
|
|
835
|
+
"default": false
|
|
836
|
+
},
|
|
837
|
+
"gracePeriod": {
|
|
838
|
+
"type": "number",
|
|
839
|
+
"description": "Period of time in seconds given to each pod to terminate gracefully (for drain operation). If set to -1, uses the kubectl default grace period.",
|
|
840
|
+
"default": -1
|
|
841
|
+
},
|
|
842
|
+
"deleteLocalData": {
|
|
843
|
+
"type": "boolean",
|
|
844
|
+
"description": "Delete local data even if emptyDir volumes are used (for drain operation)",
|
|
845
|
+
"default": false
|
|
846
|
+
},
|
|
847
|
+
"ignoreDaemonsets": {
|
|
848
|
+
"type": "boolean",
|
|
849
|
+
"description": "Ignore DaemonSet-managed pods (for drain operation)",
|
|
850
|
+
"default": true
|
|
851
|
+
},
|
|
852
|
+
"timeout": {
|
|
853
|
+
"type": "string",
|
|
854
|
+
"description": "The length of time to wait before giving up (for drain operation, e.g., '5m', '1h')",
|
|
855
|
+
"default": "0"
|
|
856
|
+
},
|
|
857
|
+
"dryRun": {
|
|
858
|
+
"type": "boolean",
|
|
859
|
+
"description": "Show what would be done without actually doing it (for drain operation)",
|
|
860
|
+
"default": false
|
|
861
|
+
},
|
|
862
|
+
"confirmDrain": {
|
|
863
|
+
"type": "boolean",
|
|
864
|
+
"description": "Explicit confirmation to drain the node (required for drain operation)",
|
|
865
|
+
"default": false
|
|
866
|
+
}
|
|
867
|
+
},
|
|
868
|
+
"required": [
|
|
869
|
+
"operation"
|
|
870
|
+
]
|
|
871
|
+
},
|
|
872
|
+
"port_forward": {
|
|
873
|
+
"type": "object",
|
|
874
|
+
"properties": {
|
|
875
|
+
"resourceType": {
|
|
876
|
+
"type": "string"
|
|
877
|
+
},
|
|
878
|
+
"resourceName": {
|
|
879
|
+
"type": "string"
|
|
880
|
+
},
|
|
881
|
+
"localPort": {
|
|
882
|
+
"type": "number"
|
|
883
|
+
},
|
|
884
|
+
"targetPort": {
|
|
885
|
+
"type": "number"
|
|
886
|
+
},
|
|
887
|
+
"namespace": {
|
|
888
|
+
"type": "string"
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
"required": [
|
|
892
|
+
"resourceType",
|
|
893
|
+
"resourceName",
|
|
894
|
+
"localPort",
|
|
895
|
+
"targetPort"
|
|
896
|
+
]
|
|
897
|
+
},
|
|
898
|
+
"stop_port_forward": {
|
|
899
|
+
"type": "object",
|
|
900
|
+
"properties": {
|
|
901
|
+
"id": {
|
|
902
|
+
"type": "string"
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
"required": [
|
|
906
|
+
"id"
|
|
907
|
+
]
|
|
908
|
+
},
|
|
909
|
+
"exec_in_pod": {
|
|
910
|
+
"type": "object",
|
|
911
|
+
"properties": {
|
|
912
|
+
"name": {
|
|
913
|
+
"type": "string",
|
|
914
|
+
"description": "Name of the pod to execute the command in"
|
|
915
|
+
},
|
|
916
|
+
"namespace": {
|
|
917
|
+
"type": "string",
|
|
918
|
+
"description": "Kubernetes namespace",
|
|
919
|
+
"default": "default"
|
|
920
|
+
},
|
|
921
|
+
"command": {
|
|
922
|
+
"type": "array",
|
|
923
|
+
"items": {
|
|
924
|
+
"type": "string"
|
|
925
|
+
},
|
|
926
|
+
"description": "Command to execute as an array of strings (e.g. [\"ls\", \"-la\", \"/app\"]). First element is the executable, remaining are arguments. Shell operators like pipes, redirects, or command chaining are not supported - use explicit array format for security."
|
|
927
|
+
},
|
|
928
|
+
"container": {
|
|
929
|
+
"type": "string",
|
|
930
|
+
"description": "Container name (required when pod has multiple containers)"
|
|
931
|
+
},
|
|
932
|
+
"timeout": {
|
|
933
|
+
"type": "number",
|
|
934
|
+
"description": "Timeout for command - 60000 milliseconds if not specified"
|
|
935
|
+
},
|
|
936
|
+
"context": {
|
|
937
|
+
"type": "string",
|
|
938
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
939
|
+
"default": ""
|
|
940
|
+
}
|
|
941
|
+
},
|
|
942
|
+
"required": [
|
|
943
|
+
"name",
|
|
944
|
+
"command"
|
|
945
|
+
]
|
|
946
|
+
},
|
|
947
|
+
"list_api_resources": {
|
|
948
|
+
"type": "object",
|
|
949
|
+
"properties": {
|
|
950
|
+
"apiGroup": {
|
|
951
|
+
"type": "string",
|
|
952
|
+
"description": "API group to filter by"
|
|
953
|
+
},
|
|
954
|
+
"namespaced": {
|
|
955
|
+
"type": "boolean",
|
|
956
|
+
"description": "If true, only show namespaced resources"
|
|
957
|
+
},
|
|
958
|
+
"context": {
|
|
959
|
+
"type": "string",
|
|
960
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
961
|
+
"default": ""
|
|
962
|
+
},
|
|
963
|
+
"verbs": {
|
|
964
|
+
"type": "array",
|
|
965
|
+
"items": {
|
|
966
|
+
"type": "string"
|
|
967
|
+
},
|
|
968
|
+
"description": "List of verbs to filter by"
|
|
969
|
+
},
|
|
970
|
+
"output": {
|
|
971
|
+
"type": "string",
|
|
972
|
+
"description": "Output format (wide, name, or no-headers)",
|
|
973
|
+
"enum": [
|
|
974
|
+
"wide",
|
|
975
|
+
"name",
|
|
976
|
+
"no-headers"
|
|
977
|
+
],
|
|
978
|
+
"default": "wide"
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
},
|
|
982
|
+
"kubectl_generic": {
|
|
983
|
+
"type": "object",
|
|
984
|
+
"properties": {
|
|
985
|
+
"command": {
|
|
986
|
+
"type": "string",
|
|
987
|
+
"description": "The kubectl command to execute (e.g. patch, rollout, top)"
|
|
988
|
+
},
|
|
989
|
+
"subCommand": {
|
|
990
|
+
"type": "string",
|
|
991
|
+
"description": "Subcommand if applicable (e.g. 'history' for rollout)"
|
|
992
|
+
},
|
|
993
|
+
"resourceType": {
|
|
994
|
+
"type": "string",
|
|
995
|
+
"description": "Resource type (e.g. pod, deployment)"
|
|
996
|
+
},
|
|
997
|
+
"name": {
|
|
998
|
+
"type": "string",
|
|
999
|
+
"description": "Resource name"
|
|
1000
|
+
},
|
|
1001
|
+
"namespace": {
|
|
1002
|
+
"type": "string",
|
|
1003
|
+
"description": "Kubernetes namespace",
|
|
1004
|
+
"default": "default"
|
|
1005
|
+
},
|
|
1006
|
+
"allNamespaces": {
|
|
1007
|
+
"type": "boolean",
|
|
1008
|
+
"description": "If true, run the command across all namespaces",
|
|
1009
|
+
"default": false
|
|
1010
|
+
},
|
|
1011
|
+
"outputFormat": {
|
|
1012
|
+
"type": "string",
|
|
1013
|
+
"description": "Output format (e.g. json, yaml, wide)",
|
|
1014
|
+
"enum": [
|
|
1015
|
+
"json",
|
|
1016
|
+
"yaml",
|
|
1017
|
+
"wide",
|
|
1018
|
+
"name",
|
|
1019
|
+
"custom"
|
|
1020
|
+
]
|
|
1021
|
+
},
|
|
1022
|
+
"flags": {
|
|
1023
|
+
"type": "object",
|
|
1024
|
+
"description": "Command flags as key-value pairs",
|
|
1025
|
+
"additionalProperties": true
|
|
1026
|
+
},
|
|
1027
|
+
"args": {
|
|
1028
|
+
"type": "array",
|
|
1029
|
+
"items": {
|
|
1030
|
+
"type": "string"
|
|
1031
|
+
},
|
|
1032
|
+
"description": "Additional command arguments"
|
|
1033
|
+
},
|
|
1034
|
+
"context": {
|
|
1035
|
+
"type": "string",
|
|
1036
|
+
"description": "Kubeconfig Context to use for the command (optional - defaults to null)",
|
|
1037
|
+
"default": ""
|
|
1038
|
+
}
|
|
1039
|
+
},
|
|
1040
|
+
"required": [
|
|
1041
|
+
"command"
|
|
1042
|
+
]
|
|
1043
|
+
},
|
|
1044
|
+
"ping": {
|
|
1045
|
+
"type": "object",
|
|
1046
|
+
"properties": {},
|
|
1047
|
+
"required": []
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
]
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
"id": "prompts",
|
|
1055
|
+
"capability": "prompts",
|
|
1056
|
+
"status": "pass",
|
|
1057
|
+
"durationMs": 0.29662500000085856,
|
|
1058
|
+
"message": "Advertised capability responded with the minimal expected shape (1 item).",
|
|
1059
|
+
"evidence": [
|
|
1060
|
+
{
|
|
1061
|
+
"endpoint": "prompts/list",
|
|
1062
|
+
"advertised": true,
|
|
1063
|
+
"responded": true,
|
|
1064
|
+
"minimalShapePresent": true,
|
|
1065
|
+
"itemCount": 1,
|
|
1066
|
+
"identifiers": [
|
|
1067
|
+
"k8s-diagnose"
|
|
1068
|
+
],
|
|
1069
|
+
"diagnostics": [
|
|
1070
|
+
"Starting Kubernetes MCP server v3.9.3, handling commands...",
|
|
1071
|
+
"Telemetry: Disabled",
|
|
1072
|
+
"(node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.",
|
|
1073
|
+
"(Use `node --trace-deprecation ...` to show where the warning was created)"
|
|
1074
|
+
]
|
|
1075
|
+
}
|
|
1076
|
+
]
|
|
1077
|
+
},
|
|
1078
|
+
{
|
|
1079
|
+
"id": "resources",
|
|
1080
|
+
"capability": "resources",
|
|
1081
|
+
"status": "pass",
|
|
1082
|
+
"durationMs": 0.38045899999997346,
|
|
1083
|
+
"message": "Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported.",
|
|
1084
|
+
"evidence": [
|
|
1085
|
+
{
|
|
1086
|
+
"endpoint": "resources/list",
|
|
1087
|
+
"advertised": true,
|
|
1088
|
+
"responded": true,
|
|
1089
|
+
"minimalShapePresent": true,
|
|
1090
|
+
"itemCount": 5,
|
|
1091
|
+
"identifiers": [
|
|
1092
|
+
"k8s://default/pods",
|
|
1093
|
+
"k8s://default/deployments",
|
|
1094
|
+
"k8s://default/services",
|
|
1095
|
+
"k8s://namespaces",
|
|
1096
|
+
"k8s://nodes"
|
|
1097
|
+
],
|
|
1098
|
+
"diagnostics": [
|
|
1099
|
+
"Starting Kubernetes MCP server v3.9.3, handling commands...",
|
|
1100
|
+
"Telemetry: Disabled",
|
|
1101
|
+
"(node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.",
|
|
1102
|
+
"(Use `node --trace-deprecation ...` to show where the warning was created)"
|
|
1103
|
+
]
|
|
1104
|
+
},
|
|
1105
|
+
{
|
|
1106
|
+
"endpoint": "resources/templates/list",
|
|
1107
|
+
"advertised": true,
|
|
1108
|
+
"responded": false,
|
|
1109
|
+
"minimalShapePresent": false,
|
|
1110
|
+
"diagnostics": [
|
|
1111
|
+
"MCP error -32601: Method not found",
|
|
1112
|
+
"Starting Kubernetes MCP server v3.9.3, handling commands...",
|
|
1113
|
+
"Telemetry: Disabled",
|
|
1114
|
+
"(node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.",
|
|
1115
|
+
"(Use `node --trace-deprecation ...` to show where the warning was created)"
|
|
1116
|
+
]
|
|
1117
|
+
}
|
|
1118
|
+
]
|
|
1119
|
+
},
|
|
1120
|
+
{
|
|
1121
|
+
"id": "security-lite",
|
|
1122
|
+
"capability": "security-lite",
|
|
1123
|
+
"status": "fail",
|
|
1124
|
+
"durationMs": 0.06358300000101735,
|
|
1125
|
+
"message": "Found 8 security finding(s): 3 high, 3 medium, 2 low.",
|
|
1126
|
+
"evidence": [
|
|
1127
|
+
{
|
|
1128
|
+
"endpoint": "security/scan-lite",
|
|
1129
|
+
"advertised": true,
|
|
1130
|
+
"responded": true,
|
|
1131
|
+
"minimalShapePresent": true,
|
|
1132
|
+
"itemCount": 8,
|
|
1133
|
+
"identifiers": [
|
|
1134
|
+
"cleanup",
|
|
1135
|
+
"kubectl_apply",
|
|
1136
|
+
"kubectl_delete",
|
|
1137
|
+
"kubectl_create",
|
|
1138
|
+
"kubectl_reconnect",
|
|
1139
|
+
"exec_in_pod",
|
|
1140
|
+
"kubectl_generic"
|
|
1141
|
+
],
|
|
1142
|
+
"diagnostics": [
|
|
1143
|
+
"[low] Tool \"cleanup\" has an empty schema but is marked as destructive.",
|
|
1144
|
+
"[medium] Tool \"kubectl_apply\" accepts filesystem paths and has destructive capabilities.",
|
|
1145
|
+
"[medium] Tool \"kubectl_delete\" accepts filesystem paths and has destructive capabilities.",
|
|
1146
|
+
"[high] Tool \"kubectl_create\" has parameter \"command\" which may allow arbitrary command execution.",
|
|
1147
|
+
"[medium] Tool \"kubectl_create\" accepts filesystem paths and has destructive capabilities.",
|
|
1148
|
+
"[low] Tool \"kubectl_reconnect\" has an empty schema but is marked as destructive.",
|
|
1149
|
+
"[high] Tool \"exec_in_pod\" has parameter \"command\" which may allow arbitrary command execution.",
|
|
1150
|
+
"[high] Tool \"kubectl_generic\" has parameter \"command\" which may allow arbitrary command execution."
|
|
1151
|
+
],
|
|
1152
|
+
"findings": [
|
|
1153
|
+
{
|
|
1154
|
+
"ruleId": "permissive-schema",
|
|
1155
|
+
"severity": "low",
|
|
1156
|
+
"toolName": "cleanup",
|
|
1157
|
+
"message": "Tool \"cleanup\" has an empty schema but is marked as destructive."
|
|
1158
|
+
},
|
|
1159
|
+
{
|
|
1160
|
+
"ruleId": "broad-filesystem",
|
|
1161
|
+
"severity": "medium",
|
|
1162
|
+
"toolName": "kubectl_apply",
|
|
1163
|
+
"message": "Tool \"kubectl_apply\" accepts filesystem paths and has destructive capabilities."
|
|
1164
|
+
},
|
|
1165
|
+
{
|
|
1166
|
+
"ruleId": "broad-filesystem",
|
|
1167
|
+
"severity": "medium",
|
|
1168
|
+
"toolName": "kubectl_delete",
|
|
1169
|
+
"message": "Tool \"kubectl_delete\" accepts filesystem paths and has destructive capabilities."
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
"ruleId": "shell-injection",
|
|
1173
|
+
"severity": "high",
|
|
1174
|
+
"toolName": "kubectl_create",
|
|
1175
|
+
"message": "Tool \"kubectl_create\" has parameter \"command\" which may allow arbitrary command execution."
|
|
1176
|
+
},
|
|
1177
|
+
{
|
|
1178
|
+
"ruleId": "broad-filesystem",
|
|
1179
|
+
"severity": "medium",
|
|
1180
|
+
"toolName": "kubectl_create",
|
|
1181
|
+
"message": "Tool \"kubectl_create\" accepts filesystem paths and has destructive capabilities."
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
"ruleId": "permissive-schema",
|
|
1185
|
+
"severity": "low",
|
|
1186
|
+
"toolName": "kubectl_reconnect",
|
|
1187
|
+
"message": "Tool \"kubectl_reconnect\" has an empty schema but is marked as destructive."
|
|
1188
|
+
},
|
|
1189
|
+
{
|
|
1190
|
+
"ruleId": "shell-injection",
|
|
1191
|
+
"severity": "high",
|
|
1192
|
+
"toolName": "exec_in_pod",
|
|
1193
|
+
"message": "Tool \"exec_in_pod\" has parameter \"command\" which may allow arbitrary command execution."
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
"ruleId": "shell-injection",
|
|
1197
|
+
"severity": "high",
|
|
1198
|
+
"toolName": "kubectl_generic",
|
|
1199
|
+
"message": "Tool \"kubectl_generic\" has parameter \"command\" which may allow arbitrary command execution."
|
|
1200
|
+
}
|
|
1201
|
+
]
|
|
1202
|
+
}
|
|
1203
|
+
]
|
|
1204
|
+
},
|
|
1205
|
+
{
|
|
1206
|
+
"id": "conformance",
|
|
1207
|
+
"capability": "conformance",
|
|
1208
|
+
"status": "pass",
|
|
1209
|
+
"durationMs": 1.6942920000001322,
|
|
1210
|
+
"message": "All 7 conformance checks passed.",
|
|
1211
|
+
"evidence": [
|
|
1212
|
+
{
|
|
1213
|
+
"endpoint": "conformance/check",
|
|
1214
|
+
"advertised": true,
|
|
1215
|
+
"responded": true,
|
|
1216
|
+
"minimalShapePresent": true,
|
|
1217
|
+
"itemCount": 7,
|
|
1218
|
+
"identifiers": [],
|
|
1219
|
+
"diagnostics": [
|
|
1220
|
+
"[pass] capabilities-present: Server returned capabilities object.",
|
|
1221
|
+
"[pass] server-info: Server provided initialization info.",
|
|
1222
|
+
"[pass] tools-capability-match: tools/list returned 23 tool(s).",
|
|
1223
|
+
"[pass] prompts-capability-match: prompts/list returned 1 prompt(s).",
|
|
1224
|
+
"[pass] resources-capability-match: resources/list returned 5 resource(s).",
|
|
1225
|
+
"[pass] tool-response-content: Tool \"cleanup\" response has valid content array.",
|
|
1226
|
+
"[pass] error-handling: Server returned proper error code -32601 for unknown method."
|
|
1227
|
+
]
|
|
1228
|
+
}
|
|
1229
|
+
]
|
|
1230
|
+
},
|
|
1231
|
+
{
|
|
1232
|
+
"id": "schema-quality",
|
|
1233
|
+
"capability": "schema-quality",
|
|
1234
|
+
"status": "partial",
|
|
1235
|
+
"durationMs": 0.48933300000135205,
|
|
1236
|
+
"message": "Found 7 quality finding(s) across 29 item(s): 0 warnings, 7 info.",
|
|
1237
|
+
"evidence": [
|
|
1238
|
+
{
|
|
1239
|
+
"endpoint": "schema-quality/scan",
|
|
1240
|
+
"advertised": true,
|
|
1241
|
+
"responded": true,
|
|
1242
|
+
"minimalShapePresent": true,
|
|
1243
|
+
"itemCount": 7,
|
|
1244
|
+
"identifiers": [
|
|
1245
|
+
"port_forward",
|
|
1246
|
+
"stop_port_forward",
|
|
1247
|
+
"list_api_resources"
|
|
1248
|
+
],
|
|
1249
|
+
"diagnostics": [
|
|
1250
|
+
"[info] tool \"port_forward\": Property 'resourceType' missing description",
|
|
1251
|
+
"[info] tool \"port_forward\": Property 'resourceName' missing description",
|
|
1252
|
+
"[info] tool \"port_forward\": Property 'localPort' missing description",
|
|
1253
|
+
"[info] tool \"port_forward\": Property 'targetPort' missing description",
|
|
1254
|
+
"[info] tool \"port_forward\": Property 'namespace' missing description",
|
|
1255
|
+
"[info] tool \"stop_port_forward\": Property 'id' missing description",
|
|
1256
|
+
"[info] tool \"list_api_resources\": Has properties but no 'required' array declared"
|
|
1257
|
+
],
|
|
1258
|
+
"findings": [
|
|
1259
|
+
{
|
|
1260
|
+
"itemType": "tool",
|
|
1261
|
+
"itemName": "port_forward",
|
|
1262
|
+
"issue": "Property 'resourceType' missing description",
|
|
1263
|
+
"severity": "info"
|
|
1264
|
+
},
|
|
1265
|
+
{
|
|
1266
|
+
"itemType": "tool",
|
|
1267
|
+
"itemName": "port_forward",
|
|
1268
|
+
"issue": "Property 'resourceName' missing description",
|
|
1269
|
+
"severity": "info"
|
|
1270
|
+
},
|
|
1271
|
+
{
|
|
1272
|
+
"itemType": "tool",
|
|
1273
|
+
"itemName": "port_forward",
|
|
1274
|
+
"issue": "Property 'localPort' missing description",
|
|
1275
|
+
"severity": "info"
|
|
1276
|
+
},
|
|
1277
|
+
{
|
|
1278
|
+
"itemType": "tool",
|
|
1279
|
+
"itemName": "port_forward",
|
|
1280
|
+
"issue": "Property 'targetPort' missing description",
|
|
1281
|
+
"severity": "info"
|
|
1282
|
+
},
|
|
1283
|
+
{
|
|
1284
|
+
"itemType": "tool",
|
|
1285
|
+
"itemName": "port_forward",
|
|
1286
|
+
"issue": "Property 'namespace' missing description",
|
|
1287
|
+
"severity": "info"
|
|
1288
|
+
},
|
|
1289
|
+
{
|
|
1290
|
+
"itemType": "tool",
|
|
1291
|
+
"itemName": "stop_port_forward",
|
|
1292
|
+
"issue": "Property 'id' missing description",
|
|
1293
|
+
"severity": "info"
|
|
1294
|
+
},
|
|
1295
|
+
{
|
|
1296
|
+
"itemType": "tool",
|
|
1297
|
+
"itemName": "list_api_resources",
|
|
1298
|
+
"issue": "Has properties but no 'required' array declared",
|
|
1299
|
+
"severity": "info"
|
|
1300
|
+
}
|
|
1301
|
+
]
|
|
1302
|
+
}
|
|
1303
|
+
]
|
|
1304
|
+
},
|
|
1305
|
+
{
|
|
1306
|
+
"id": "security",
|
|
1307
|
+
"capability": "security",
|
|
1308
|
+
"status": "fail",
|
|
1309
|
+
"durationMs": 0.2782920000008744,
|
|
1310
|
+
"message": "Found 8 security finding(s): 3 high, 3 medium, 2 low.",
|
|
1311
|
+
"evidence": [
|
|
1312
|
+
{
|
|
1313
|
+
"endpoint": "security/scan",
|
|
1314
|
+
"advertised": true,
|
|
1315
|
+
"responded": true,
|
|
1316
|
+
"minimalShapePresent": true,
|
|
1317
|
+
"itemCount": 8,
|
|
1318
|
+
"identifiers": [
|
|
1319
|
+
"cleanup",
|
|
1320
|
+
"kubectl_apply",
|
|
1321
|
+
"kubectl_delete",
|
|
1322
|
+
"kubectl_create",
|
|
1323
|
+
"kubectl_reconnect",
|
|
1324
|
+
"exec_in_pod",
|
|
1325
|
+
"kubectl_generic"
|
|
1326
|
+
],
|
|
1327
|
+
"diagnostics": [
|
|
1328
|
+
"[low] Tool \"cleanup\" has an empty schema but is marked as destructive.",
|
|
1329
|
+
"[medium] Tool \"kubectl_apply\" accepts filesystem paths and has destructive capabilities.",
|
|
1330
|
+
"[medium] Tool \"kubectl_delete\" accepts filesystem paths and has destructive capabilities.",
|
|
1331
|
+
"[high] Tool \"kubectl_create\" has parameter \"command\" which may allow arbitrary command execution.",
|
|
1332
|
+
"[medium] Tool \"kubectl_create\" accepts filesystem paths and has destructive capabilities.",
|
|
1333
|
+
"[low] Tool \"kubectl_reconnect\" has an empty schema but is marked as destructive.",
|
|
1334
|
+
"[high] Tool \"exec_in_pod\" has parameter \"command\" which may allow arbitrary command execution.",
|
|
1335
|
+
"[high] Tool \"kubectl_generic\" has parameter \"command\" which may allow arbitrary command execution."
|
|
1336
|
+
],
|
|
1337
|
+
"findings": [
|
|
1338
|
+
{
|
|
1339
|
+
"ruleId": "permissive-schema",
|
|
1340
|
+
"severity": "low",
|
|
1341
|
+
"toolName": "cleanup",
|
|
1342
|
+
"message": "Tool \"cleanup\" has an empty schema but is marked as destructive."
|
|
1343
|
+
},
|
|
1344
|
+
{
|
|
1345
|
+
"ruleId": "broad-filesystem",
|
|
1346
|
+
"severity": "medium",
|
|
1347
|
+
"toolName": "kubectl_apply",
|
|
1348
|
+
"message": "Tool \"kubectl_apply\" accepts filesystem paths and has destructive capabilities."
|
|
1349
|
+
},
|
|
1350
|
+
{
|
|
1351
|
+
"ruleId": "broad-filesystem",
|
|
1352
|
+
"severity": "medium",
|
|
1353
|
+
"toolName": "kubectl_delete",
|
|
1354
|
+
"message": "Tool \"kubectl_delete\" accepts filesystem paths and has destructive capabilities."
|
|
1355
|
+
},
|
|
1356
|
+
{
|
|
1357
|
+
"ruleId": "shell-injection",
|
|
1358
|
+
"severity": "high",
|
|
1359
|
+
"toolName": "kubectl_create",
|
|
1360
|
+
"message": "Tool \"kubectl_create\" has parameter \"command\" which may allow arbitrary command execution."
|
|
1361
|
+
},
|
|
1362
|
+
{
|
|
1363
|
+
"ruleId": "broad-filesystem",
|
|
1364
|
+
"severity": "medium",
|
|
1365
|
+
"toolName": "kubectl_create",
|
|
1366
|
+
"message": "Tool \"kubectl_create\" accepts filesystem paths and has destructive capabilities."
|
|
1367
|
+
},
|
|
1368
|
+
{
|
|
1369
|
+
"ruleId": "permissive-schema",
|
|
1370
|
+
"severity": "low",
|
|
1371
|
+
"toolName": "kubectl_reconnect",
|
|
1372
|
+
"message": "Tool \"kubectl_reconnect\" has an empty schema but is marked as destructive."
|
|
1373
|
+
},
|
|
1374
|
+
{
|
|
1375
|
+
"ruleId": "shell-injection",
|
|
1376
|
+
"severity": "high",
|
|
1377
|
+
"toolName": "exec_in_pod",
|
|
1378
|
+
"message": "Tool \"exec_in_pod\" has parameter \"command\" which may allow arbitrary command execution."
|
|
1379
|
+
},
|
|
1380
|
+
{
|
|
1381
|
+
"ruleId": "shell-injection",
|
|
1382
|
+
"severity": "high",
|
|
1383
|
+
"toolName": "kubectl_generic",
|
|
1384
|
+
"message": "Tool \"kubectl_generic\" has parameter \"command\" which may allow arbitrary command execution."
|
|
1385
|
+
}
|
|
1386
|
+
]
|
|
1387
|
+
}
|
|
1388
|
+
]
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
"id": "attack-sim",
|
|
1392
|
+
"capability": "attack-sim",
|
|
1393
|
+
"status": "fail",
|
|
1394
|
+
"durationMs": 0.750292000000627,
|
|
1395
|
+
"message": "Safe attack simulation found 5 finding(s): 3 high, 2 medium, 0 low.",
|
|
1396
|
+
"evidence": [
|
|
1397
|
+
{
|
|
1398
|
+
"endpoint": "attack-sim/safe",
|
|
1399
|
+
"advertised": true,
|
|
1400
|
+
"responded": true,
|
|
1401
|
+
"minimalShapePresent": true,
|
|
1402
|
+
"itemCount": 5,
|
|
1403
|
+
"identifiers": [
|
|
1404
|
+
"kubectl_apply",
|
|
1405
|
+
"kubectl_delete",
|
|
1406
|
+
"kubectl_create",
|
|
1407
|
+
"exec_in_pod",
|
|
1408
|
+
"kubectl_generic"
|
|
1409
|
+
],
|
|
1410
|
+
"diagnostics": [
|
|
1411
|
+
"[medium] Tool \"kubectl_apply\" combines broad parameters (filename) with destructive or non-read-only behavior.",
|
|
1412
|
+
"[medium] Tool \"kubectl_delete\" combines broad parameters (filename) with destructive or non-read-only behavior.",
|
|
1413
|
+
"[high] Tool \"kubectl_create\" combines broad parameters (filename, command) with destructive or non-read-only behavior.",
|
|
1414
|
+
"[high] Tool \"exec_in_pod\" combines broad parameters (command) with destructive or non-read-only behavior.",
|
|
1415
|
+
"[high] Tool \"kubectl_generic\" combines broad parameters (command) with destructive or non-read-only behavior."
|
|
1416
|
+
],
|
|
1417
|
+
"findings": [
|
|
1418
|
+
{
|
|
1419
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
1420
|
+
"attackClass": "permission-boundary",
|
|
1421
|
+
"severity": "medium",
|
|
1422
|
+
"itemType": "tool",
|
|
1423
|
+
"itemName": "kubectl_apply",
|
|
1424
|
+
"message": "Tool \"kubectl_apply\" combines broad parameters (filename) with destructive or non-read-only behavior.",
|
|
1425
|
+
"evidence": {
|
|
1426
|
+
"broadParams": [
|
|
1427
|
+
"filename"
|
|
1428
|
+
],
|
|
1429
|
+
"annotations": {
|
|
1430
|
+
"destructiveHint": true
|
|
1431
|
+
},
|
|
1432
|
+
"description": "Apply a Kubernetes YAML manifest from a string or file"
|
|
1433
|
+
},
|
|
1434
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
1435
|
+
"recommendedAction": "gate"
|
|
1436
|
+
},
|
|
1437
|
+
{
|
|
1438
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
1439
|
+
"attackClass": "permission-boundary",
|
|
1440
|
+
"severity": "medium",
|
|
1441
|
+
"itemType": "tool",
|
|
1442
|
+
"itemName": "kubectl_delete",
|
|
1443
|
+
"message": "Tool \"kubectl_delete\" combines broad parameters (filename) with destructive or non-read-only behavior.",
|
|
1444
|
+
"evidence": {
|
|
1445
|
+
"broadParams": [
|
|
1446
|
+
"filename"
|
|
1447
|
+
],
|
|
1448
|
+
"annotations": {
|
|
1449
|
+
"destructiveHint": true
|
|
1450
|
+
},
|
|
1451
|
+
"description": "Delete Kubernetes resources by resource type, name, labels, or from a manifest file"
|
|
1452
|
+
},
|
|
1453
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
1454
|
+
"recommendedAction": "gate"
|
|
1455
|
+
},
|
|
1456
|
+
{
|
|
1457
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
1458
|
+
"attackClass": "permission-boundary",
|
|
1459
|
+
"severity": "high",
|
|
1460
|
+
"itemType": "tool",
|
|
1461
|
+
"itemName": "kubectl_create",
|
|
1462
|
+
"message": "Tool \"kubectl_create\" combines broad parameters (filename, command) with destructive or non-read-only behavior.",
|
|
1463
|
+
"evidence": {
|
|
1464
|
+
"broadParams": [
|
|
1465
|
+
"filename",
|
|
1466
|
+
"command"
|
|
1467
|
+
],
|
|
1468
|
+
"description": "Create Kubernetes resources using various methods (from file or using subcommands)"
|
|
1469
|
+
},
|
|
1470
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
1471
|
+
"recommendedAction": "quarantine"
|
|
1472
|
+
},
|
|
1473
|
+
{
|
|
1474
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
1475
|
+
"attackClass": "permission-boundary",
|
|
1476
|
+
"severity": "high",
|
|
1477
|
+
"itemType": "tool",
|
|
1478
|
+
"itemName": "exec_in_pod",
|
|
1479
|
+
"message": "Tool \"exec_in_pod\" combines broad parameters (command) with destructive or non-read-only behavior.",
|
|
1480
|
+
"evidence": {
|
|
1481
|
+
"broadParams": [
|
|
1482
|
+
"command"
|
|
1483
|
+
],
|
|
1484
|
+
"annotations": {
|
|
1485
|
+
"destructiveHint": true
|
|
1486
|
+
},
|
|
1487
|
+
"description": "Execute a command in a Kubernetes pod or container and return the output. Command must be an array of strings where the first element is the executable and remaining elements are arguments. This executes directly without shell interpretation for security."
|
|
1488
|
+
},
|
|
1489
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
1490
|
+
"recommendedAction": "quarantine"
|
|
1491
|
+
},
|
|
1492
|
+
{
|
|
1493
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
1494
|
+
"attackClass": "permission-boundary",
|
|
1495
|
+
"severity": "high",
|
|
1496
|
+
"itemType": "tool",
|
|
1497
|
+
"itemName": "kubectl_generic",
|
|
1498
|
+
"message": "Tool \"kubectl_generic\" combines broad parameters (command) with destructive or non-read-only behavior.",
|
|
1499
|
+
"evidence": {
|
|
1500
|
+
"broadParams": [
|
|
1501
|
+
"command"
|
|
1502
|
+
],
|
|
1503
|
+
"annotations": {
|
|
1504
|
+
"destructiveHint": true
|
|
1505
|
+
},
|
|
1506
|
+
"description": "Execute any kubectl command with the provided arguments and flags"
|
|
1507
|
+
},
|
|
1508
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
1509
|
+
"recommendedAction": "quarantine"
|
|
1510
|
+
}
|
|
1511
|
+
]
|
|
1512
|
+
}
|
|
1513
|
+
]
|
|
1514
|
+
}
|
|
1515
|
+
],
|
|
1516
|
+
"healthScore": {
|
|
1517
|
+
"overall": 72,
|
|
1518
|
+
"grade": "C",
|
|
1519
|
+
"dimensions": [
|
|
1520
|
+
{
|
|
1521
|
+
"name": "Protocol Compliance",
|
|
1522
|
+
"weight": 0.3,
|
|
1523
|
+
"score": 100,
|
|
1524
|
+
"details": [
|
|
1525
|
+
"conformance: pass (100/100)"
|
|
1526
|
+
]
|
|
1527
|
+
},
|
|
1528
|
+
{
|
|
1529
|
+
"name": "Schema Quality",
|
|
1530
|
+
"weight": 0.2,
|
|
1531
|
+
"score": 60,
|
|
1532
|
+
"details": [
|
|
1533
|
+
"schema-quality: partial (60/100)"
|
|
1534
|
+
]
|
|
1535
|
+
},
|
|
1536
|
+
{
|
|
1537
|
+
"name": "Security",
|
|
1538
|
+
"weight": 0.2,
|
|
1539
|
+
"score": 0,
|
|
1540
|
+
"details": [
|
|
1541
|
+
"security-lite: fail (0/100)",
|
|
1542
|
+
"security: fail (0/100)",
|
|
1543
|
+
"attack-sim: fail (0/100)"
|
|
1544
|
+
]
|
|
1545
|
+
},
|
|
1546
|
+
{
|
|
1547
|
+
"name": "Reliability",
|
|
1548
|
+
"weight": 0.2,
|
|
1549
|
+
"score": 100,
|
|
1550
|
+
"details": [
|
|
1551
|
+
"tools: pass (100/100)",
|
|
1552
|
+
"prompts: pass (100/100)",
|
|
1553
|
+
"resources: pass (100/100)"
|
|
1554
|
+
]
|
|
1555
|
+
},
|
|
1556
|
+
{
|
|
1557
|
+
"name": "Performance",
|
|
1558
|
+
"weight": 0.1,
|
|
1559
|
+
"score": 100,
|
|
1560
|
+
"details": [
|
|
1561
|
+
"Connect: 1296ms",
|
|
1562
|
+
"p95 latency: 1ms (3 operations)"
|
|
1563
|
+
]
|
|
1564
|
+
}
|
|
1565
|
+
]
|
|
1566
|
+
},
|
|
1567
|
+
"performanceMetrics": {
|
|
1568
|
+
"connectMs": 1295.9490000000005,
|
|
1569
|
+
"toolsListMs": 1.2567500000004657,
|
|
1570
|
+
"promptsListMs": 0.29662500000085856,
|
|
1571
|
+
"resourcesListMs": 0.38045899999997346
|
|
1572
|
+
}
|
|
1573
|
+
}
|