@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
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-06-24T02:07:21.282Z
3
+ Generated at 2026-07-06T19:49:44.860Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -25,12 +25,12 @@ Generated at 2026-06-24T02:07:21.282Z
25
25
 
26
26
  | Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
27
27
  | --- | --- | --- | --- | --- | --- | --- | --- |
28
- | pass | 7 | 6 | 0 | 1 | 0 | 0 | 0 |
28
+ | pass | 8 | 7 | 0 | 1 | 0 | 0 | 0 |
29
29
 
30
30
  ## At a Glance
31
31
 
32
32
  - Safety verdict: **Needs review** — The server is usable, but caveated checks should be reviewed before agents depend on it.
33
- - Top risks: schema-quality: Found 5 quality finding(s) across 24 item(s): 0 warnings, 5 info.
33
+ - Top risks: schema-quality: Found 6 quality finding(s) across 24 item(s): 0 warnings, 6 info.
34
34
  - Regression/schema drift: Run `mcp-observatory diff <previous-run.json> <current-run.json>` to classify regressions and schema drift.
35
35
  - Failing checks: none
36
36
  - Partial or flaky checks: schema-quality
@@ -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 | 3.85 | All 7 conformance checks passed. |
51
- | healthy | prompts | pass | 0.74 | Advertised capability responded with the minimal expected shape (4 items). |
52
- | healthy | resources | pass | 1.01 | Advertised capability responded with the minimal expected shape (9 items). |
53
- | healthy | security | pass | 0.88 | No security issues detected. |
54
- | healthy | security-lite | pass | 0.48 | No security issues detected (lightweight scan). |
55
- | healthy | tools | pass | 7.35 | Advertised capability responded with the minimal expected shape (13 items). |
56
- | review | schema-quality | partial | 1.89 | Found 5 quality finding(s) across 24 item(s): 0 warnings, 5 info. |
50
+ | healthy | attack-sim | pass | 2.65 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
51
+ | healthy | conformance | pass | 3.46 | All 7 conformance checks passed. |
52
+ | healthy | prompts | pass | 0.66 | Advertised capability responded with the minimal expected shape (4 items). |
53
+ | healthy | resources | pass | 1.08 | Advertised capability responded with the minimal expected shape (9 items). |
54
+ | healthy | security | pass | 0.90 | Found 2 security finding(s): 0 high, 0 medium, 2 low. |
55
+ | healthy | security-lite | pass | 0.50 | Found 2 security finding(s): 0 high, 0 medium, 2 low. |
56
+ | healthy | tools | pass | 6.71 | Advertised capability responded with the minimal expected shape (13 items). |
57
+ | review | schema-quality | partial | 1.34 | Found 6 quality finding(s) across 24 item(s): 0 warnings, 6 info. |
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.
@@ -102,27 +115,27 @@ Summary: Advertised capability responded with the minimal expected shape (9 item
102
115
 
103
116
  ### security — pass
104
117
 
105
- Summary: No security issues detected.
118
+ Summary: Found 2 security finding(s): 0 high, 0 medium, 2 low.
106
119
 
107
120
  - Endpoint: `security/scan`
108
121
  - Advertised: `true`
109
122
  - Responded: `true`
110
123
  - Minimal shape present: `true`
111
- - Item count: `0`
112
- - Identifiers: none
113
- - Diagnostics: none
124
+ - Item count: `2`
125
+ - Identifiers: toggle-simulated-logging, toggle-subscriber-updates
126
+ - Diagnostics: [low] Tool "toggle-simulated-logging" has an empty schema but is marked as destructive., [low] Tool "toggle-subscriber-updates" has an empty schema but is marked as destructive.
114
127
 
115
128
  ### security-lite — pass
116
129
 
117
- Summary: No security issues detected (lightweight scan).
130
+ Summary: Found 2 security finding(s): 0 high, 0 medium, 2 low.
118
131
 
119
132
  - Endpoint: `security/scan-lite`
120
133
  - Advertised: `true`
121
134
  - Responded: `true`
122
135
  - Minimal shape present: `true`
123
- - Item count: `0`
124
- - Identifiers: none
125
- - Diagnostics: none
136
+ - Item count: `2`
137
+ - Identifiers: toggle-simulated-logging, toggle-subscriber-updates
138
+ - Diagnostics: [low] Tool "toggle-simulated-logging" has an empty schema but is marked as destructive., [low] Tool "toggle-subscriber-updates" has an empty schema but is marked as destructive.
126
139
 
127
140
  ### tools — pass
128
141
 
@@ -138,15 +151,15 @@ Summary: Advertised capability responded with the minimal expected shape (13 ite
138
151
 
139
152
  ### schema-quality — partial
140
153
 
141
- Summary: Found 5 quality finding(s) across 24 item(s): 0 warnings, 5 info.
154
+ Summary: Found 6 quality finding(s) across 24 item(s): 0 warnings, 6 info.
142
155
 
143
156
  - Endpoint: `schema-quality/scan`
144
157
  - Advertised: `true`
145
158
  - Responded: `true`
146
159
  - Minimal shape present: `true`
147
- - Item count: `5`
148
- - Identifiers: get-resource-links, get-resource-reference, gzip-file-as-resource, trigger-long-running-operation
149
- - Diagnostics: [info] tool "get-resource-links": Has properties but no 'required' array declared, [info] tool "get-resource-reference": Has properties but no 'required' array declared, [info] tool "get-resource-reference": Property 'resourceType' missing description (+2 more)
160
+ - Item count: `6`
161
+ - Identifiers: get-resource-links, get-resource-reference, gzip-file-as-resource, trigger-long-running-operation, args-prompt
162
+ - Diagnostics: [info] tool "get-resource-links": Has properties but no 'required' array declared, [info] tool "get-resource-reference": Has properties but no 'required' array declared, [info] tool "get-resource-reference": Property 'resourceType' missing description (+3 more)
150
163
 
151
164
  ## Reproduction Commands
152
165
 
@@ -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-24T020721281Z_c337e720`
175
+ - Run ID: `run_2026-07-06T194944859Z_dd0288c3`
163
176
  - Gate: `pass`
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "fail",
5
- "runId": "run_2026-06-24T020744894Z_ce4e4a75",
6
- "createdAt": "2026-06-24T02:07:44.894Z",
7
- "toolVersion": "0.24.0",
5
+ "runId": "run_2026-07-06T194957955Z_4eaf8a90",
6
+ "createdAt": "2026-07-06T19:49:57.956Z",
7
+ "toolVersion": "0.28.0",
8
8
  "target": {
9
9
  "targetId": "executeautomation-playwright-server",
10
10
  "adapter": "local-process",
@@ -29,9 +29,9 @@
29
29
  "nodeVersion": "v22.22.1"
30
30
  },
31
31
  "summary": {
32
- "total": 7,
32
+ "total": 8,
33
33
  "pass": 3,
34
- "fail": 2,
34
+ "fail": 3,
35
35
  "partial": 1,
36
36
  "unsupported": 1,
37
37
  "flaky": 0,
@@ -43,7 +43,7 @@
43
43
  "id": "tools",
44
44
  "capability": "tools",
45
45
  "status": "pass",
46
- "durationMs": 3.1655419999988226,
46
+ "durationMs": 1.1761660000011034,
47
47
  "message": "Advertised capability responded with the minimal expected shape (33 items).",
48
48
  "evidence": [
49
49
  {
@@ -746,7 +746,7 @@
746
746
  "id": "prompts",
747
747
  "capability": "prompts",
748
748
  "status": "unsupported",
749
- "durationMs": 0.002541000001656357,
749
+ "durationMs": 0.0007080000013957033,
750
750
  "message": "Prompts are not advertised by the target.",
751
751
  "evidence": [
752
752
  {
@@ -762,7 +762,7 @@
762
762
  "id": "resources",
763
763
  "capability": "resources",
764
764
  "status": "pass",
765
- "durationMs": 1.6509159999986878,
765
+ "durationMs": 0.6060830000005808,
766
766
  "message": "Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported.",
767
767
  "evidence": [
768
768
  {
@@ -791,7 +791,7 @@
791
791
  "id": "security-lite",
792
792
  "capability": "security-lite",
793
793
  "status": "fail",
794
- "durationMs": 0.48133299999972223,
794
+ "durationMs": 0.05783300000075542,
795
795
  "message": "Found 1 security finding(s): 1 high, 0 medium, 0 low.",
796
796
  "evidence": [
797
797
  {
@@ -821,7 +821,7 @@
821
821
  "id": "conformance",
822
822
  "capability": "conformance",
823
823
  "status": "pass",
824
- "durationMs": 7.248041000002559,
824
+ "durationMs": 2.294624999998632,
825
825
  "message": "All 7 conformance checks passed.",
826
826
  "evidence": [
827
827
  {
@@ -847,7 +847,7 @@
847
847
  "id": "schema-quality",
848
848
  "capability": "schema-quality",
849
849
  "status": "partial",
850
- "durationMs": 1.8633340000014869,
850
+ "durationMs": 0.6172920000008162,
851
851
  "message": "Found 1 quality finding(s) across 34 item(s): 1 warnings, 0 info.",
852
852
  "evidence": [
853
853
  {
@@ -861,6 +861,14 @@
861
861
  ],
862
862
  "diagnostics": [
863
863
  "[warning] resource \"Browser console logs\": Missing description"
864
+ ],
865
+ "findings": [
866
+ {
867
+ "itemType": "resource",
868
+ "itemName": "Browser console logs",
869
+ "issue": "Missing description",
870
+ "severity": "warning"
871
+ }
864
872
  ]
865
873
  }
866
874
  ]
@@ -869,7 +877,7 @@
869
877
  "id": "security",
870
878
  "capability": "security",
871
879
  "status": "fail",
872
- "durationMs": 0.8668330000000424,
880
+ "durationMs": 0.2935410000009142,
873
881
  "message": "Found 1 security finding(s): 1 high, 0 medium, 0 low.",
874
882
  "evidence": [
875
883
  {
@@ -894,6 +902,140 @@
894
902
  ]
895
903
  }
896
904
  ]
905
+ },
906
+ {
907
+ "id": "attack-sim",
908
+ "capability": "attack-sim",
909
+ "status": "fail",
910
+ "durationMs": 1.4405839999999444,
911
+ "message": "Safe attack simulation found 6 finding(s): 1 high, 5 medium, 0 low.",
912
+ "evidence": [
913
+ {
914
+ "endpoint": "attack-sim/safe",
915
+ "advertised": true,
916
+ "responded": true,
917
+ "minimalShapePresent": true,
918
+ "itemCount": 6,
919
+ "identifiers": [
920
+ "playwright_upload_file",
921
+ "playwright_evaluate",
922
+ "playwright_post",
923
+ "playwright_put",
924
+ "playwright_patch",
925
+ "playwright_delete"
926
+ ],
927
+ "diagnostics": [
928
+ "[medium] Tool \"playwright_upload_file\" combines broad parameters (filePath) with destructive or non-read-only behavior.",
929
+ "[high] Tool \"playwright_evaluate\" combines broad parameters (script) with destructive or non-read-only behavior.",
930
+ "[medium] Tool \"playwright_post\" combines broad parameters (url, headers) with destructive or non-read-only behavior.",
931
+ "[medium] Tool \"playwright_put\" combines broad parameters (url, headers) with destructive or non-read-only behavior.",
932
+ "[medium] Tool \"playwright_patch\" combines broad parameters (url, headers) with destructive or non-read-only behavior.",
933
+ "[medium] Tool \"playwright_delete\" combines broad parameters (url, headers) with destructive or non-read-only behavior."
934
+ ],
935
+ "findings": [
936
+ {
937
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
938
+ "attackClass": "permission-boundary",
939
+ "severity": "medium",
940
+ "itemType": "tool",
941
+ "itemName": "playwright_upload_file",
942
+ "message": "Tool \"playwright_upload_file\" combines broad parameters (filePath) with destructive or non-read-only behavior.",
943
+ "evidence": {
944
+ "broadParams": [
945
+ "filePath"
946
+ ],
947
+ "description": "Upload a file to an input[type='file'] element on the page"
948
+ },
949
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
950
+ "recommendedAction": "gate"
951
+ },
952
+ {
953
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
954
+ "attackClass": "permission-boundary",
955
+ "severity": "high",
956
+ "itemType": "tool",
957
+ "itemName": "playwright_evaluate",
958
+ "message": "Tool \"playwright_evaluate\" combines broad parameters (script) with destructive or non-read-only behavior.",
959
+ "evidence": {
960
+ "broadParams": [
961
+ "script"
962
+ ],
963
+ "description": "Execute JavaScript in the browser console"
964
+ },
965
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
966
+ "recommendedAction": "quarantine"
967
+ },
968
+ {
969
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
970
+ "attackClass": "permission-boundary",
971
+ "severity": "medium",
972
+ "itemType": "tool",
973
+ "itemName": "playwright_post",
974
+ "message": "Tool \"playwright_post\" combines broad parameters (url, headers) with destructive or non-read-only behavior.",
975
+ "evidence": {
976
+ "broadParams": [
977
+ "url",
978
+ "headers"
979
+ ],
980
+ "description": "Perform an HTTP POST request"
981
+ },
982
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
983
+ "recommendedAction": "gate"
984
+ },
985
+ {
986
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
987
+ "attackClass": "permission-boundary",
988
+ "severity": "medium",
989
+ "itemType": "tool",
990
+ "itemName": "playwright_put",
991
+ "message": "Tool \"playwright_put\" combines broad parameters (url, headers) with destructive or non-read-only behavior.",
992
+ "evidence": {
993
+ "broadParams": [
994
+ "url",
995
+ "headers"
996
+ ],
997
+ "description": "Perform an HTTP PUT request"
998
+ },
999
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
1000
+ "recommendedAction": "gate"
1001
+ },
1002
+ {
1003
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
1004
+ "attackClass": "permission-boundary",
1005
+ "severity": "medium",
1006
+ "itemType": "tool",
1007
+ "itemName": "playwright_patch",
1008
+ "message": "Tool \"playwright_patch\" combines broad parameters (url, headers) with destructive or non-read-only behavior.",
1009
+ "evidence": {
1010
+ "broadParams": [
1011
+ "url",
1012
+ "headers"
1013
+ ],
1014
+ "description": "Perform an HTTP PATCH request"
1015
+ },
1016
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
1017
+ "recommendedAction": "gate"
1018
+ },
1019
+ {
1020
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
1021
+ "attackClass": "permission-boundary",
1022
+ "severity": "medium",
1023
+ "itemType": "tool",
1024
+ "itemName": "playwright_delete",
1025
+ "message": "Tool \"playwright_delete\" combines broad parameters (url, headers) with destructive or non-read-only behavior.",
1026
+ "evidence": {
1027
+ "broadParams": [
1028
+ "url",
1029
+ "headers"
1030
+ ],
1031
+ "description": "Perform an HTTP DELETE request"
1032
+ },
1033
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
1034
+ "recommendedAction": "gate"
1035
+ }
1036
+ ]
1037
+ }
1038
+ ]
897
1039
  }
898
1040
  ],
899
1041
  "healthScore": {
@@ -922,7 +1064,8 @@
922
1064
  "score": 0,
923
1065
  "details": [
924
1066
  "security-lite: fail (0/100)",
925
- "security: fail (0/100)"
1067
+ "security: fail (0/100)",
1068
+ "attack-sim: fail (0/100)"
926
1069
  ]
927
1070
  },
928
1071
  {
@@ -940,16 +1083,16 @@
940
1083
  "weight": 0.1,
941
1084
  "score": 100,
942
1085
  "details": [
943
- "Connect: 2061ms",
944
- "p95 latency: 3ms (3 operations)"
1086
+ "Connect: 908ms",
1087
+ "p95 latency: 1ms (3 operations)"
945
1088
  ]
946
1089
  }
947
1090
  ]
948
1091
  },
949
1092
  "performanceMetrics": {
950
- "connectMs": 2060.7668749999975,
951
- "toolsListMs": 3.1655419999988226,
952
- "promptsListMs": 0.002541000001656357,
953
- "resourcesListMs": 1.6509159999986878
1093
+ "connectMs": 907.6346670000003,
1094
+ "toolsListMs": 1.1761660000011034,
1095
+ "promptsListMs": 0.0007080000013957033,
1096
+ "resourcesListMs": 0.6060830000005808
954
1097
  }
955
1098
  }
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-06-24T02:07:44.894Z
3
+ Generated at 2026-07-06T19:49:57.956Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -25,18 +25,18 @@ Generated at 2026-06-24T02:07:44.894Z
25
25
 
26
26
  | Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
27
27
  | --- | --- | --- | --- | --- | --- | --- | --- |
28
- | fail | 7 | 3 | 2 | 1 | 1 | 0 | 0 |
28
+ | fail | 8 | 3 | 3 | 1 | 1 | 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 1 quality finding(s) across 34 item(s): 1 warnings, 0 info.; security: Found 1 security finding(s): 1 high, 0 medium, 0 low.; security-lite: Found 1 security finding(s): 1 high, 0 medium, 0 low.
33
+ - Top risks: schema-quality: Found 1 quality finding(s) across 34 item(s): 1 warnings, 0 info.; attack-sim: Safe attack simulation found 6 finding(s): 1 high, 5 medium, 0 low.; security: Found 1 security 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: security-lite, security
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: prompts
39
- - Suggested next step: Start with the failing checks: security-lite, security.
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,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 | conformance | pass | 7.25 | All 7 conformance checks passed. |
51
- | healthy | resources | pass | 1.65 | Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported. |
52
- | healthy | tools | pass | 3.17 | Advertised capability responded with the minimal expected shape (33 items). |
53
- | review | schema-quality | partial | 1.86 | Found 1 quality finding(s) across 34 item(s): 1 warnings, 0 info. |
50
+ | healthy | conformance | pass | 2.29 | All 7 conformance checks passed. |
51
+ | healthy | resources | pass | 0.61 | Advertised capability responded with the minimal expected shape, but one optional resource endpoint appears unsupported. |
52
+ | healthy | tools | pass | 1.18 | Advertised capability responded with the minimal expected shape (33 items). |
53
+ | review | schema-quality | partial | 0.62 | Found 1 quality finding(s) across 34 item(s): 1 warnings, 0 info. |
54
54
  | confirm intent | prompts | unsupported | 0.00 | Prompts are not advertised by the target. |
55
- | act now | security | fail | 0.87 | Found 1 security finding(s): 1 high, 0 medium, 0 low. |
56
- | act now | security-lite | fail | 0.48 | Found 1 security finding(s): 1 high, 0 medium, 0 low. |
55
+ | act now | attack-sim | fail | 1.44 | Safe attack simulation found 6 finding(s): 1 high, 5 medium, 0 low. |
56
+ | act now | security | fail | 0.29 | Found 1 security finding(s): 1 high, 0 medium, 0 low. |
57
+ | act now | security-lite | fail | 0.06 | Found 1 security finding(s): 1 high, 0 medium, 0 low. |
57
58
 
58
59
  ## Evidence Snippets
59
60
 
@@ -124,6 +125,18 @@ Summary: Prompts are not advertised by the target.
124
125
  - Identifiers: none
125
126
  - Diagnostics: none
126
127
 
128
+ ### attack-sim — fail
129
+
130
+ Summary: Safe attack simulation found 6 finding(s): 1 high, 5 medium, 0 low.
131
+
132
+ - Endpoint: `attack-sim/safe`
133
+ - Advertised: `true`
134
+ - Responded: `true`
135
+ - Minimal shape present: `true`
136
+ - Item count: `6`
137
+ - Identifiers: playwright_upload_file, playwright_evaluate, playwright_post, playwright_put, playwright_patch (+1 more)
138
+ - Diagnostics: [medium] Tool "playwright_upload_file" combines broad parameters (filePath) with destructive or non-read-only behavior., [high] Tool "playwright_evaluate" combines broad parameters (script) with destructive or non-read-only behavior., [medium] Tool "playwright_post" combines broad parameters (url, headers) with destructive or non-read-only behavior. (+3 more)
139
+
127
140
  ### security — fail
128
141
 
129
142
  Summary: Found 1 security finding(s): 1 high, 0 medium, 0 low.
@@ -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-24T020744894Z_ce4e4a75`
175
+ - Run ID: `run_2026-07-06T194957955Z_4eaf8a90`
163
176
  - Gate: `fail`