@kryptosai/mcp-observatory 1.33.0 → 1.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +8 -121
  2. package/dist/src/auth.d.ts +22 -0
  3. package/dist/src/auth.js +140 -0
  4. package/dist/src/auth.js.map +1 -0
  5. package/dist/src/cli.js +48 -3
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/commands/demo.d.ts +2 -0
  8. package/dist/src/commands/demo.js +247 -0
  9. package/dist/src/commands/demo.js.map +1 -0
  10. package/dist/src/commands/helpers.d.ts +11 -0
  11. package/dist/src/commands/helpers.js +26 -0
  12. package/dist/src/commands/helpers.js.map +1 -1
  13. package/dist/src/commands/init-ci.d.ts +1 -0
  14. package/dist/src/commands/init-ci.js +157 -10
  15. package/dist/src/commands/init-ci.js.map +1 -1
  16. package/dist/src/commands/receipt.js +13 -3
  17. package/dist/src/commands/receipt.js.map +1 -1
  18. package/dist/src/commands/scan.js +10 -1
  19. package/dist/src/commands/scan.js.map +1 -1
  20. package/dist/src/commands/setup-ci-conversion.js +4 -4
  21. package/dist/src/commands/setup-ci-conversion.js.map +1 -1
  22. package/dist/src/commands/test.js +9 -1
  23. package/dist/src/commands/test.js.map +1 -1
  24. package/dist/src/commercial.d.ts +3 -0
  25. package/dist/src/commercial.js +12 -1
  26. package/dist/src/commercial.js.map +1 -1
  27. package/dist/src/index.d.ts +1 -1
  28. package/dist/src/index.js +1 -1
  29. package/dist/src/index.js.map +1 -1
  30. package/dist/src/receipt.d.ts +9 -0
  31. package/dist/src/receipt.js +24 -1
  32. package/dist/src/receipt.js.map +1 -1
  33. package/dist/src/telemetry.js +4 -0
  34. package/dist/src/telemetry.js.map +1 -1
  35. package/dist/src/utils/failure-diagnosis.d.ts +7 -0
  36. package/dist/src/utils/failure-diagnosis.js +14 -0
  37. package/dist/src/utils/failure-diagnosis.js.map +1 -1
  38. package/docs/mcp-server-safety-index.md +1 -1
  39. package/docs/safety-index/artifacts/antv-chart-server.json +21 -21
  40. package/docs/safety-index/artifacts/antv-chart-server.md +10 -10
  41. package/docs/safety-index/artifacts/browsermcp-server.json +18 -18
  42. package/docs/safety-index/artifacts/browsermcp-server.md +9 -9
  43. package/docs/safety-index/artifacts/chrome-devtools-mcp-server.json +19 -19
  44. package/docs/safety-index/artifacts/chrome-devtools-mcp-server.md +9 -9
  45. package/docs/safety-index/artifacts/cloudflare-server.json +4 -4
  46. package/docs/safety-index/artifacts/cloudflare-server.md +4 -4
  47. package/docs/safety-index/artifacts/context7-server.json +18 -18
  48. package/docs/safety-index/artifacts/context7-server.md +10 -10
  49. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +34 -34
  50. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +15 -15
  51. package/docs/safety-index/artifacts/everything-server.json +18 -18
  52. package/docs/safety-index/artifacts/everything-server.md +11 -11
  53. package/docs/safety-index/artifacts/executeautomation-playwright-server.json +19 -19
  54. package/docs/safety-index/artifacts/executeautomation-playwright-server.md +11 -11
  55. package/docs/safety-index/artifacts/filesystem-mcp-server.json +19 -19
  56. package/docs/safety-index/artifacts/filesystem-mcp-server.md +10 -10
  57. package/docs/safety-index/artifacts/filesystem-server.json +19 -19
  58. package/docs/safety-index/artifacts/filesystem-server.md +10 -10
  59. package/docs/safety-index/artifacts/github-mcp-server.json +18 -18
  60. package/docs/safety-index/artifacts/github-mcp-server.md +9 -9
  61. package/docs/safety-index/artifacts/google-drive-server.json +4 -4
  62. package/docs/safety-index/artifacts/google-drive-server.md +4 -4
  63. package/docs/safety-index/artifacts/kubernetes-server.json +23 -23
  64. package/docs/safety-index/artifacts/kubernetes-server.md +15 -15
  65. package/docs/safety-index/artifacts/memory-server.json +18 -18
  66. package/docs/safety-index/artifacts/memory-server.md +10 -10
  67. package/docs/safety-index/artifacts/mongodb-server.json +4 -4
  68. package/docs/safety-index/artifacts/mongodb-server.md +4 -4
  69. package/docs/safety-index/artifacts/opentofu-server.json +18 -18
  70. package/docs/safety-index/artifacts/opentofu-server.md +9 -9
  71. package/docs/safety-index/artifacts/playwright-mcp-server.json +18 -18
  72. package/docs/safety-index/artifacts/playwright-mcp-server.md +9 -9
  73. package/docs/safety-index/artifacts/promptopia-server.json +21 -21
  74. package/docs/safety-index/artifacts/promptopia-server.md +11 -11
  75. package/docs/safety-index/artifacts/puppeteer-server.json +18 -18
  76. package/docs/safety-index/artifacts/puppeteer-server.md +9 -9
  77. package/docs/safety-index/artifacts/qdrant-server.json +4 -4
  78. package/docs/safety-index/artifacts/qdrant-server.md +4 -4
  79. package/docs/safety-index/artifacts/ref-tools-server.json +18 -18
  80. package/docs/safety-index/artifacts/ref-tools-server.md +10 -10
  81. package/docs/safety-index/artifacts/sequential-thinking-server.json +18 -18
  82. package/docs/safety-index/artifacts/sequential-thinking-server.md +8 -8
  83. package/docs/safety-index/artifacts/slack-server.json +3 -3
  84. package/docs/safety-index/artifacts/slack-server.md +2 -2
  85. package/docs/safety-index/artifacts/ui5-mcp-server.json +18 -18
  86. package/docs/safety-index/artifacts/ui5-mcp-server.md +9 -9
  87. package/docs/safety-index/artifacts/vercel-ai-server.json +4 -4
  88. package/docs/safety-index/artifacts/vercel-ai-server.md +4 -4
  89. package/package.json +2 -2
  90. package/dist/src/adapters/base.d.ts +0 -14
  91. package/dist/src/adapters/base.js +0 -2
  92. package/dist/src/adapters/base.js.map +0 -1
  93. package/dist/src/checks/semantics.d.ts +0 -2
  94. package/dist/src/checks/semantics.js +0 -48
  95. package/dist/src/checks/semantics.js.map +0 -1
  96. package/dist/src/diff/diff.d.ts +0 -2
  97. package/dist/src/diff/diff.js +0 -81
  98. package/dist/src/diff/diff.js.map +0 -1
  99. package/dist/src/reporters/json.d.ts +0 -2
  100. package/dist/src/reporters/json.js +0 -4
  101. package/dist/src/reporters/json.js.map +0 -1
  102. package/dist/src/runner/runner.d.ts +0 -2
  103. package/dist/src/runner/runner.js +0 -135
  104. package/dist/src/runner/runner.js.map +0 -1
  105. package/dist/src/storage/filesystem.d.ts +0 -6
  106. package/dist/src/storage/filesystem.js +0 -21
  107. package/dist/src/storage/filesystem.js.map +0 -1
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "pass",
5
- "runId": "run_2026-07-15T223314258Z_b0743985",
6
- "createdAt": "2026-07-15T22:33:14.258Z",
7
- "toolVersion": "1.32.1",
5
+ "runId": "run_2026-07-17T003620107Z_b35a41cd",
6
+ "createdAt": "2026-07-17T00:36:20.107Z",
7
+ "toolVersion": "1.33.0",
8
8
  "target": {
9
9
  "targetId": "sequential-thinking-server",
10
10
  "adapter": "local-process",
@@ -43,7 +43,7 @@
43
43
  "id": "tools",
44
44
  "capability": "tools",
45
45
  "status": "pass",
46
- "durationMs": 3.7027079999998023,
46
+ "durationMs": 4.0713330000003225,
47
47
  "message": "Advertised capability responded with the minimal expected shape (1 item).",
48
48
  "evidence": [
49
49
  {
@@ -122,7 +122,7 @@
122
122
  "id": "prompts",
123
123
  "capability": "prompts",
124
124
  "status": "unsupported",
125
- "durationMs": 0.0025829999999587017,
125
+ "durationMs": 0.0029160000003685127,
126
126
  "message": "Prompts are not advertised by the target.",
127
127
  "evidence": [
128
128
  {
@@ -138,7 +138,7 @@
138
138
  "id": "resources",
139
139
  "capability": "resources",
140
140
  "status": "unsupported",
141
- "durationMs": 0.0014160000000629225,
141
+ "durationMs": 0.001374999999825377,
142
142
  "message": "Resources are not advertised by the target.",
143
143
  "evidence": [
144
144
  {
@@ -154,7 +154,7 @@
154
154
  "id": "security-lite",
155
155
  "capability": "security-lite",
156
156
  "status": "pass",
157
- "durationMs": 0.028458000000227912,
157
+ "durationMs": 0.026624999999967258,
158
158
  "message": "No security issues detected (lightweight scan).",
159
159
  "evidence": [
160
160
  {
@@ -170,7 +170,7 @@
170
170
  "id": "runtime-profile",
171
171
  "capability": "runtime-profile",
172
172
  "status": "pass",
173
- "durationMs": 0.07162500000004002,
173
+ "durationMs": 0.06950000000006185,
174
174
  "message": "Detected 0 potential egress target(s) and 1 potential state mutation(s) with low confidence.",
175
175
  "evidence": [
176
176
  {
@@ -199,7 +199,7 @@
199
199
  "id": "conformance",
200
200
  "capability": "conformance",
201
201
  "status": "pass",
202
- "durationMs": 1.5712499999999636,
202
+ "durationMs": 1.612833000000137,
203
203
  "message": "All 7 conformance checks passed.",
204
204
  "evidence": [
205
205
  {
@@ -225,7 +225,7 @@
225
225
  "id": "schema-quality",
226
226
  "capability": "schema-quality",
227
227
  "status": "pass",
228
- "durationMs": 0.81179099999963,
228
+ "durationMs": 0.8796670000001541,
229
229
  "message": "All 1 item(s) have good schema quality.",
230
230
  "evidence": [
231
231
  {
@@ -242,7 +242,7 @@
242
242
  "id": "security",
243
243
  "capability": "security",
244
244
  "status": "pass",
245
- "durationMs": 0.9031660000000556,
245
+ "durationMs": 0.9446669999997539,
246
246
  "message": "No security issues detected.",
247
247
  "evidence": [
248
248
  {
@@ -258,7 +258,7 @@
258
258
  "id": "attack-sim",
259
259
  "capability": "attack-sim",
260
260
  "status": "pass",
261
- "durationMs": 0.8238340000002609,
261
+ "durationMs": 0.8807080000001406,
262
262
  "message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
263
263
  "evidence": [
264
264
  {
@@ -317,17 +317,17 @@
317
317
  "weight": 0.1,
318
318
  "score": 100,
319
319
  "details": [
320
- "Connect: 840ms",
320
+ "Connect: 647ms",
321
321
  "p95 latency: 4ms (3 operations)"
322
322
  ]
323
323
  }
324
324
  ]
325
325
  },
326
326
  "performanceMetrics": {
327
- "connectMs": 839.9979169999999,
328
- "toolsListMs": 3.7027079999998023,
329
- "promptsListMs": 0.0025829999999587017,
330
- "resourcesListMs": 0.0014160000000629225
327
+ "connectMs": 646.8518750000001,
328
+ "toolsListMs": 4.0713330000003225,
329
+ "promptsListMs": 0.0029160000003685127,
330
+ "resourcesListMs": 0.001374999999825377
331
331
  },
332
332
  "runtimeProfile": {
333
333
  "stateMutations": [
@@ -338,7 +338,7 @@
338
338
  "source": "description_analysis"
339
339
  }
340
340
  ],
341
- "analyzedAt": "2026-07-15T22:33:15.104Z",
341
+ "analyzedAt": "2026-07-17T00:36:20.759Z",
342
342
  "confidence": "medium"
343
343
  }
344
344
  }
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-07-15T22:33:14.258Z
3
+ Generated at 2026-07-17T00:36:20.107Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -56,7 +56,7 @@ The following state-modifying operations were identified from tool schemas:
56
56
  | --- | --- | --- | --- |
57
57
  | filesystem | write | working_directory | description_analysis |
58
58
 
59
- _Analyzed at 2026-07-15T22:33:15.104Z_
59
+ _Analyzed at 2026-07-17T00:36:20.759Z_
60
60
 
61
61
  ## Regressions and Recoveries
62
62
 
@@ -66,13 +66,13 @@ _Use the `diff` command against another run artifact to classify regressions and
66
66
 
67
67
  | Focus | Check | Status | Duration (ms) | Message |
68
68
  | --- | --- | --- | --- | --- |
69
- | healthy | attack-sim | pass | 0.82 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
70
- | healthy | conformance | pass | 1.57 | All 7 conformance checks passed. |
69
+ | healthy | attack-sim | pass | 0.88 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
70
+ | healthy | conformance | pass | 1.61 | All 7 conformance checks passed. |
71
71
  | healthy | runtime-profile | pass | 0.07 | Detected 0 potential egress target(s) and 1 potential state mutation(s) with low confidence. |
72
- | healthy | schema-quality | pass | 0.81 | All 1 item(s) have good schema quality. |
73
- | healthy | security | pass | 0.90 | No security issues detected. |
72
+ | healthy | schema-quality | pass | 0.88 | All 1 item(s) have good schema quality. |
73
+ | healthy | security | pass | 0.94 | No security issues detected. |
74
74
  | healthy | security-lite | pass | 0.03 | No security issues detected (lightweight scan). |
75
- | healthy | tools | pass | 3.70 | Advertised capability responded with the minimal expected shape (1 item). |
75
+ | healthy | tools | pass | 4.07 | Advertised capability responded with the minimal expected shape (1 item). |
76
76
  | confirm intent | prompts | unsupported | 0.00 | Prompts are not advertised by the target. |
77
77
  | confirm intent | resources | unsupported | 0.00 | Resources are not advertised by the target. |
78
78
 
@@ -197,5 +197,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
197
197
 
198
198
  - Artifact type: `run`
199
199
  - Schema version: `1.0.0`
200
- - Run ID: `run_2026-07-15T223314258Z_b0743985`
200
+ - Run ID: `run_2026-07-17T003620107Z_b35a41cd`
201
201
  - Gate: `pass`
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "fail",
5
- "runId": "run_2026-07-15T223336781Z_035e5f9c",
6
- "createdAt": "2026-07-15T22:33:36.781Z",
7
- "toolVersion": "1.32.1",
5
+ "runId": "run_2026-07-17T003640236Z_77e3fca5",
6
+ "createdAt": "2026-07-17T00:36:40.236Z",
7
+ "toolVersion": "1.33.0",
8
8
  "target": {
9
9
  "targetId": "slack-server",
10
10
  "adapter": "local-process",
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-07-15T22:33:36.781Z
3
+ Generated at 2026-07-17T00:36:40.236Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -98,5 +98,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
98
98
 
99
99
  - Artifact type: `run`
100
100
  - Schema version: `1.0.0`
101
- - Run ID: `run_2026-07-15T223336781Z_035e5f9c`
101
+ - Run ID: `run_2026-07-17T003640236Z_77e3fca5`
102
102
  - Gate: `fail`
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "pass",
5
- "runId": "run_2026-07-15T223324907Z_f645b10f",
6
- "createdAt": "2026-07-15T22:33:24.907Z",
7
- "toolVersion": "1.32.1",
5
+ "runId": "run_2026-07-17T003628663Z_79935e31",
6
+ "createdAt": "2026-07-17T00:36:28.663Z",
7
+ "toolVersion": "1.33.0",
8
8
  "target": {
9
9
  "targetId": "ui5-mcp-server",
10
10
  "adapter": "local-process",
@@ -43,7 +43,7 @@
43
43
  "id": "tools",
44
44
  "capability": "tools",
45
45
  "status": "pass",
46
- "durationMs": 6.0552499999994325,
46
+ "durationMs": 6.485999999998967,
47
47
  "message": "Advertised capability responded with the minimal expected shape (10 items).",
48
48
  "evidence": [
49
49
  {
@@ -306,7 +306,7 @@
306
306
  "id": "prompts",
307
307
  "capability": "prompts",
308
308
  "status": "unsupported",
309
- "durationMs": 0.000959000000875676,
309
+ "durationMs": 0.00112500000068394,
310
310
  "message": "Prompts are not advertised by the target.",
311
311
  "evidence": [
312
312
  {
@@ -322,7 +322,7 @@
322
322
  "id": "resources",
323
323
  "capability": "resources",
324
324
  "status": "unsupported",
325
- "durationMs": 0.003582999999707681,
325
+ "durationMs": 0.0020839999997406267,
326
326
  "message": "Resources are not advertised by the target.",
327
327
  "evidence": [
328
328
  {
@@ -338,7 +338,7 @@
338
338
  "id": "security-lite",
339
339
  "capability": "security-lite",
340
340
  "status": "pass",
341
- "durationMs": 0.042625000000043656,
341
+ "durationMs": 0.04324999999880674,
342
342
  "message": "No security issues detected (lightweight scan).",
343
343
  "evidence": [
344
344
  {
@@ -354,7 +354,7 @@
354
354
  "id": "runtime-profile",
355
355
  "capability": "runtime-profile",
356
356
  "status": "pass",
357
- "durationMs": 0.13058300000011513,
357
+ "durationMs": 0.13175000000046566,
358
358
  "message": "Detected 4 potential egress target(s) and 23 potential state mutation(s) with low confidence.",
359
359
  "evidence": [
360
360
  {
@@ -539,7 +539,7 @@
539
539
  "id": "conformance",
540
540
  "capability": "conformance",
541
541
  "status": "pass",
542
- "durationMs": 6.743291000000681,
542
+ "durationMs": 7.999833999998373,
543
543
  "message": "All 7 conformance checks passed.",
544
544
  "evidence": [
545
545
  {
@@ -565,7 +565,7 @@
565
565
  "id": "schema-quality",
566
566
  "capability": "schema-quality",
567
567
  "status": "pass",
568
- "durationMs": 2.819208000000799,
568
+ "durationMs": 3.1947500000005675,
569
569
  "message": "All 10 item(s) have good schema quality.",
570
570
  "evidence": [
571
571
  {
@@ -582,7 +582,7 @@
582
582
  "id": "security",
583
583
  "capability": "security",
584
584
  "status": "pass",
585
- "durationMs": 3.3632920000000013,
585
+ "durationMs": 3.4622500000004948,
586
586
  "message": "No security issues detected.",
587
587
  "evidence": [
588
588
  {
@@ -598,7 +598,7 @@
598
598
  "id": "attack-sim",
599
599
  "capability": "attack-sim",
600
600
  "status": "pass",
601
- "durationMs": 3.940042000000176,
601
+ "durationMs": 3.3021669999998267,
602
602
  "message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
603
603
  "evidence": [
604
604
  {
@@ -657,17 +657,17 @@
657
657
  "weight": 0.1,
658
658
  "score": 100,
659
659
  "details": [
660
- "Connect: 1384ms",
660
+ "Connect: 1336ms",
661
661
  "p95 latency: 6ms (3 operations)"
662
662
  ]
663
663
  }
664
664
  ]
665
665
  },
666
666
  "performanceMetrics": {
667
- "connectMs": 1383.5355830000008,
668
- "toolsListMs": 6.0552499999994325,
669
- "promptsListMs": 0.000959000000875676,
670
- "resourcesListMs": 0.003582999999707681
667
+ "connectMs": 1336.3704159999998,
668
+ "toolsListMs": 6.485999999998967,
669
+ "promptsListMs": 0.00112500000068394,
670
+ "resourcesListMs": 0.0020839999997406267
671
671
  },
672
672
  "runtimeProfile": {
673
673
  "egress": [
@@ -836,7 +836,7 @@
836
836
  "source": "description_analysis"
837
837
  }
838
838
  ],
839
- "analyzedAt": "2026-07-15T22:33:26.301Z",
839
+ "analyzedAt": "2026-07-17T00:36:30.010Z",
840
840
  "confidence": "medium"
841
841
  }
842
842
  }
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-07-15T22:33:24.907Z
3
+ Generated at 2026-07-17T00:36:28.663Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -55,7 +55,7 @@ The following targets were identified as potentially reachable by this server (c
55
55
  | Whether to include supplementary information in the output. This includes UI5 API reference and documentation resources. When calling the tool multiple times for the same file or project, refrain from requesting additional context every time. | unknown | description_analysis | medium |
56
56
  | run_ui5_linter | unknown | description_analysis | low |
57
57
  | get_api_reference | unknown | description_analysis | low |
58
- | URL of an OData V4 service, if applicable. This is entirely optional, but without it, the generated app UI will have no OData Model configured. Setting an URL will configure an OData V4 model in the application. Only works for OData V4 services, not for OData V2. The URL must be either a valid complete URL starting with http:// or https:// or a server-root-relative URL like '/odata/v4/serviceName' when the OData service is running on the same server. In this case, the prefix 'http://&lt;host&gt;:4004/' will be assumed and used by this tool for inquiries about the service. When the port is not 4004, a complete 'http://&lt;host&gt;:&lt;port&gt;' URL must be provided. In the generated application, any 'http://&lt;host&gt;:&lt;port&gt;' prefix will be removed. HINT: when the project is a SAP CAP project and CAP/CDS tools are available, you **MUST** use them to search for OData services and entities and properties **BEFORE** calling this tool. This will help you find the correct service URL. | unknown | description_analysis | medium |
58
+ | URL of an OData V4 service, if applicable. This is entirely optional, but without it, the generated app UI will have no OData Model configured. Setting an URL will configure an OData V4 model in the application. Only works for OData V4 services, not for OData V2. The URL must be either a valid complete URL starting with http:// or https:// or a server-root-relative URL like '/odata/v4/serviceName' when the OData service is running on the same server. In this case, the prefix 'http://localhost:4004/' will be assumed and used by this tool for inquiries about the service. When the port is not 4004, a complete 'http://localhost:<port>...' URL must be provided. In the generated application, any 'http://localhost:<port>' prefix will be removed. HINT: when the project is a SAP CAP project and CAP/CDS tools are available, you **MUST** use them to search for OData services and entities and properties **BEFORE** calling this tool. This will help you find the correct service URL. | unknown | description_analysis | medium |
59
59
 
60
60
  ### State Mutations
61
61
 
@@ -87,7 +87,7 @@ The following state-modifying operations were identified from tool schemas:
87
87
  | filesystem | write | working_directory | description_analysis |
88
88
  | filesystem | execute | working_directory | description_analysis |
89
89
 
90
- _Analyzed at 2026-07-15T22:33:26.301Z_
90
+ _Analyzed at 2026-07-17T00:36:30.010Z_
91
91
 
92
92
  ## Regressions and Recoveries
93
93
 
@@ -97,13 +97,13 @@ _Use the `diff` command against another run artifact to classify regressions and
97
97
 
98
98
  | Focus | Check | Status | Duration (ms) | Message |
99
99
  | --- | --- | --- | --- | --- |
100
- | healthy | attack-sim | pass | 3.94 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
101
- | healthy | conformance | pass | 6.74 | All 7 conformance checks passed. |
100
+ | healthy | attack-sim | pass | 3.30 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
101
+ | healthy | conformance | pass | 8.00 | All 7 conformance checks passed. |
102
102
  | healthy | runtime-profile | pass | 0.13 | Detected 4 potential egress target(s) and 23 potential state mutation(s) with low confidence. |
103
- | healthy | schema-quality | pass | 2.82 | All 10 item(s) have good schema quality. |
104
- | healthy | security | pass | 3.36 | No security issues detected. |
103
+ | healthy | schema-quality | pass | 3.19 | All 10 item(s) have good schema quality. |
104
+ | healthy | security | pass | 3.46 | No security issues detected. |
105
105
  | healthy | security-lite | pass | 0.04 | No security issues detected (lightweight scan). |
106
- | healthy | tools | pass | 6.06 | Advertised capability responded with the minimal expected shape (10 items). |
106
+ | healthy | tools | pass | 6.49 | Advertised capability responded with the minimal expected shape (10 items). |
107
107
  | confirm intent | prompts | unsupported | 0.00 | Prompts are not advertised by the target. |
108
108
  | confirm intent | resources | unsupported | 0.00 | Resources are not advertised by the target. |
109
109
 
@@ -228,5 +228,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
228
228
 
229
229
  - Artifact type: `run`
230
230
  - Schema version: `1.0.0`
231
- - Run ID: `run_2026-07-15T223324907Z_f645b10f`
231
+ - Run ID: `run_2026-07-17T003628663Z_79935e31`
232
232
  - Gate: `pass`
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "fail",
5
- "runId": "run_2026-07-15T223338984Z_2a29a957",
6
- "createdAt": "2026-07-15T22:33:38.984Z",
7
- "toolVersion": "1.32.1",
5
+ "runId": "run_2026-07-17T003642758Z_399f4873",
6
+ "createdAt": "2026-07-17T00:36:42.758Z",
7
+ "toolVersion": "1.33.0",
8
8
  "target": {
9
9
  "targetId": "vercel-ai-server",
10
10
  "adapter": "local-process",
@@ -62,5 +62,5 @@
62
62
  "evidence": []
63
63
  }
64
64
  ],
65
- "fatalError": "Could not establish a plain stdio MCP session for target `vercel-ai-server`.\nCommand: npx -y @anthropic/mcp-server-vercel-ai\nDiagnosis: The process exited or detached before MCP initialization completed.\nRaw error: MCP error -32000: Connection closed\nLikely causes:\n- The package may expect extra startup arguments or environment variables.\n- The package may not behave like a plain local-process stdio target under this invocation.\n- The server may be crashing immediately and only leaving clues on stderr.\nNext steps:\n- Run the command manually and look for usage output, auth prompts, or crash text.\n- Check whether the package expects a different transport or an app-oriented startup flow.\n- Use the recent stderr lines below before assuming this is a harness bug.\nRecent stderr:\n- npm error 404 '@anthropic/mcp-server-vercel-ai@*' is not in this registry.\n- npm error 404\n- npm error 404 Note that you can also install from a\n- npm error 404 tarball, folder, http url, or git url.\n- npm error A complete log of this run can be found in: /Users/williamweishuhn/.npm/_logs/2026-07-15T22_33_39_057Z-debug-0.log"
65
+ "fatalError": "Could not establish a plain stdio MCP session for target `vercel-ai-server`.\nCommand: npx -y @anthropic/mcp-server-vercel-ai\nDiagnosis: The process exited or detached before MCP initialization completed.\nRaw error: MCP error -32000: Connection closed\nLikely causes:\n- The package may expect extra startup arguments or environment variables.\n- The package may not behave like a plain local-process stdio target under this invocation.\n- The server may be crashing immediately and only leaving clues on stderr.\nNext steps:\n- Run the command manually and look for usage output, auth prompts, or crash text.\n- Check whether the package expects a different transport or an app-oriented startup flow.\n- Use the recent stderr lines below before assuming this is a harness bug.\nRecent stderr:\n- npm error 404 The requested resource '@anthropic/mcp-server-vercel-ai@*' could not be found or you do not have permission to access it.\n- npm error 404\n- npm error 404 Note that you can also install from a\n- npm error 404 tarball, folder, http url, or git url.\n- npm error A complete log of this run can be found in: /Users/williamweishuhn/.npm/_logs/2026-07-17T00_36_42_834Z-debug-0.log"
66
66
  }
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-07-15T22:33:38.984Z
3
+ Generated at 2026-07-17T00:36:42.758Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -56,11 +56,11 @@ Next steps:
56
56
  - Check whether the package expects a different transport or an app-oriented startup flow.
57
57
  - Use the recent stderr lines below before assuming this is a harness bug.
58
58
  Recent stderr:
59
- - npm error 404 '@anthropic/mcp-server-vercel-ai@*' is not in this registry.
59
+ - npm error 404 The requested resource '@anthropic/mcp-server-vercel-ai@*' could not be found or you do not have permission to access it.
60
60
  - npm error 404
61
61
  - npm error 404 Note that you can also install from a
62
62
  - npm error 404 tarball, folder, http url, or git url.
63
- - npm error A complete log of this run can be found in: /Users/williamweishuhn/.npm/_logs/2026-07-15T22_33_39_057Z-debug-0.log
63
+ - npm error A complete log of this run can be found in: /Users/williamweishuhn/.npm/_logs/2026-07-17T00_36_42_834Z-debug-0.log
64
64
  ```
65
65
 
66
66
  ## Full Capability Status Table
@@ -102,5 +102,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
102
102
 
103
103
  - Artifact type: `run`
104
104
  - Schema version: `1.0.0`
105
- - Run ID: `run_2026-07-15T223338984Z_2a29a957`
105
+ - Run ID: `run_2026-07-17T003642758Z_399f4873`
106
106
  - Gate: `fail`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kryptosai/mcp-observatory",
3
- "version": "1.33.0",
3
+ "version": "1.34.0",
4
4
  "description": "Ship safer MCP servers. Test, secure, and monitor the MCP servers you're building — CI-native scanning, attack simulation, and security gates.",
5
5
  "mcpName": "io.github.KryptosAI/mcp-observatory",
6
6
  "license": "MIT",
@@ -178,7 +178,7 @@
178
178
  "eslint": "10.7.0",
179
179
  "globals": "17.7.0",
180
180
  "tsx": "4.23.1",
181
- "typescript": "7.0.2",
181
+ "typescript": "~5.8.0",
182
182
  "typescript-eslint": "8.64.0",
183
183
  "vitest": "4.1.10"
184
184
  }
@@ -1,14 +0,0 @@
1
- import type { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
- import type { ServerCapabilities } from "@modelcontextprotocol/sdk/types.js";
3
- import type { TargetConfig } from "../types.js";
4
- export interface AdapterSession {
5
- client: Client;
6
- serverCapabilities?: ServerCapabilities;
7
- serverName?: string;
8
- serverVersion?: string;
9
- stderrLines: string[];
10
- close(): Promise<void>;
11
- }
12
- export interface TargetAdapter {
13
- connect(target: TargetConfig): Promise<AdapterSession>;
14
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/adapters/base.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import { type CapabilityObservation, type ObservedCheck } from "./base.js";
2
- export declare function runSemanticsCheck(observations: CapabilityObservation[], stderrLines: string[]): ObservedCheck;
@@ -1,48 +0,0 @@
1
- import { performance } from "node:perf_hooks";
2
- import { makeCheckResult } from "./base.js";
3
- export function runSemanticsCheck(observations, stderrLines) {
4
- const startedAt = performance.now();
5
- const advertised = observations.filter((observation) => observation.advertised);
6
- const failingCapabilities = advertised
7
- .filter((observation) => !observation.responded)
8
- .map((observation) => observation.capability);
9
- const partialCapabilities = advertised
10
- .filter((observation) => observation.responded && !observation.minimalShapePresent)
11
- .map((observation) => observation.capability);
12
- const passingCapabilities = advertised
13
- .filter((observation) => observation.responded && observation.minimalShapePresent)
14
- .map((observation) => observation.capability);
15
- let status = "pass";
16
- let message = "Advertised capabilities responded and returned the minimal expected shape.";
17
- if (advertised.length === 0) {
18
- status = "unsupported";
19
- message = "No capabilities were advertised, so semantics could not be evaluated.";
20
- }
21
- else if (failingCapabilities.length > 0) {
22
- status = "fail";
23
- message = `Advertised capabilities that did not respond cleanly: ${failingCapabilities.join(", ")}.`;
24
- }
25
- else if (partialCapabilities.length > 0) {
26
- status = "partial";
27
- message =
28
- `Advertised capabilities responded with caveats: ${partialCapabilities.join(", ")}.`;
29
- }
30
- else if (passingCapabilities.length > 0) {
31
- message =
32
- `Advertised capabilities responded and returned the minimal expected shape: ${passingCapabilities.join(", ")}.`;
33
- }
34
- return {
35
- result: makeCheckResult("semantics", status, performance.now() - startedAt, message, observations.map((observation) => ({
36
- endpoint: observation.endpoint,
37
- advertised: observation.advertised,
38
- responded: observation.responded,
39
- minimalShapePresent: observation.minimalShapePresent,
40
- itemCount: observation.itemCount,
41
- identifiers: observation.identifiers,
42
- diagnostics: stderrLines.length > 0
43
- ? [...observation.diagnostics, ...stderrLines.slice(-5)]
44
- : observation.diagnostics
45
- })))
46
- };
47
- }
48
- //# sourceMappingURL=semantics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semantics.js","sourceRoot":"","sources":["../../../src/checks/semantics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EACL,eAAe,EAGhB,MAAM,WAAW,CAAC;AAEnB,MAAM,UAAU,iBAAiB,CAC/B,YAAqC,EACrC,WAAqB;IAErB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAChF,MAAM,mBAAmB,GAAG,UAAU;SACnC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;SAC/C,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,UAAU;SACnC,MAAM,CACL,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAC5D;SACA,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,UAAU;SACnC,MAAM,CACL,CAAC,WAAW,EAAE,EAAE,CACd,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,mBAAmB,CAC3D;SACA,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,MAAM,GAAsC,MAAM,CAAC;IACvD,IAAI,OAAO,GACT,4EAA4E,CAAC;IAE/E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,aAAa,CAAC;QACvB,OAAO,GAAG,uEAAuE,CAAC;IACpF,CAAC;SAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,GAAG,MAAM,CAAC;QAChB,OAAO,GAAG,yDAAyD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACvG,CAAC;SAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,GAAG,SAAS,CAAC;QACnB,OAAO;YACL,mDAAmD,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACzF,CAAC;SAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO;YACL,8EAA8E,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACpH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,eAAe,CACrB,WAAW,EACX,MAAM,EACN,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,EAC7B,OAAO,EACP,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACjC,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;YACpD,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,WAAW,EACT,WAAW,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,CAAC,CAAC,WAAW,CAAC,WAAW;SAC9B,CAAC,CAAC,CACJ;KACF,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { DiffArtifact, RunArtifact } from "../types.js";
2
- export declare function diffArtifacts(base: RunArtifact, head: RunArtifact): DiffArtifact;
@@ -1,81 +0,0 @@
1
- import { SCHEMA_VERSION } from "../types.js";
2
- const STATUS_RANK = {
3
- pass: 6,
4
- partial: 5,
5
- flaky: 4,
6
- unsupported: 3,
7
- skipped: 2,
8
- fail: 1
9
- };
10
- function toEntry(base, head) {
11
- const source = head ?? base;
12
- if (source === undefined) {
13
- throw new Error("Expected at least one check result when building a diff entry.");
14
- }
15
- return {
16
- id: source.id,
17
- capability: source.capability,
18
- fromStatus: base?.status,
19
- toStatus: head?.status,
20
- message: head?.message ??
21
- base?.message ??
22
- "No additional diagnostic message was recorded."
23
- };
24
- }
25
- export function diffArtifacts(base, head) {
26
- const baseChecks = new Map(base.checks.map((check) => [check.id, check]));
27
- const headChecks = new Map(head.checks.map((check) => [check.id, check]));
28
- const checkIds = Array.from(new Set([...baseChecks.keys(), ...headChecks.keys()]));
29
- const regressions = [];
30
- const recoveries = [];
31
- const unchanged = [];
32
- const added = [];
33
- const removed = [];
34
- for (const checkId of checkIds) {
35
- const baseCheck = baseChecks.get(checkId);
36
- const headCheck = headChecks.get(checkId);
37
- if (baseCheck === undefined && headCheck !== undefined) {
38
- added.push(toEntry(undefined, headCheck));
39
- continue;
40
- }
41
- if (baseCheck !== undefined && headCheck === undefined) {
42
- removed.push(toEntry(baseCheck, undefined));
43
- continue;
44
- }
45
- if (baseCheck === undefined || headCheck === undefined) {
46
- continue;
47
- }
48
- if (baseCheck.status === headCheck.status) {
49
- unchanged.push(toEntry(baseCheck, headCheck));
50
- continue;
51
- }
52
- if (STATUS_RANK[headCheck.status] < STATUS_RANK[baseCheck.status]) {
53
- regressions.push(toEntry(baseCheck, headCheck));
54
- continue;
55
- }
56
- recoveries.push(toEntry(baseCheck, headCheck));
57
- }
58
- const summary = {
59
- regressions: regressions.length,
60
- recoveries: recoveries.length,
61
- unchanged: unchanged.length,
62
- added: added.length,
63
- removed: removed.length,
64
- gate: regressions.length > 0 ? "fail" : "pass"
65
- };
66
- return {
67
- artifactType: "diff",
68
- schemaVersion: SCHEMA_VERSION,
69
- gate: summary.gate,
70
- baseRunId: base.runId,
71
- headRunId: head.runId,
72
- createdAt: new Date().toISOString(),
73
- summary,
74
- regressions,
75
- recoveries,
76
- unchanged,
77
- added,
78
- removed
79
- };
80
- }
81
- //# sourceMappingURL=diff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/diff/diff.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { DiffArtifact, RunArtifact } from "../types.js";
2
- export declare function renderJson(artifact: RunArtifact | DiffArtifact): string;
@@ -1,4 +0,0 @@
1
- export function renderJson(artifact) {
2
- return JSON.stringify(artifact, null, 2);
3
- }
4
- //# sourceMappingURL=json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/reporters/json.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,QAAoC;IAC7D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,2 +0,0 @@
1
- import type { RunArtifact, TargetConfig } from "../types.js";
2
- export declare function runTarget(target: TargetConfig): Promise<RunArtifact>;