@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.
Files changed (160) hide show
  1. package/COMMERCIAL.md +28 -2
  2. package/CONTRIBUTORS.md +39 -0
  3. package/README.md +114 -22
  4. package/dist/src/action-receipt.d.ts +20 -0
  5. package/dist/src/action-receipt.js +85 -0
  6. package/dist/src/action-receipt.js.map +1 -0
  7. package/dist/src/adapters/http.js +1 -5
  8. package/dist/src/adapters/http.js.map +1 -1
  9. package/dist/src/audit.d.ts +64 -0
  10. package/dist/src/audit.js +359 -0
  11. package/dist/src/audit.js.map +1 -0
  12. package/dist/src/cassette.js +3 -2
  13. package/dist/src/cassette.js.map +1 -1
  14. package/dist/src/checks/attack-sim.d.ts +20 -0
  15. package/dist/src/checks/attack-sim.js +316 -0
  16. package/dist/src/checks/attack-sim.js.map +1 -0
  17. package/dist/src/ci-issue.js +4 -3
  18. package/dist/src/ci-issue.js.map +1 -1
  19. package/dist/src/cli.js +25 -4
  20. package/dist/src/cli.js.map +1 -1
  21. package/dist/src/commands/attack-sim.d.ts +2 -0
  22. package/dist/src/commands/attack-sim.js +220 -0
  23. package/dist/src/commands/attack-sim.js.map +1 -0
  24. package/dist/src/commands/audit.d.ts +2 -0
  25. package/dist/src/commands/audit.js +132 -0
  26. package/dist/src/commands/audit.js.map +1 -0
  27. package/dist/src/commands/init-ci.d.ts +3 -0
  28. package/dist/src/commands/init-ci.js +78 -13
  29. package/dist/src/commands/init-ci.js.map +1 -1
  30. package/dist/src/commands/legacy.js +8 -1
  31. package/dist/src/commands/legacy.js.map +1 -1
  32. package/dist/src/commands/receipt.d.ts +2 -0
  33. package/dist/src/commands/receipt.js +113 -0
  34. package/dist/src/commands/receipt.js.map +1 -0
  35. package/dist/src/commands/scan.js +30 -6
  36. package/dist/src/commands/scan.js.map +1 -1
  37. package/dist/src/commands/score.js +63 -0
  38. package/dist/src/commands/score.js.map +1 -1
  39. package/dist/src/commands/serve.js +9 -1
  40. package/dist/src/commands/serve.js.map +1 -1
  41. package/dist/src/commands/setup-ci-conversion.d.ts +3 -1
  42. package/dist/src/commands/setup-ci-conversion.js +23 -8
  43. package/dist/src/commands/setup-ci-conversion.js.map +1 -1
  44. package/dist/src/commands/telemetry.js +20 -14
  45. package/dist/src/commands/telemetry.js.map +1 -1
  46. package/dist/src/commands/test.js +31 -2
  47. package/dist/src/commands/test.js.map +1 -1
  48. package/dist/src/findings.d.ts +1 -0
  49. package/dist/src/findings.js +42 -1
  50. package/dist/src/findings.js.map +1 -1
  51. package/dist/src/history.js +3 -2
  52. package/dist/src/history.js.map +1 -1
  53. package/dist/src/index.d.ts +4 -0
  54. package/dist/src/index.js +4 -0
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/integrations/smithery.js +5 -1
  57. package/dist/src/integrations/smithery.js.map +1 -1
  58. package/dist/src/receipt.d.ts +100 -0
  59. package/dist/src/receipt.js +375 -0
  60. package/dist/src/receipt.js.map +1 -0
  61. package/dist/src/reporters/attack-sim.d.ts +2 -0
  62. package/dist/src/reporters/attack-sim.js +89 -0
  63. package/dist/src/reporters/attack-sim.js.map +1 -0
  64. package/dist/src/reporters/pr-comment.js +20 -6
  65. package/dist/src/reporters/pr-comment.js.map +1 -1
  66. package/dist/src/reporters/sarif.js +11 -1
  67. package/dist/src/reporters/sarif.js.map +1 -1
  68. package/dist/src/runner.d.ts +3 -0
  69. package/dist/src/runner.js +5 -0
  70. package/dist/src/runner.js.map +1 -1
  71. package/dist/src/score.js +1 -1
  72. package/dist/src/score.js.map +1 -1
  73. package/dist/src/security-profiles.d.ts +13 -0
  74. package/dist/src/security-profiles.js +59 -0
  75. package/dist/src/security-profiles.js.map +1 -0
  76. package/dist/src/storage.js +3 -2
  77. package/dist/src/storage.js.map +1 -1
  78. package/dist/src/telemetry.d.ts +10 -0
  79. package/dist/src/telemetry.js +17 -1
  80. package/dist/src/telemetry.js.map +1 -1
  81. package/dist/src/types.d.ts +1 -1
  82. package/dist/src/utils/files.d.ts +1 -0
  83. package/dist/src/utils/files.js +21 -0
  84. package/dist/src/utils/files.js.map +1 -0
  85. package/dist/src/utils/ids.js +18 -5
  86. package/dist/src/utils/ids.js.map +1 -1
  87. package/dist/src/utils/url.d.ts +2 -0
  88. package/dist/src/utils/url.js +15 -0
  89. package/dist/src/utils/url.js.map +1 -0
  90. package/dist/src/validate.js +1 -1
  91. package/dist/src/validate.js.map +1 -1
  92. package/docs/10x-agentic-growth-sprint.md +47 -0
  93. package/docs/agent-ecosystem-promotion-plan.md +244 -0
  94. package/docs/agent-tasks.md +95 -0
  95. package/docs/agentic-contributor-outreach.md +52 -0
  96. package/docs/automatic-ci-integration.md +33 -0
  97. package/docs/campaign-attribution.md +58 -0
  98. package/docs/code-scanning-demo.md +57 -0
  99. package/docs/commercial-boundary.md +83 -0
  100. package/docs/contributor-proof-cards/README.md +33 -0
  101. package/docs/contributor-recognition.md +92 -0
  102. package/docs/examples/nsa-mcp-audit-report.md +372 -0
  103. package/docs/examples/nsa-mcp-results.sarif +930 -0
  104. package/docs/examples/nsa-mcp-score.json +13 -0
  105. package/docs/feishu-lark-mcp.md +1 -1
  106. package/docs/github-code-scanning-for-mcp.md +1 -1
  107. package/docs/government-enterprise-pilot.md +93 -0
  108. package/docs/launch.md +64 -0
  109. package/docs/mcp-attack-simulator.md +57 -0
  110. package/docs/mcp-receipts.md +109 -0
  111. package/docs/mcp-server-safety-index.md +29 -22
  112. package/docs/nsa-mcp-audit-ci.md +88 -0
  113. package/docs/procurement-one-pager.md +74 -0
  114. package/docs/proof.md +5 -2
  115. package/docs/public-guidance-crosswalk.md +48 -0
  116. package/docs/receipt-graph.md +54 -0
  117. package/docs/safety-index/artifacts/antv-chart-server.json +40 -22
  118. package/docs/safety-index/artifacts/antv-chart-server.md +22 -9
  119. package/docs/safety-index/artifacts/browsermcp-server.json +36 -18
  120. package/docs/safety-index/artifacts/browsermcp-server.md +22 -9
  121. package/docs/safety-index/artifacts/context7-server.json +83 -26
  122. package/docs/safety-index/artifacts/context7-server.md +33 -20
  123. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +2438 -0
  124. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +176 -0
  125. package/docs/safety-index/artifacts/everything-server.json +150 -57
  126. package/docs/safety-index/artifacts/everything-server.md +36 -23
  127. package/docs/safety-index/artifacts/executeautomation-playwright-server.json +162 -19
  128. package/docs/safety-index/artifacts/executeautomation-playwright-server.md +25 -12
  129. package/docs/safety-index/artifacts/filesystem-server.json +221 -19
  130. package/docs/safety-index/artifacts/filesystem-server.md +24 -11
  131. package/docs/safety-index/artifacts/kubernetes-server.attack.json +1559 -0
  132. package/docs/safety-index/artifacts/kubernetes-server.attack.md +43 -0
  133. package/docs/safety-index/artifacts/kubernetes-server.attack.sarif +2857 -0
  134. package/docs/safety-index/artifacts/kubernetes-server.json +1573 -0
  135. package/docs/safety-index/artifacts/kubernetes-server.md +176 -0
  136. package/docs/safety-index/artifacts/memory-server.json +93 -32
  137. package/docs/safety-index/artifacts/memory-server.md +45 -25
  138. package/docs/safety-index/artifacts/opentofu-server.json +44 -18
  139. package/docs/safety-index/artifacts/opentofu-server.md +23 -10
  140. package/docs/safety-index/artifacts/playwright-mcp-server.json +177 -21
  141. package/docs/safety-index/artifacts/playwright-mcp-server.md +27 -14
  142. package/docs/safety-index/artifacts/promptopia-server.json +45 -19
  143. package/docs/safety-index/artifacts/promptopia-server.md +21 -8
  144. package/docs/safety-index/artifacts/puppeteer-server.json +77 -22
  145. package/docs/safety-index/artifacts/puppeteer-server.md +28 -15
  146. package/docs/safety-index/artifacts/ref-tools-server.json +36 -18
  147. package/docs/safety-index/artifacts/ref-tools-server.md +21 -8
  148. package/docs/safety-index/artifacts/sequential-thinking-server.json +38 -21
  149. package/docs/safety-index/artifacts/sequential-thinking-server.md +22 -9
  150. package/docs/safety-index/targets.json +90 -14
  151. package/docs/security-due-diligence.md +87 -0
  152. package/docs/setup-ci-doctor.md +13 -1
  153. package/docs/target-gallery.md +49 -0
  154. package/docs/target-registry.md +5 -1
  155. package/docs/tool-call-receipts.md +115 -0
  156. package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
  157. package/examples/insecure-mcp-server/server.mjs +62 -0
  158. package/package.json +31 -2
  159. package/schemas/run-artifact.schema.json +1 -0
  160. package/scripts/postinstall.mjs +138 -0
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "pass",
5
- "runId": "run_2026-06-24T020725699Z_7cde9d35",
6
- "createdAt": "2026-06-24T02:07:25.699Z",
7
- "toolVersion": "0.24.0",
5
+ "runId": "run_2026-07-06T194948899Z_ab0f7d29",
6
+ "createdAt": "2026-07-06T19:49:48.899Z",
7
+ "toolVersion": "0.28.0",
8
8
  "target": {
9
9
  "targetId": "promptopia-server",
10
10
  "adapter": "local-process",
@@ -29,8 +29,8 @@
29
29
  "nodeVersion": "v22.22.1"
30
30
  },
31
31
  "summary": {
32
- "total": 7,
33
- "pass": 5,
32
+ "total": 8,
33
+ "pass": 6,
34
34
  "fail": 0,
35
35
  "partial": 1,
36
36
  "unsupported": 1,
@@ -43,7 +43,7 @@
43
43
  "id": "tools",
44
44
  "capability": "tools",
45
45
  "status": "pass",
46
- "durationMs": 1.030083999999988,
46
+ "durationMs": 2.4714169999997466,
47
47
  "message": "Advertised capability responded with the minimal expected shape (7 items).",
48
48
  "evidence": [
49
49
  {
@@ -267,7 +267,7 @@
267
267
  "id": "prompts",
268
268
  "capability": "prompts",
269
269
  "status": "pass",
270
- "durationMs": 1.1311249999998836,
270
+ "durationMs": 1.0759590000006938,
271
271
  "message": "Advertised capability responded with the minimal expected shape (1 item).",
272
272
  "evidence": [
273
273
  {
@@ -290,7 +290,7 @@
290
290
  "id": "resources",
291
291
  "capability": "resources",
292
292
  "status": "unsupported",
293
- "durationMs": 0.004041000000142958,
293
+ "durationMs": 0.0035409999991316,
294
294
  "message": "Resources are not advertised by the target.",
295
295
  "evidence": [
296
296
  {
@@ -306,7 +306,7 @@
306
306
  "id": "security-lite",
307
307
  "capability": "security-lite",
308
308
  "status": "pass",
309
- "durationMs": 0.02937500000007276,
309
+ "durationMs": 0.02491699999973207,
310
310
  "message": "No security issues detected (lightweight scan).",
311
311
  "evidence": [
312
312
  {
@@ -322,7 +322,7 @@
322
322
  "id": "conformance",
323
323
  "capability": "conformance",
324
324
  "status": "pass",
325
- "durationMs": 1.6614580000004935,
325
+ "durationMs": 1.5870000000004438,
326
326
  "message": "All 7 conformance checks passed.",
327
327
  "evidence": [
328
328
  {
@@ -348,7 +348,7 @@
348
348
  "id": "schema-quality",
349
349
  "capability": "schema-quality",
350
350
  "status": "partial",
351
- "durationMs": 0.6617910000004485,
351
+ "durationMs": 0.5944589999999152,
352
352
  "message": "Found 1 quality finding(s) across 8 item(s): 0 warnings, 1 info.",
353
353
  "evidence": [
354
354
  {
@@ -362,6 +362,14 @@
362
362
  ],
363
363
  "diagnostics": [
364
364
  "[info] prompt \"demo_welcome\": Argument 'name' missing description"
365
+ ],
366
+ "findings": [
367
+ {
368
+ "itemType": "prompt",
369
+ "itemName": "demo_welcome",
370
+ "issue": "Argument 'name' missing description",
371
+ "severity": "info"
372
+ }
365
373
  ]
366
374
  }
367
375
  ]
@@ -370,7 +378,7 @@
370
378
  "id": "security",
371
379
  "capability": "security",
372
380
  "status": "pass",
373
- "durationMs": 0.1859999999996944,
381
+ "durationMs": 0.19179199999962293,
374
382
  "message": "No security issues detected.",
375
383
  "evidence": [
376
384
  {
@@ -381,6 +389,23 @@
381
389
  "itemCount": 0
382
390
  }
383
391
  ]
392
+ },
393
+ {
394
+ "id": "attack-sim",
395
+ "capability": "attack-sim",
396
+ "status": "pass",
397
+ "durationMs": 0.4236670000000231,
398
+ "message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
399
+ "evidence": [
400
+ {
401
+ "endpoint": "attack-sim/safe",
402
+ "advertised": true,
403
+ "responded": true,
404
+ "minimalShapePresent": true,
405
+ "itemCount": 0,
406
+ "identifiers": []
407
+ }
408
+ ]
384
409
  }
385
410
  ],
386
411
  "healthScore": {
@@ -409,7 +434,8 @@
409
434
  "score": 100,
410
435
  "details": [
411
436
  "security-lite: pass (100/100)",
412
- "security: pass (100/100)"
437
+ "security: pass (100/100)",
438
+ "attack-sim: pass (100/100)"
413
439
  ]
414
440
  },
415
441
  {
@@ -427,16 +453,16 @@
427
453
  "weight": 0.1,
428
454
  "score": 100,
429
455
  "details": [
430
- "Connect: 829ms",
431
- "p95 latency: 1ms (3 operations)"
456
+ "Connect: 678ms",
457
+ "p95 latency: 2ms (3 operations)"
432
458
  ]
433
459
  }
434
460
  ]
435
461
  },
436
462
  "performanceMetrics": {
437
- "connectMs": 829.2160830000003,
438
- "toolsListMs": 1.030083999999988,
439
- "promptsListMs": 1.1311249999998836,
440
- "resourcesListMs": 0.004041000000142958
463
+ "connectMs": 678.1046249999999,
464
+ "toolsListMs": 2.4714169999997466,
465
+ "promptsListMs": 1.0759590000006938,
466
+ "resourcesListMs": 0.0035409999991316
441
467
  }
442
468
  }
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-06-24T02:07:25.699Z
3
+ Generated at 2026-07-06T19:49:48.899Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -25,7 +25,7 @@ Generated at 2026-06-24T02:07:25.699Z
25
25
 
26
26
  | Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
27
27
  | --- | --- | --- | --- | --- | --- | --- | --- |
28
- | pass | 7 | 5 | 0 | 1 | 1 | 0 | 0 |
28
+ | pass | 8 | 6 | 0 | 1 | 1 | 0 | 0 |
29
29
 
30
30
  ## At a Glance
31
31
 
@@ -47,16 +47,29 @@ _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 | 1.66 | All 7 conformance checks passed. |
51
- | healthy | prompts | pass | 1.13 | Advertised capability responded with the minimal expected shape (1 item). |
50
+ | healthy | attack-sim | pass | 0.42 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
51
+ | healthy | conformance | pass | 1.59 | All 7 conformance checks passed. |
52
+ | healthy | prompts | pass | 1.08 | Advertised capability responded with the minimal expected shape (1 item). |
52
53
  | healthy | security | pass | 0.19 | No security issues detected. |
53
- | healthy | security-lite | pass | 0.03 | No security issues detected (lightweight scan). |
54
- | healthy | tools | pass | 1.03 | Advertised capability responded with the minimal expected shape (7 items). |
55
- | review | schema-quality | partial | 0.66 | Found 1 quality finding(s) across 8 item(s): 0 warnings, 1 info. |
54
+ | healthy | security-lite | pass | 0.02 | No security issues detected (lightweight scan). |
55
+ | healthy | tools | pass | 2.47 | Advertised capability responded with the minimal expected shape (7 items). |
56
+ | review | schema-quality | partial | 0.59 | Found 1 quality finding(s) across 8 item(s): 0 warnings, 1 info. |
56
57
  | confirm intent | resources | unsupported | 0.00 | Resources are not advertised by the target. |
57
58
 
58
59
  ## Evidence Snippets
59
60
 
61
+ ### attack-sim — pass
62
+
63
+ Summary: Safe attack simulation found no high-risk MCP attack-readiness findings.
64
+
65
+ - Endpoint: `attack-sim/safe`
66
+ - Advertised: `true`
67
+ - Responded: `true`
68
+ - Minimal shape present: `true`
69
+ - Item count: `0`
70
+ - Identifiers: none
71
+ - Diagnostics: none
72
+
60
73
  ### conformance — pass
61
74
 
62
75
  Summary: All 7 conformance checks passed.
@@ -152,5 +165,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
152
165
 
153
166
  - Artifact type: `run`
154
167
  - Schema version: `1.0.0`
155
- - Run ID: `run_2026-06-24T020725699Z_7cde9d35`
168
+ - Run ID: `run_2026-07-06T194948899Z_ab0f7d29`
156
169
  - Gate: `pass`
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
- "gate": "pass",
5
- "runId": "run_2026-06-24T020730285Z_85ad0698",
6
- "createdAt": "2026-06-24T02:07:30.285Z",
7
- "toolVersion": "0.24.0",
4
+ "gate": "fail",
5
+ "runId": "run_2026-07-06T194953996Z_3a6d7344",
6
+ "createdAt": "2026-07-06T19:49:53.996Z",
7
+ "toolVersion": "0.28.0",
8
8
  "target": {
9
9
  "targetId": "puppeteer-server",
10
10
  "adapter": "local-process",
@@ -29,21 +29,21 @@
29
29
  "nodeVersion": "v22.22.1"
30
30
  },
31
31
  "summary": {
32
- "total": 7,
32
+ "total": 8,
33
33
  "pass": 4,
34
- "fail": 0,
34
+ "fail": 1,
35
35
  "partial": 2,
36
36
  "unsupported": 1,
37
37
  "flaky": 0,
38
38
  "skipped": 0,
39
- "gate": "pass"
39
+ "gate": "fail"
40
40
  },
41
41
  "checks": [
42
42
  {
43
43
  "id": "tools",
44
44
  "capability": "tools",
45
45
  "status": "pass",
46
- "durationMs": 0.41391699999985576,
46
+ "durationMs": 0.4152910000011616,
47
47
  "message": "Advertised capability responded with the minimal expected shape (8 items).",
48
48
  "evidence": [
49
49
  {
@@ -192,7 +192,7 @@
192
192
  "id": "prompts",
193
193
  "capability": "prompts",
194
194
  "status": "unsupported",
195
- "durationMs": 0.0010000000002037268,
195
+ "durationMs": 0.00045900000077381264,
196
196
  "message": "Prompts are not advertised by the target.",
197
197
  "evidence": [
198
198
  {
@@ -208,7 +208,7 @@
208
208
  "id": "resources",
209
209
  "capability": "resources",
210
210
  "status": "pass",
211
- "durationMs": 0.864040999998906,
211
+ "durationMs": 0.6513340000001335,
212
212
  "message": "Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported.",
213
213
  "evidence": [
214
214
  {
@@ -237,7 +237,7 @@
237
237
  "id": "security-lite",
238
238
  "capability": "security-lite",
239
239
  "status": "pass",
240
- "durationMs": 0.041500000001178705,
240
+ "durationMs": 0.036249999999199645,
241
241
  "message": "No security issues detected (lightweight scan).",
242
242
  "evidence": [
243
243
  {
@@ -253,7 +253,7 @@
253
253
  "id": "conformance",
254
254
  "capability": "conformance",
255
255
  "status": "partial",
256
- "durationMs": 2.417708999999377,
256
+ "durationMs": 2.328292000000147,
257
257
  "message": "6/7 conformance checks passed, 1 failed.",
258
258
  "evidence": [
259
259
  {
@@ -281,7 +281,7 @@
281
281
  "id": "schema-quality",
282
282
  "capability": "schema-quality",
283
283
  "status": "partial",
284
- "durationMs": 0.33158299999922747,
284
+ "durationMs": 0.26704199999949196,
285
285
  "message": "Found 2 quality finding(s) across 9 item(s): 1 warnings, 1 info.",
286
286
  "evidence": [
287
287
  {
@@ -297,6 +297,20 @@
297
297
  "diagnostics": [
298
298
  "[info] tool \"puppeteer_navigate\": Property 'url' missing description",
299
299
  "[warning] resource \"Browser console logs\": Missing description"
300
+ ],
301
+ "findings": [
302
+ {
303
+ "itemType": "tool",
304
+ "itemName": "puppeteer_navigate",
305
+ "issue": "Property 'url' missing description",
306
+ "severity": "info"
307
+ },
308
+ {
309
+ "itemType": "resource",
310
+ "itemName": "Browser console logs",
311
+ "issue": "Missing description",
312
+ "severity": "warning"
313
+ }
300
314
  ]
301
315
  }
302
316
  ]
@@ -305,7 +319,7 @@
305
319
  "id": "security",
306
320
  "capability": "security",
307
321
  "status": "pass",
308
- "durationMs": 0.18262499999946158,
322
+ "durationMs": 0.1486669999994774,
309
323
  "message": "No security issues detected.",
310
324
  "evidence": [
311
325
  {
@@ -316,10 +330,50 @@
316
330
  "itemCount": 0
317
331
  }
318
332
  ]
333
+ },
334
+ {
335
+ "id": "attack-sim",
336
+ "capability": "attack-sim",
337
+ "status": "fail",
338
+ "durationMs": 0.35720799999944575,
339
+ "message": "Safe attack simulation found 1 finding(s): 1 high, 0 medium, 0 low.",
340
+ "evidence": [
341
+ {
342
+ "endpoint": "attack-sim/safe",
343
+ "advertised": true,
344
+ "responded": true,
345
+ "minimalShapePresent": true,
346
+ "itemCount": 1,
347
+ "identifiers": [
348
+ "puppeteer_evaluate"
349
+ ],
350
+ "diagnostics": [
351
+ "[high] Tool \"puppeteer_evaluate\" combines broad parameters (script) with destructive or non-read-only behavior."
352
+ ],
353
+ "findings": [
354
+ {
355
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
356
+ "attackClass": "permission-boundary",
357
+ "severity": "high",
358
+ "itemType": "tool",
359
+ "itemName": "puppeteer_evaluate",
360
+ "message": "Tool \"puppeteer_evaluate\" combines broad parameters (script) with destructive or non-read-only behavior.",
361
+ "evidence": {
362
+ "broadParams": [
363
+ "script"
364
+ ],
365
+ "description": "Execute JavaScript in the browser console"
366
+ },
367
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
368
+ "recommendedAction": "quarantine"
369
+ }
370
+ ]
371
+ }
372
+ ]
319
373
  }
320
374
  ],
321
375
  "healthScore": {
322
- "overall": 77,
376
+ "overall": 70,
323
377
  "grade": "C",
324
378
  "dimensions": [
325
379
  {
@@ -341,10 +395,11 @@
341
395
  {
342
396
  "name": "Security",
343
397
  "weight": 0.2,
344
- "score": 100,
398
+ "score": 67,
345
399
  "details": [
346
400
  "security-lite: pass (100/100)",
347
- "security: pass (100/100)"
401
+ "security: pass (100/100)",
402
+ "attack-sim: fail (0/100)"
348
403
  ]
349
404
  },
350
405
  {
@@ -362,16 +417,16 @@
362
417
  "weight": 0.1,
363
418
  "score": 100,
364
419
  "details": [
365
- "Connect: 812ms",
420
+ "Connect: 685ms",
366
421
  "p95 latency: 1ms (3 operations)"
367
422
  ]
368
423
  }
369
424
  ]
370
425
  },
371
426
  "performanceMetrics": {
372
- "connectMs": 812.1966250000005,
373
- "toolsListMs": 0.41391699999985576,
374
- "promptsListMs": 0.0010000000002037268,
375
- "resourcesListMs": 0.864040999998906
427
+ "connectMs": 685.0922919999994,
428
+ "toolsListMs": 0.4152910000011616,
429
+ "promptsListMs": 0.00045900000077381264,
430
+ "resourcesListMs": 0.6513340000001335
376
431
  }
377
432
  }
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-06-24T02:07:30.285Z
3
+ Generated at 2026-07-06T19:49:53.996Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -13,30 +13,30 @@ Generated at 2026-06-24T02:07:30.285Z
13
13
 
14
14
  ## Executive Summary
15
15
 
16
- **Health Score: 77/100 (C)**
16
+ **Health Score: 70/100 (C)**
17
17
 
18
18
  | Dimension | Score | Weight |
19
19
  | --- | --- | --- |
20
20
  | Protocol Compliance | 60/100 | 30% |
21
21
  | Schema Quality | 60/100 | 20% |
22
- | Security | 100/100 | 20% |
22
+ | Security | 67/100 | 20% |
23
23
  | Reliability | 83/100 | 20% |
24
24
  | Performance | 100/100 | 10% |
25
25
 
26
26
  | Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
27
27
  | --- | --- | --- | --- | --- | --- | --- | --- |
28
- | pass | 7 | 4 | 0 | 2 | 1 | 0 | 0 |
28
+ | fail | 8 | 4 | 1 | 2 | 1 | 0 | 0 |
29
29
 
30
30
  ## At a Glance
31
31
 
32
- - Safety verdict: **Needs review** — The server is usable, but caveated checks should be reviewed before agents depend on it.
33
- - Top risks: conformance: 6/7 conformance checks passed, 1 failed.; schema-quality: Found 2 quality finding(s) across 9 item(s): 1 warnings, 1 info.
32
+ - Safety verdict: **Blocked** — One or more checks can break agent dependence and should be fixed before production use.
33
+ - Top risks: conformance: 6/7 conformance checks passed, 1 failed.; schema-quality: Found 2 quality finding(s) across 9 item(s): 1 warnings, 1 info.; attack-sim: Safe attack simulation found 1 finding(s): 1 high, 0 medium, 0 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: none
35
+ - Failing checks: attack-sim
36
36
  - Partial or flaky checks: conformance, schema-quality
37
37
  - Skipped checks: none
38
38
  - Unsupported checks: prompts
39
- - Suggested next step: Review the caveated checks next: conformance, schema-quality.
39
+ - Suggested next step: Start with the failing checks: 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,13 +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 | resources | pass | 0.86 | Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported. |
51
- | healthy | security | pass | 0.18 | No security issues detected. |
50
+ | healthy | resources | pass | 0.65 | Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported. |
51
+ | healthy | security | pass | 0.15 | No security issues detected. |
52
52
  | healthy | security-lite | pass | 0.04 | No security issues detected (lightweight scan). |
53
- | healthy | tools | pass | 0.41 | Advertised capability responded with the minimal expected shape (8 items). |
54
- | review | conformance | partial | 2.42 | 6/7 conformance checks passed, 1 failed. |
55
- | review | schema-quality | partial | 0.33 | Found 2 quality finding(s) across 9 item(s): 1 warnings, 1 info. |
53
+ | healthy | tools | pass | 0.42 | Advertised capability responded with the minimal expected shape (8 items). |
54
+ | review | conformance | partial | 2.33 | 6/7 conformance checks passed, 1 failed. |
55
+ | review | schema-quality | partial | 0.27 | Found 2 quality finding(s) across 9 item(s): 1 warnings, 1 info. |
56
56
  | confirm intent | prompts | unsupported | 0.00 | Prompts are not advertised by the target. |
57
+ | act now | attack-sim | fail | 0.36 | Safe attack simulation found 1 finding(s): 1 high, 0 medium, 0 low. |
57
58
 
58
59
  ## Evidence Snippets
59
60
 
@@ -148,6 +149,18 @@ Summary: Prompts are not advertised by the target.
148
149
  - Identifiers: none
149
150
  - Diagnostics: none
150
151
 
152
+ ### attack-sim — fail
153
+
154
+ Summary: Safe attack simulation found 1 finding(s): 1 high, 0 medium, 0 low.
155
+
156
+ - Endpoint: `attack-sim/safe`
157
+ - Advertised: `true`
158
+ - Responded: `true`
159
+ - Minimal shape present: `true`
160
+ - Item count: `1`
161
+ - Identifiers: puppeteer_evaluate
162
+ - Diagnostics: [high] Tool "puppeteer_evaluate" combines broad parameters (script) with destructive or non-read-only behavior.
163
+
151
164
  ## Reproduction Commands
152
165
 
153
166
  ```bash
@@ -159,5 +172,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
159
172
 
160
173
  - Artifact type: `run`
161
174
  - Schema version: `1.0.0`
162
- - Run ID: `run_2026-06-24T020730285Z_85ad0698`
163
- - Gate: `pass`
175
+ - Run ID: `run_2026-07-06T194953996Z_3a6d7344`
176
+ - Gate: `fail`
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "pass",
5
- "runId": "run_2026-06-24T020728542Z_cc57c712",
6
- "createdAt": "2026-06-24T02:07:28.542Z",
7
- "toolVersion": "0.24.0",
5
+ "runId": "run_2026-07-06T194951606Z_e657d5a4",
6
+ "createdAt": "2026-07-06T19:49:51.606Z",
7
+ "toolVersion": "0.28.0",
8
8
  "target": {
9
9
  "targetId": "ref-tools-server",
10
10
  "adapter": "local-process",
@@ -29,8 +29,8 @@
29
29
  "nodeVersion": "v22.22.1"
30
30
  },
31
31
  "summary": {
32
- "total": 7,
33
- "pass": 6,
32
+ "total": 8,
33
+ "pass": 7,
34
34
  "fail": 0,
35
35
  "partial": 0,
36
36
  "unsupported": 1,
@@ -43,7 +43,7 @@
43
43
  "id": "tools",
44
44
  "capability": "tools",
45
45
  "status": "pass",
46
- "durationMs": 0.9550839999992604,
46
+ "durationMs": 0.8886670000001686,
47
47
  "message": "Advertised capability responded with the minimal expected shape (2 items).",
48
48
  "evidence": [
49
49
  {
@@ -92,7 +92,7 @@
92
92
  "id": "prompts",
93
93
  "capability": "prompts",
94
94
  "status": "pass",
95
- "durationMs": 0.21733400000084657,
95
+ "durationMs": 0.19312499999978172,
96
96
  "message": "Advertised capability responded with the minimal expected shape (2 items).",
97
97
  "evidence": [
98
98
  {
@@ -115,7 +115,7 @@
115
115
  "id": "resources",
116
116
  "capability": "resources",
117
117
  "status": "unsupported",
118
- "durationMs": 0.002375000000029104,
118
+ "durationMs": 0.0022499999995488906,
119
119
  "message": "Resources are not advertised by the target.",
120
120
  "evidence": [
121
121
  {
@@ -131,7 +131,7 @@
131
131
  "id": "security-lite",
132
132
  "capability": "security-lite",
133
133
  "status": "pass",
134
- "durationMs": 0.017791999998735264,
134
+ "durationMs": 0.016125000000101863,
135
135
  "message": "No security issues detected (lightweight scan).",
136
136
  "evidence": [
137
137
  {
@@ -147,7 +147,7 @@
147
147
  "id": "conformance",
148
148
  "capability": "conformance",
149
149
  "status": "pass",
150
- "durationMs": 0.5875410000007832,
150
+ "durationMs": 0.5073750000001382,
151
151
  "message": "All 7 conformance checks passed.",
152
152
  "evidence": [
153
153
  {
@@ -173,7 +173,7 @@
173
173
  "id": "schema-quality",
174
174
  "capability": "schema-quality",
175
175
  "status": "pass",
176
- "durationMs": 0.4417920000014419,
176
+ "durationMs": 0.4954999999999927,
177
177
  "message": "All 4 item(s) have good schema quality.",
178
178
  "evidence": [
179
179
  {
@@ -190,7 +190,7 @@
190
190
  "id": "security",
191
191
  "capability": "security",
192
192
  "status": "pass",
193
- "durationMs": 0.44887500000004366,
193
+ "durationMs": 0.19070799999917654,
194
194
  "message": "No security issues detected.",
195
195
  "evidence": [
196
196
  {
@@ -201,6 +201,23 @@
201
201
  "itemCount": 0
202
202
  }
203
203
  ]
204
+ },
205
+ {
206
+ "id": "attack-sim",
207
+ "capability": "attack-sim",
208
+ "status": "pass",
209
+ "durationMs": 0.24504199999955745,
210
+ "message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
211
+ "evidence": [
212
+ {
213
+ "endpoint": "attack-sim/safe",
214
+ "advertised": true,
215
+ "responded": true,
216
+ "minimalShapePresent": true,
217
+ "itemCount": 0,
218
+ "identifiers": []
219
+ }
220
+ ]
204
221
  }
205
222
  ],
206
223
  "healthScore": {
@@ -229,7 +246,8 @@
229
246
  "score": 100,
230
247
  "details": [
231
248
  "security-lite: pass (100/100)",
232
- "security: pass (100/100)"
249
+ "security: pass (100/100)",
250
+ "attack-sim: pass (100/100)"
233
251
  ]
234
252
  },
235
253
  {
@@ -247,16 +265,16 @@
247
265
  "weight": 0.1,
248
266
  "score": 100,
249
267
  "details": [
250
- "Connect: 775ms",
268
+ "Connect: 579ms",
251
269
  "p95 latency: 1ms (3 operations)"
252
270
  ]
253
271
  }
254
272
  ]
255
273
  },
256
274
  "performanceMetrics": {
257
- "connectMs": 774.5396250000003,
258
- "toolsListMs": 0.9550839999992604,
259
- "promptsListMs": 0.21733400000084657,
260
- "resourcesListMs": 0.002375000000029104
275
+ "connectMs": 579.0028749999992,
276
+ "toolsListMs": 0.8886670000001686,
277
+ "promptsListMs": 0.19312499999978172,
278
+ "resourcesListMs": 0.0022499999995488906
261
279
  }
262
280
  }