@kryptosai/mcp-observatory 0.27.0 → 1.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMMERCIAL.md +28 -2
- package/CONTRIBUTORS.md +39 -0
- package/README.md +114 -22
- package/dist/src/action-receipt.d.ts +20 -0
- package/dist/src/action-receipt.js +85 -0
- package/dist/src/action-receipt.js.map +1 -0
- package/dist/src/adapters/http.js +1 -5
- package/dist/src/adapters/http.js.map +1 -1
- package/dist/src/audit.d.ts +64 -0
- package/dist/src/audit.js +359 -0
- package/dist/src/audit.js.map +1 -0
- package/dist/src/cassette.js +3 -2
- package/dist/src/cassette.js.map +1 -1
- package/dist/src/checks/attack-sim.d.ts +20 -0
- package/dist/src/checks/attack-sim.js +316 -0
- package/dist/src/checks/attack-sim.js.map +1 -0
- package/dist/src/ci-issue.js +4 -3
- package/dist/src/ci-issue.js.map +1 -1
- package/dist/src/cli.js +25 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/attack-sim.d.ts +2 -0
- package/dist/src/commands/attack-sim.js +220 -0
- package/dist/src/commands/attack-sim.js.map +1 -0
- package/dist/src/commands/audit.d.ts +2 -0
- package/dist/src/commands/audit.js +132 -0
- package/dist/src/commands/audit.js.map +1 -0
- package/dist/src/commands/init-ci.d.ts +3 -0
- package/dist/src/commands/init-ci.js +78 -13
- package/dist/src/commands/init-ci.js.map +1 -1
- package/dist/src/commands/legacy.js +8 -1
- package/dist/src/commands/legacy.js.map +1 -1
- package/dist/src/commands/receipt.d.ts +2 -0
- package/dist/src/commands/receipt.js +113 -0
- package/dist/src/commands/receipt.js.map +1 -0
- package/dist/src/commands/scan.js +30 -6
- package/dist/src/commands/scan.js.map +1 -1
- package/dist/src/commands/score.js +63 -0
- package/dist/src/commands/score.js.map +1 -1
- package/dist/src/commands/serve.js +9 -1
- package/dist/src/commands/serve.js.map +1 -1
- package/dist/src/commands/setup-ci-conversion.d.ts +3 -1
- package/dist/src/commands/setup-ci-conversion.js +23 -8
- package/dist/src/commands/setup-ci-conversion.js.map +1 -1
- package/dist/src/commands/telemetry.js +20 -14
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/test.js +31 -2
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/findings.d.ts +1 -0
- package/dist/src/findings.js +42 -1
- package/dist/src/findings.js.map +1 -1
- package/dist/src/history.js +3 -2
- package/dist/src/history.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/smithery.js +5 -1
- package/dist/src/integrations/smithery.js.map +1 -1
- package/dist/src/receipt.d.ts +100 -0
- package/dist/src/receipt.js +375 -0
- package/dist/src/receipt.js.map +1 -0
- package/dist/src/reporters/attack-sim.d.ts +2 -0
- package/dist/src/reporters/attack-sim.js +89 -0
- package/dist/src/reporters/attack-sim.js.map +1 -0
- package/dist/src/reporters/pr-comment.js +20 -6
- package/dist/src/reporters/pr-comment.js.map +1 -1
- package/dist/src/reporters/sarif.js +11 -1
- package/dist/src/reporters/sarif.js.map +1 -1
- package/dist/src/runner.d.ts +3 -0
- package/dist/src/runner.js +5 -0
- package/dist/src/runner.js.map +1 -1
- package/dist/src/score.js +1 -1
- package/dist/src/score.js.map +1 -1
- package/dist/src/security-profiles.d.ts +13 -0
- package/dist/src/security-profiles.js +59 -0
- package/dist/src/security-profiles.js.map +1 -0
- package/dist/src/storage.js +3 -2
- package/dist/src/storage.js.map +1 -1
- package/dist/src/telemetry.d.ts +10 -0
- package/dist/src/telemetry.js +17 -1
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/utils/files.d.ts +1 -0
- package/dist/src/utils/files.js +21 -0
- package/dist/src/utils/files.js.map +1 -0
- package/dist/src/utils/ids.js +18 -5
- package/dist/src/utils/ids.js.map +1 -1
- package/dist/src/utils/url.d.ts +2 -0
- package/dist/src/utils/url.js +15 -0
- package/dist/src/utils/url.js.map +1 -0
- package/dist/src/validate.js +1 -1
- package/dist/src/validate.js.map +1 -1
- package/docs/10x-agentic-growth-sprint.md +47 -0
- package/docs/agent-ecosystem-promotion-plan.md +244 -0
- package/docs/agent-tasks.md +95 -0
- package/docs/agentic-contributor-outreach.md +52 -0
- package/docs/automatic-ci-integration.md +33 -0
- package/docs/campaign-attribution.md +58 -0
- package/docs/code-scanning-demo.md +57 -0
- package/docs/commercial-boundary.md +83 -0
- package/docs/contributor-proof-cards/README.md +33 -0
- package/docs/contributor-recognition.md +92 -0
- package/docs/examples/nsa-mcp-audit-report.md +372 -0
- package/docs/examples/nsa-mcp-results.sarif +930 -0
- package/docs/examples/nsa-mcp-score.json +13 -0
- package/docs/feishu-lark-mcp.md +1 -1
- package/docs/github-code-scanning-for-mcp.md +1 -1
- package/docs/government-enterprise-pilot.md +93 -0
- package/docs/launch.md +64 -0
- package/docs/mcp-attack-simulator.md +57 -0
- package/docs/mcp-receipts.md +109 -0
- package/docs/mcp-server-safety-index.md +29 -22
- package/docs/nsa-mcp-audit-ci.md +88 -0
- package/docs/procurement-one-pager.md +74 -0
- package/docs/proof.md +5 -2
- package/docs/public-guidance-crosswalk.md +48 -0
- package/docs/receipt-graph.md +54 -0
- package/docs/safety-index/artifacts/antv-chart-server.json +40 -22
- package/docs/safety-index/artifacts/antv-chart-server.md +22 -9
- package/docs/safety-index/artifacts/browsermcp-server.json +36 -18
- package/docs/safety-index/artifacts/browsermcp-server.md +22 -9
- package/docs/safety-index/artifacts/context7-server.json +83 -26
- package/docs/safety-index/artifacts/context7-server.md +33 -20
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +2438 -0
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +176 -0
- package/docs/safety-index/artifacts/everything-server.json +150 -57
- package/docs/safety-index/artifacts/everything-server.md +36 -23
- package/docs/safety-index/artifacts/executeautomation-playwright-server.json +162 -19
- package/docs/safety-index/artifacts/executeautomation-playwright-server.md +25 -12
- package/docs/safety-index/artifacts/filesystem-server.json +221 -19
- package/docs/safety-index/artifacts/filesystem-server.md +24 -11
- package/docs/safety-index/artifacts/kubernetes-server.attack.json +1559 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.md +43 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.sarif +2857 -0
- package/docs/safety-index/artifacts/kubernetes-server.json +1573 -0
- package/docs/safety-index/artifacts/kubernetes-server.md +176 -0
- package/docs/safety-index/artifacts/memory-server.json +93 -32
- package/docs/safety-index/artifacts/memory-server.md +45 -25
- package/docs/safety-index/artifacts/opentofu-server.json +44 -18
- package/docs/safety-index/artifacts/opentofu-server.md +23 -10
- package/docs/safety-index/artifacts/playwright-mcp-server.json +177 -21
- package/docs/safety-index/artifacts/playwright-mcp-server.md +27 -14
- package/docs/safety-index/artifacts/promptopia-server.json +45 -19
- package/docs/safety-index/artifacts/promptopia-server.md +21 -8
- package/docs/safety-index/artifacts/puppeteer-server.json +77 -22
- package/docs/safety-index/artifacts/puppeteer-server.md +28 -15
- package/docs/safety-index/artifacts/ref-tools-server.json +36 -18
- package/docs/safety-index/artifacts/ref-tools-server.md +21 -8
- package/docs/safety-index/artifacts/sequential-thinking-server.json +38 -21
- package/docs/safety-index/artifacts/sequential-thinking-server.md +22 -9
- package/docs/safety-index/targets.json +90 -14
- package/docs/security-due-diligence.md +87 -0
- package/docs/setup-ci-doctor.md +13 -1
- package/docs/target-gallery.md +49 -0
- package/docs/target-registry.md +5 -1
- package/docs/tool-call-receipts.md +115 -0
- package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
- package/examples/insecure-mcp-server/server.mjs +62 -0
- package/package.json +31 -2
- package/schemas/run-artifact.schema.json +1 -0
- package/scripts/postinstall.mjs +138 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP Observatory Run Report
|
|
2
2
|
|
|
3
|
-
Generated at 2026-
|
|
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 |
|
|
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
|
|
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 |
|
|
51
|
-
| healthy |
|
|
52
|
-
| healthy |
|
|
53
|
-
| healthy |
|
|
54
|
-
| healthy | security
|
|
55
|
-
| healthy |
|
|
56
|
-
|
|
|
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:
|
|
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: `
|
|
112
|
-
- Identifiers:
|
|
113
|
-
- Diagnostics:
|
|
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:
|
|
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: `
|
|
124
|
-
- Identifiers:
|
|
125
|
-
- Diagnostics:
|
|
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
|
|
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: `
|
|
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 (+
|
|
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-
|
|
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-
|
|
6
|
-
"createdAt": "2026-
|
|
7
|
-
"toolVersion": "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":
|
|
32
|
+
"total": 8,
|
|
33
33
|
"pass": 3,
|
|
34
|
-
"fail":
|
|
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":
|
|
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.
|
|
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":
|
|
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.
|
|
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":
|
|
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":
|
|
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.
|
|
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:
|
|
944
|
-
"p95 latency:
|
|
1086
|
+
"Connect: 908ms",
|
|
1087
|
+
"p95 latency: 1ms (3 operations)"
|
|
945
1088
|
]
|
|
946
1089
|
}
|
|
947
1090
|
]
|
|
948
1091
|
},
|
|
949
1092
|
"performanceMetrics": {
|
|
950
|
-
"connectMs":
|
|
951
|
-
"toolsListMs":
|
|
952
|
-
"promptsListMs": 0.
|
|
953
|
-
"resourcesListMs":
|
|
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-
|
|
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 |
|
|
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.;
|
|
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 |
|
|
51
|
-
| healthy | resources | pass |
|
|
52
|
-
| healthy | tools | pass |
|
|
53
|
-
| review | schema-quality | partial |
|
|
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 |
|
|
56
|
-
| act now | security
|
|
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-
|
|
175
|
+
- Run ID: `run_2026-07-06T194957955Z_4eaf8a90`
|
|
163
176
|
- Gate: `fail`
|