@kryptosai/mcp-observatory 0.28.0 → 1.28.2
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 +26 -5
- package/README.md +65 -12
- 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/audit.d.ts +64 -0
- package/dist/src/audit.js +359 -0
- package/dist/src/audit.js.map +1 -0
- package/dist/src/checks/attack-sim.d.ts +2 -0
- package/dist/src/checks/attack-sim.js +12 -0
- package/dist/src/checks/attack-sim.js.map +1 -1
- package/dist/src/cli.js +8 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/attack-sim.js +54 -2
- package/dist/src/commands/attack-sim.js.map +1 -1
- 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 +2 -0
- package/dist/src/commands/init-ci.js +71 -11
- package/dist/src/commands/init-ci.js.map +1 -1
- package/dist/src/commands/legacy.js +2 -0
- 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 +23 -5
- 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/setup-ci-conversion.d.ts +2 -1
- package/dist/src/commands/setup-ci-conversion.js +22 -8
- package/dist/src/commands/setup-ci-conversion.js.map +1 -1
- package/dist/src/commands/test.js +18 -1
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/findings.d.ts +1 -0
- package/dist/src/findings.js +1 -0
- package/dist/src/findings.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.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.js +6 -1
- package/dist/src/reporters/attack-sim.js.map +1 -1
- package/dist/src/reporters/sarif.js +11 -1
- package/dist/src/reporters/sarif.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/telemetry.d.ts +7 -0
- package/dist/src/telemetry.js.map +1 -1
- package/docs/10x-agentic-growth-sprint.md +47 -0
- package/docs/agent-ecosystem-promotion-plan.md +1 -1
- package/docs/agentic-contributor-outreach.md +52 -0
- package/docs/code-scanning-demo.md +2 -2
- package/docs/commercial-boundary.md +83 -0
- package/docs/contributor-proof-cards/README.md +1 -1
- 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/mcp-receipts.md +109 -0
- package/docs/mcp-server-safety-index.md +26 -25
- package/docs/nsa-mcp-audit-ci.md +88 -0
- package/docs/procurement-one-pager.md +74 -0
- package/docs/proof.md +2 -2
- package/docs/public-guidance-crosswalk.md +48 -0
- package/docs/safety-index/artifacts/antv-chart-server.json +41 -23
- package/docs/safety-index/artifacts/antv-chart-server.md +23 -10
- package/docs/safety-index/artifacts/browsermcp-server.json +38 -20
- package/docs/safety-index/artifacts/browsermcp-server.md +23 -10
- package/docs/safety-index/artifacts/context7-server.json +85 -28
- package/docs/safety-index/artifacts/context7-server.md +35 -22
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +460 -36
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +31 -18
- package/docs/safety-index/artifacts/everything-server.json +38 -20
- package/docs/safety-index/artifacts/everything-server.md +25 -12
- package/docs/safety-index/artifacts/executeautomation-playwright-server.json +155 -20
- package/docs/safety-index/artifacts/executeautomation-playwright-server.md +26 -13
- package/docs/safety-index/artifacts/filesystem-server.json +116 -22
- package/docs/safety-index/artifacts/filesystem-server.md +27 -14
- package/docs/safety-index/artifacts/kubernetes-server.json +252 -27
- package/docs/safety-index/artifacts/kubernetes-server.md +44 -18
- package/docs/safety-index/artifacts/memory-server.json +39 -21
- package/docs/safety-index/artifacts/memory-server.md +24 -11
- package/docs/safety-index/artifacts/opentofu-server.json +38 -20
- package/docs/safety-index/artifacts/opentofu-server.md +24 -11
- package/docs/safety-index/artifacts/playwright-mcp-server.json +140 -20
- package/docs/safety-index/artifacts/playwright-mcp-server.md +26 -13
- package/docs/safety-index/artifacts/promptopia-server.json +41 -23
- package/docs/safety-index/artifacts/promptopia-server.md +26 -13
- package/docs/safety-index/artifacts/puppeteer-server.json +77 -34
- package/docs/safety-index/artifacts/puppeteer-server.md +45 -32
- package/docs/safety-index/artifacts/ref-tools-server.json +38 -20
- package/docs/safety-index/artifacts/ref-tools-server.md +22 -9
- package/docs/safety-index/artifacts/sequential-thinking-server.json +39 -21
- package/docs/safety-index/artifacts/sequential-thinking-server.md +23 -10
- package/docs/security-due-diligence.md +87 -0
- package/docs/setup-ci-doctor.md +11 -1
- package/docs/tool-call-receipts.md +1 -2
- package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
- package/examples/insecure-mcp-server/server.mjs +62 -0
- package/package.json +12 -1
- package/scripts/postinstall.mjs +22 -7
|
@@ -2,28 +2,36 @@
|
|
|
2
2
|
"artifactType": "run",
|
|
3
3
|
"schemaVersion": "1.0.0",
|
|
4
4
|
"gate": "fail",
|
|
5
|
-
"runId": "run_2026-07-
|
|
6
|
-
"createdAt": "2026-07-
|
|
5
|
+
"runId": "run_2026-07-06T194958878Z_b41bb221",
|
|
6
|
+
"createdAt": "2026-07-06T19:49:58.878Z",
|
|
7
7
|
"toolVersion": "0.28.0",
|
|
8
8
|
"target": {
|
|
9
|
-
"targetId": "
|
|
9
|
+
"targetId": "kubernetes-server",
|
|
10
10
|
"adapter": "local-process",
|
|
11
11
|
"command": "npx",
|
|
12
12
|
"args": [
|
|
13
13
|
"-y",
|
|
14
14
|
"mcp-server-kubernetes"
|
|
15
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
|
+
},
|
|
16
24
|
"serverName": "kubernetes",
|
|
17
|
-
"serverVersion": "3.9.
|
|
25
|
+
"serverVersion": "3.9.3"
|
|
18
26
|
},
|
|
19
27
|
"environment": {
|
|
20
28
|
"platform": "darwin 25.5.0",
|
|
21
29
|
"nodeVersion": "v22.22.1"
|
|
22
30
|
},
|
|
23
31
|
"summary": {
|
|
24
|
-
"total":
|
|
32
|
+
"total": 8,
|
|
25
33
|
"pass": 4,
|
|
26
|
-
"fail":
|
|
34
|
+
"fail": 3,
|
|
27
35
|
"partial": 1,
|
|
28
36
|
"unsupported": 0,
|
|
29
37
|
"flaky": 0,
|
|
@@ -35,7 +43,7 @@
|
|
|
35
43
|
"id": "tools",
|
|
36
44
|
"capability": "tools",
|
|
37
45
|
"status": "pass",
|
|
38
|
-
"durationMs":
|
|
46
|
+
"durationMs": 1.2567500000004657,
|
|
39
47
|
"message": "Advertised capability responded with the minimal expected shape (23 items).",
|
|
40
48
|
"evidence": [
|
|
41
49
|
{
|
|
@@ -70,9 +78,9 @@
|
|
|
70
78
|
"ping"
|
|
71
79
|
],
|
|
72
80
|
"diagnostics": [
|
|
73
|
-
"Starting Kubernetes MCP server v3.9.
|
|
81
|
+
"Starting Kubernetes MCP server v3.9.3, handling commands...",
|
|
74
82
|
"Telemetry: Disabled",
|
|
75
|
-
"(node:
|
|
83
|
+
"(node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.",
|
|
76
84
|
"(Use `node --trace-deprecation ...` to show where the warning was created)"
|
|
77
85
|
],
|
|
78
86
|
"schemas": {
|
|
@@ -995,6 +1003,11 @@
|
|
|
995
1003
|
"description": "Kubernetes namespace",
|
|
996
1004
|
"default": "default"
|
|
997
1005
|
},
|
|
1006
|
+
"allNamespaces": {
|
|
1007
|
+
"type": "boolean",
|
|
1008
|
+
"description": "If true, run the command across all namespaces",
|
|
1009
|
+
"default": false
|
|
1010
|
+
},
|
|
998
1011
|
"outputFormat": {
|
|
999
1012
|
"type": "string",
|
|
1000
1013
|
"description": "Output format (e.g. json, yaml, wide)",
|
|
@@ -1041,7 +1054,7 @@
|
|
|
1041
1054
|
"id": "prompts",
|
|
1042
1055
|
"capability": "prompts",
|
|
1043
1056
|
"status": "pass",
|
|
1044
|
-
"durationMs": 0.
|
|
1057
|
+
"durationMs": 0.29662500000085856,
|
|
1045
1058
|
"message": "Advertised capability responded with the minimal expected shape (1 item).",
|
|
1046
1059
|
"evidence": [
|
|
1047
1060
|
{
|
|
@@ -1054,9 +1067,9 @@
|
|
|
1054
1067
|
"k8s-diagnose"
|
|
1055
1068
|
],
|
|
1056
1069
|
"diagnostics": [
|
|
1057
|
-
"Starting Kubernetes MCP server v3.9.
|
|
1070
|
+
"Starting Kubernetes MCP server v3.9.3, handling commands...",
|
|
1058
1071
|
"Telemetry: Disabled",
|
|
1059
|
-
"(node:
|
|
1072
|
+
"(node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.",
|
|
1060
1073
|
"(Use `node --trace-deprecation ...` to show where the warning was created)"
|
|
1061
1074
|
]
|
|
1062
1075
|
}
|
|
@@ -1066,7 +1079,7 @@
|
|
|
1066
1079
|
"id": "resources",
|
|
1067
1080
|
"capability": "resources",
|
|
1068
1081
|
"status": "pass",
|
|
1069
|
-
"durationMs":
|
|
1082
|
+
"durationMs": 0.38045899999997346,
|
|
1070
1083
|
"message": "Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported.",
|
|
1071
1084
|
"evidence": [
|
|
1072
1085
|
{
|
|
@@ -1083,9 +1096,9 @@
|
|
|
1083
1096
|
"k8s://nodes"
|
|
1084
1097
|
],
|
|
1085
1098
|
"diagnostics": [
|
|
1086
|
-
"Starting Kubernetes MCP server v3.9.
|
|
1099
|
+
"Starting Kubernetes MCP server v3.9.3, handling commands...",
|
|
1087
1100
|
"Telemetry: Disabled",
|
|
1088
|
-
"(node:
|
|
1101
|
+
"(node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.",
|
|
1089
1102
|
"(Use `node --trace-deprecation ...` to show where the warning was created)"
|
|
1090
1103
|
]
|
|
1091
1104
|
},
|
|
@@ -1096,9 +1109,9 @@
|
|
|
1096
1109
|
"minimalShapePresent": false,
|
|
1097
1110
|
"diagnostics": [
|
|
1098
1111
|
"MCP error -32601: Method not found",
|
|
1099
|
-
"Starting Kubernetes MCP server v3.9.
|
|
1112
|
+
"Starting Kubernetes MCP server v3.9.3, handling commands...",
|
|
1100
1113
|
"Telemetry: Disabled",
|
|
1101
|
-
"(node:
|
|
1114
|
+
"(node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.",
|
|
1102
1115
|
"(Use `node --trace-deprecation ...` to show where the warning was created)"
|
|
1103
1116
|
]
|
|
1104
1117
|
}
|
|
@@ -1108,7 +1121,7 @@
|
|
|
1108
1121
|
"id": "security-lite",
|
|
1109
1122
|
"capability": "security-lite",
|
|
1110
1123
|
"status": "fail",
|
|
1111
|
-
"durationMs": 0.
|
|
1124
|
+
"durationMs": 0.06358300000101735,
|
|
1112
1125
|
"message": "Found 8 security finding(s): 3 high, 3 medium, 2 low.",
|
|
1113
1126
|
"evidence": [
|
|
1114
1127
|
{
|
|
@@ -1193,7 +1206,7 @@
|
|
|
1193
1206
|
"id": "conformance",
|
|
1194
1207
|
"capability": "conformance",
|
|
1195
1208
|
"status": "pass",
|
|
1196
|
-
"durationMs":
|
|
1209
|
+
"durationMs": 1.6942920000001322,
|
|
1197
1210
|
"message": "All 7 conformance checks passed.",
|
|
1198
1211
|
"evidence": [
|
|
1199
1212
|
{
|
|
@@ -1219,7 +1232,7 @@
|
|
|
1219
1232
|
"id": "schema-quality",
|
|
1220
1233
|
"capability": "schema-quality",
|
|
1221
1234
|
"status": "partial",
|
|
1222
|
-
"durationMs": 0.
|
|
1235
|
+
"durationMs": 0.48933300000135205,
|
|
1223
1236
|
"message": "Found 7 quality finding(s) across 29 item(s): 0 warnings, 7 info.",
|
|
1224
1237
|
"evidence": [
|
|
1225
1238
|
{
|
|
@@ -1288,6 +1301,216 @@
|
|
|
1288
1301
|
]
|
|
1289
1302
|
}
|
|
1290
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
|
+
]
|
|
1291
1514
|
}
|
|
1292
1515
|
],
|
|
1293
1516
|
"healthScore": {
|
|
@@ -1315,7 +1538,9 @@
|
|
|
1315
1538
|
"weight": 0.2,
|
|
1316
1539
|
"score": 0,
|
|
1317
1540
|
"details": [
|
|
1318
|
-
"security-lite: fail (0/100)"
|
|
1541
|
+
"security-lite: fail (0/100)",
|
|
1542
|
+
"security: fail (0/100)",
|
|
1543
|
+
"attack-sim: fail (0/100)"
|
|
1319
1544
|
]
|
|
1320
1545
|
},
|
|
1321
1546
|
{
|
|
@@ -1333,16 +1558,16 @@
|
|
|
1333
1558
|
"weight": 0.1,
|
|
1334
1559
|
"score": 100,
|
|
1335
1560
|
"details": [
|
|
1336
|
-
"Connect:
|
|
1337
|
-
"p95 latency:
|
|
1561
|
+
"Connect: 1296ms",
|
|
1562
|
+
"p95 latency: 1ms (3 operations)"
|
|
1338
1563
|
]
|
|
1339
1564
|
}
|
|
1340
1565
|
]
|
|
1341
1566
|
},
|
|
1342
1567
|
"performanceMetrics": {
|
|
1343
|
-
"connectMs":
|
|
1344
|
-
"toolsListMs":
|
|
1345
|
-
"promptsListMs": 0.
|
|
1346
|
-
"resourcesListMs":
|
|
1568
|
+
"connectMs": 1295.9490000000005,
|
|
1569
|
+
"toolsListMs": 1.2567500000004657,
|
|
1570
|
+
"promptsListMs": 0.29662500000085856,
|
|
1571
|
+
"resourcesListMs": 0.38045899999997346
|
|
1347
1572
|
}
|
|
1348
1573
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# MCP Observatory Run Report
|
|
2
2
|
|
|
3
|
-
Generated at 2026-07-
|
|
3
|
+
Generated at 2026-07-06T19:49:58.878Z
|
|
4
4
|
|
|
5
5
|
## Target and Environment Metadata
|
|
6
6
|
|
|
7
|
-
- Target: `
|
|
7
|
+
- Target: `kubernetes-server`
|
|
8
8
|
- Adapter: `local-process`
|
|
9
9
|
- Command: `npx -y mcp-server-kubernetes`
|
|
10
|
-
- Server: `kubernetes 3.9.
|
|
10
|
+
- Server: `kubernetes 3.9.3`
|
|
11
11
|
- Platform: `darwin 25.5.0`
|
|
12
12
|
- Node: `v22.22.1`
|
|
13
13
|
|
|
@@ -25,18 +25,18 @@ Generated at 2026-07-06T05:32:58.918Z
|
|
|
25
25
|
|
|
26
26
|
| Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
|
|
27
27
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
28
|
-
| fail |
|
|
28
|
+
| fail | 8 | 4 | 3 | 1 | 0 | 0 | 0 |
|
|
29
29
|
|
|
30
30
|
## At a Glance
|
|
31
31
|
|
|
32
32
|
- Safety verdict: **Blocked** — One or more checks can break agent dependence and should be fixed before production use.
|
|
33
|
-
- Top risks: schema-quality: Found 7 quality finding(s) across 29 item(s): 0 warnings, 7 info.;
|
|
33
|
+
- Top risks: schema-quality: Found 7 quality finding(s) across 29 item(s): 0 warnings, 7 info.; attack-sim: Safe attack simulation found 5 finding(s): 3 high, 2 medium, 0 low.; security: Found 8 security finding(s): 3 high, 3 medium, 2 low.
|
|
34
34
|
- Regression/schema drift: Run `mcp-observatory diff <previous-run.json> <current-run.json>` to classify regressions and schema drift.
|
|
35
|
-
- Failing checks: security-lite
|
|
35
|
+
- Failing checks: security-lite, security, attack-sim
|
|
36
36
|
- Partial or flaky checks: schema-quality
|
|
37
37
|
- Skipped checks: none
|
|
38
38
|
- Unsupported checks: none
|
|
39
|
-
- Suggested next step: Start with the failing checks: security-lite.
|
|
39
|
+
- Suggested next step: Start with the failing checks: security-lite, security, attack-sim.
|
|
40
40
|
- CI next step: `Add CI: npx @kryptosai/mcp-observatory setup-ci --all --command "npx -y <server-package>"`
|
|
41
41
|
|
|
42
42
|
## Regressions and Recoveries
|
|
@@ -47,12 +47,14 @@ _Use the `diff` command against another run artifact to classify regressions and
|
|
|
47
47
|
|
|
48
48
|
| Focus | Check | Status | Duration (ms) | Message |
|
|
49
49
|
| --- | --- | --- | --- | --- |
|
|
50
|
-
| healthy | conformance | pass |
|
|
51
|
-
| healthy | prompts | pass | 0.
|
|
52
|
-
| healthy | resources | pass |
|
|
53
|
-
| healthy | tools | pass |
|
|
54
|
-
| review | schema-quality | partial | 0.
|
|
55
|
-
| act now |
|
|
50
|
+
| healthy | conformance | pass | 1.69 | All 7 conformance checks passed. |
|
|
51
|
+
| healthy | prompts | pass | 0.30 | Advertised capability responded with the minimal expected shape (1 item). |
|
|
52
|
+
| healthy | resources | pass | 0.38 | Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported. |
|
|
53
|
+
| healthy | tools | pass | 1.26 | Advertised capability responded with the minimal expected shape (23 items). |
|
|
54
|
+
| review | schema-quality | partial | 0.49 | Found 7 quality finding(s) across 29 item(s): 0 warnings, 7 info. |
|
|
55
|
+
| act now | attack-sim | fail | 0.75 | Safe attack simulation found 5 finding(s): 3 high, 2 medium, 0 low. |
|
|
56
|
+
| act now | security | fail | 0.28 | Found 8 security finding(s): 3 high, 3 medium, 2 low. |
|
|
57
|
+
| act now | security-lite | fail | 0.06 | Found 8 security finding(s): 3 high, 3 medium, 2 low. |
|
|
56
58
|
|
|
57
59
|
## Evidence Snippets
|
|
58
60
|
|
|
@@ -78,7 +80,7 @@ Summary: Advertised capability responded with the minimal expected shape (1 item
|
|
|
78
80
|
- Minimal shape present: `true`
|
|
79
81
|
- Item count: `1`
|
|
80
82
|
- Identifiers: k8s-diagnose
|
|
81
|
-
- Diagnostics: Starting Kubernetes MCP server v3.9.
|
|
83
|
+
- Diagnostics: Starting Kubernetes MCP server v3.9.3, handling commands..., Telemetry: Disabled, (node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. (+1 more)
|
|
82
84
|
|
|
83
85
|
### resources — pass
|
|
84
86
|
|
|
@@ -90,14 +92,14 @@ Summary: Advertised capability responded with the minimal expected shape, but on
|
|
|
90
92
|
- Minimal shape present: `true`
|
|
91
93
|
- Item count: `5`
|
|
92
94
|
- Identifiers: k8s://default/pods, k8s://default/deployments, k8s://default/services, k8s://namespaces, k8s://nodes
|
|
93
|
-
- Diagnostics: Starting Kubernetes MCP server v3.9.
|
|
95
|
+
- Diagnostics: Starting Kubernetes MCP server v3.9.3, handling commands..., Telemetry: Disabled, (node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. (+1 more)
|
|
94
96
|
- Endpoint: `resources/templates/list`
|
|
95
97
|
- Advertised: `true`
|
|
96
98
|
- Responded: `false`
|
|
97
99
|
- Minimal shape present: `false`
|
|
98
100
|
- Item count: `0`
|
|
99
101
|
- Identifiers: none
|
|
100
|
-
- Diagnostics: MCP error -32601: Method not found, Starting Kubernetes MCP server v3.9.
|
|
102
|
+
- Diagnostics: MCP error -32601: Method not found, Starting Kubernetes MCP server v3.9.3, handling commands..., Telemetry: Disabled (+2 more)
|
|
101
103
|
|
|
102
104
|
### tools — pass
|
|
103
105
|
|
|
@@ -109,7 +111,7 @@ Summary: Advertised capability responded with the minimal expected shape (23 ite
|
|
|
109
111
|
- Minimal shape present: `true`
|
|
110
112
|
- Item count: `23`
|
|
111
113
|
- Identifiers: cleanup, kubectl_get, kubectl_describe, kubectl_apply, kubectl_delete (+18 more)
|
|
112
|
-
- Diagnostics: Starting Kubernetes MCP server v3.9.
|
|
114
|
+
- Diagnostics: Starting Kubernetes MCP server v3.9.3, handling commands..., Telemetry: Disabled, (node:13988) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. (+1 more)
|
|
113
115
|
|
|
114
116
|
### schema-quality — partial
|
|
115
117
|
|
|
@@ -123,6 +125,30 @@ Summary: Found 7 quality finding(s) across 29 item(s): 0 warnings, 7 info.
|
|
|
123
125
|
- Identifiers: port_forward, stop_port_forward, list_api_resources
|
|
124
126
|
- Diagnostics: [info] tool "port_forward": Property 'resourceType' missing description, [info] tool "port_forward": Property 'resourceName' missing description, [info] tool "port_forward": Property 'localPort' missing description (+4 more)
|
|
125
127
|
|
|
128
|
+
### attack-sim — fail
|
|
129
|
+
|
|
130
|
+
Summary: Safe attack simulation found 5 finding(s): 3 high, 2 medium, 0 low.
|
|
131
|
+
|
|
132
|
+
- Endpoint: `attack-sim/safe`
|
|
133
|
+
- Advertised: `true`
|
|
134
|
+
- Responded: `true`
|
|
135
|
+
- Minimal shape present: `true`
|
|
136
|
+
- Item count: `5`
|
|
137
|
+
- Identifiers: kubectl_apply, kubectl_delete, kubectl_create, exec_in_pod, kubectl_generic
|
|
138
|
+
- Diagnostics: [medium] Tool "kubectl_apply" combines broad parameters (filename) with destructive or non-read-only behavior., [medium] Tool "kubectl_delete" combines broad parameters (filename) with destructive or non-read-only behavior., [high] Tool "kubectl_create" combines broad parameters (filename, command) with destructive or non-read-only behavior. (+2 more)
|
|
139
|
+
|
|
140
|
+
### security — fail
|
|
141
|
+
|
|
142
|
+
Summary: Found 8 security finding(s): 3 high, 3 medium, 2 low.
|
|
143
|
+
|
|
144
|
+
- Endpoint: `security/scan`
|
|
145
|
+
- Advertised: `true`
|
|
146
|
+
- Responded: `true`
|
|
147
|
+
- Minimal shape present: `true`
|
|
148
|
+
- Item count: `8`
|
|
149
|
+
- Identifiers: cleanup, kubectl_apply, kubectl_delete, kubectl_create, kubectl_reconnect (+2 more)
|
|
150
|
+
- Diagnostics: [low] Tool "cleanup" has an empty schema but is marked as destructive., [medium] Tool "kubectl_apply" accepts filesystem paths and has destructive capabilities., [medium] Tool "kubectl_delete" accepts filesystem paths and has destructive capabilities. (+5 more)
|
|
151
|
+
|
|
126
152
|
### security-lite — fail
|
|
127
153
|
|
|
128
154
|
Summary: Found 8 security finding(s): 3 high, 3 medium, 2 low.
|
|
@@ -146,5 +172,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
|
|
|
146
172
|
|
|
147
173
|
- Artifact type: `run`
|
|
148
174
|
- Schema version: `1.0.0`
|
|
149
|
-
- Run ID: `run_2026-07-
|
|
175
|
+
- Run ID: `run_2026-07-06T194958878Z_b41bb221`
|
|
150
176
|
- Gate: `fail`
|