@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
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"artifactType": "run",
|
|
3
3
|
"schemaVersion": "1.0.0",
|
|
4
4
|
"gate": "pass",
|
|
5
|
-
"runId": "run_2026-
|
|
6
|
-
"createdAt": "2026-
|
|
7
|
-
"toolVersion": "0.
|
|
5
|
+
"runId": "run_2026-07-06T194953212Z_e649da15",
|
|
6
|
+
"createdAt": "2026-07-06T19:49:53.212Z",
|
|
7
|
+
"toolVersion": "0.28.0",
|
|
8
8
|
"target": {
|
|
9
9
|
"targetId": "opentofu-server",
|
|
10
10
|
"adapter": "local-process",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"nodeVersion": "v22.22.1"
|
|
30
30
|
},
|
|
31
31
|
"summary": {
|
|
32
|
-
"total":
|
|
33
|
-
"pass":
|
|
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":
|
|
46
|
+
"durationMs": 1.897333000000799,
|
|
47
47
|
"message": "Advertised capability responded with the minimal expected shape (5 items).",
|
|
48
48
|
"evidence": [
|
|
49
49
|
{
|
|
@@ -206,7 +206,7 @@
|
|
|
206
206
|
"id": "prompts",
|
|
207
207
|
"capability": "prompts",
|
|
208
208
|
"status": "unsupported",
|
|
209
|
-
"durationMs": 0.
|
|
209
|
+
"durationMs": 0.005124999999679858,
|
|
210
210
|
"message": "Prompts are not advertised by the target.",
|
|
211
211
|
"evidence": [
|
|
212
212
|
{
|
|
@@ -222,7 +222,7 @@
|
|
|
222
222
|
"id": "resources",
|
|
223
223
|
"capability": "resources",
|
|
224
224
|
"status": "pass",
|
|
225
|
-
"durationMs":
|
|
225
|
+
"durationMs": 0.5354160000006232,
|
|
226
226
|
"message": "Advertised capability responded with the minimal expected shape (1 items).",
|
|
227
227
|
"evidence": [
|
|
228
228
|
{
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
"id": "security-lite",
|
|
252
252
|
"capability": "security-lite",
|
|
253
253
|
"status": "pass",
|
|
254
|
-
"durationMs": 0.
|
|
254
|
+
"durationMs": 0.022249999999985448,
|
|
255
255
|
"message": "No security issues detected (lightweight scan).",
|
|
256
256
|
"evidence": [
|
|
257
257
|
{
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
"id": "conformance",
|
|
268
268
|
"capability": "conformance",
|
|
269
269
|
"status": "pass",
|
|
270
|
-
"durationMs":
|
|
270
|
+
"durationMs": 0.7052499999990687,
|
|
271
271
|
"message": "All 7 conformance checks passed.",
|
|
272
272
|
"evidence": [
|
|
273
273
|
{
|
|
@@ -293,7 +293,7 @@
|
|
|
293
293
|
"id": "schema-quality",
|
|
294
294
|
"capability": "schema-quality",
|
|
295
295
|
"status": "partial",
|
|
296
|
-
"durationMs": 0.
|
|
296
|
+
"durationMs": 0.49095800000031886,
|
|
297
297
|
"message": "Found 1 quality finding(s) across 6 item(s): 1 warnings, 0 info.",
|
|
298
298
|
"evidence": [
|
|
299
299
|
{
|
|
@@ -307,6 +307,14 @@
|
|
|
307
307
|
],
|
|
308
308
|
"diagnostics": [
|
|
309
309
|
"[warning] resource \"opentofu-registry-info\": Missing description"
|
|
310
|
+
],
|
|
311
|
+
"findings": [
|
|
312
|
+
{
|
|
313
|
+
"itemType": "resource",
|
|
314
|
+
"itemName": "opentofu-registry-info",
|
|
315
|
+
"issue": "Missing description",
|
|
316
|
+
"severity": "warning"
|
|
317
|
+
}
|
|
310
318
|
]
|
|
311
319
|
}
|
|
312
320
|
]
|
|
@@ -315,7 +323,7 @@
|
|
|
315
323
|
"id": "security",
|
|
316
324
|
"capability": "security",
|
|
317
325
|
"status": "pass",
|
|
318
|
-
"durationMs": 0.
|
|
326
|
+
"durationMs": 0.15554200000042329,
|
|
319
327
|
"message": "No security issues detected.",
|
|
320
328
|
"evidence": [
|
|
321
329
|
{
|
|
@@ -326,6 +334,23 @@
|
|
|
326
334
|
"itemCount": 0
|
|
327
335
|
}
|
|
328
336
|
]
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"id": "attack-sim",
|
|
340
|
+
"capability": "attack-sim",
|
|
341
|
+
"status": "pass",
|
|
342
|
+
"durationMs": 0.4453749999993306,
|
|
343
|
+
"message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
|
|
344
|
+
"evidence": [
|
|
345
|
+
{
|
|
346
|
+
"endpoint": "attack-sim/safe",
|
|
347
|
+
"advertised": true,
|
|
348
|
+
"responded": true,
|
|
349
|
+
"minimalShapePresent": true,
|
|
350
|
+
"itemCount": 0,
|
|
351
|
+
"identifiers": []
|
|
352
|
+
}
|
|
353
|
+
]
|
|
329
354
|
}
|
|
330
355
|
],
|
|
331
356
|
"healthScore": {
|
|
@@ -354,7 +379,8 @@
|
|
|
354
379
|
"score": 100,
|
|
355
380
|
"details": [
|
|
356
381
|
"security-lite: pass (100/100)",
|
|
357
|
-
"security: pass (100/100)"
|
|
382
|
+
"security: pass (100/100)",
|
|
383
|
+
"attack-sim: pass (100/100)"
|
|
358
384
|
]
|
|
359
385
|
},
|
|
360
386
|
{
|
|
@@ -372,16 +398,16 @@
|
|
|
372
398
|
"weight": 0.1,
|
|
373
399
|
"score": 100,
|
|
374
400
|
"details": [
|
|
375
|
-
"Connect:
|
|
401
|
+
"Connect: 773ms",
|
|
376
402
|
"p95 latency: 2ms (3 operations)"
|
|
377
403
|
]
|
|
378
404
|
}
|
|
379
405
|
]
|
|
380
406
|
},
|
|
381
407
|
"performanceMetrics": {
|
|
382
|
-
"connectMs":
|
|
383
|
-
"toolsListMs":
|
|
384
|
-
"promptsListMs": 0.
|
|
385
|
-
"resourcesListMs":
|
|
408
|
+
"connectMs": 772.5637079999997,
|
|
409
|
+
"toolsListMs": 1.897333000000799,
|
|
410
|
+
"promptsListMs": 0.005124999999679858,
|
|
411
|
+
"resourcesListMs": 0.5354160000006232
|
|
386
412
|
}
|
|
387
413
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP Observatory Run Report
|
|
2
2
|
|
|
3
|
-
Generated at 2026-
|
|
3
|
+
Generated at 2026-07-06T19:49:53.212Z
|
|
4
4
|
|
|
5
5
|
## Target and Environment Metadata
|
|
6
6
|
|
|
@@ -25,7 +25,7 @@ Generated at 2026-06-24T02:07:29.328Z
|
|
|
25
25
|
|
|
26
26
|
| Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
|
|
27
27
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
28
|
-
| pass |
|
|
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 |
|
|
51
|
-
| healthy |
|
|
52
|
-
| healthy |
|
|
53
|
-
| healthy | security
|
|
54
|
-
| healthy |
|
|
55
|
-
|
|
|
56
|
-
|
|
|
50
|
+
| healthy | attack-sim | pass | 0.45 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
|
|
51
|
+
| healthy | conformance | pass | 0.71 | All 7 conformance checks passed. |
|
|
52
|
+
| healthy | resources | pass | 0.54 | Advertised capability responded with the minimal expected shape (1 items). |
|
|
53
|
+
| healthy | security | pass | 0.16 | No security issues detected. |
|
|
54
|
+
| healthy | security-lite | pass | 0.02 | No security issues detected (lightweight scan). |
|
|
55
|
+
| healthy | tools | pass | 1.90 | Advertised capability responded with the minimal expected shape (5 items). |
|
|
56
|
+
| review | schema-quality | partial | 0.49 | Found 1 quality finding(s) across 6 item(s): 1 warnings, 0 info. |
|
|
57
|
+
| confirm intent | prompts | unsupported | 0.01 | Prompts 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.
|
|
@@ -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-06T194953212Z_e649da15`
|
|
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-06T194955359Z_d769bb31",
|
|
6
|
+
"createdAt": "2026-07-06T19:49:55.359Z",
|
|
7
|
+
"toolVersion": "0.28.0",
|
|
8
8
|
"target": {
|
|
9
9
|
"targetId": "playwright-mcp-server",
|
|
10
10
|
"adapter": "local-process",
|
|
@@ -22,16 +22,16 @@
|
|
|
22
22
|
"whyItMatters": "Popular browser automation servers need explicit review around navigation, screenshots, and code evaluation."
|
|
23
23
|
},
|
|
24
24
|
"serverName": "Playwright",
|
|
25
|
-
"serverVersion": "1.
|
|
25
|
+
"serverVersion": "1.62.0-alpha-2026-06-29"
|
|
26
26
|
},
|
|
27
27
|
"environment": {
|
|
28
28
|
"platform": "darwin 25.5.0",
|
|
29
29
|
"nodeVersion": "v22.22.1"
|
|
30
30
|
},
|
|
31
31
|
"summary": {
|
|
32
|
-
"total":
|
|
32
|
+
"total": 8,
|
|
33
33
|
"pass": 2,
|
|
34
|
-
"fail":
|
|
34
|
+
"fail": 3,
|
|
35
35
|
"partial": 1,
|
|
36
36
|
"unsupported": 2,
|
|
37
37
|
"flaky": 0,
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"id": "tools",
|
|
44
44
|
"capability": "tools",
|
|
45
45
|
"status": "pass",
|
|
46
|
-
"durationMs":
|
|
46
|
+
"durationMs": 2.8597500000014406,
|
|
47
47
|
"message": "Advertised capability responded with the minimal expected shape (23 items).",
|
|
48
48
|
"evidence": [
|
|
49
49
|
{
|
|
@@ -439,10 +439,20 @@
|
|
|
439
439
|
"fullPage": {
|
|
440
440
|
"description": "When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots.",
|
|
441
441
|
"type": "boolean"
|
|
442
|
+
},
|
|
443
|
+
"scale": {
|
|
444
|
+
"default": "css",
|
|
445
|
+
"description": "Image resolution scale. \"css\" produces a screenshot sized in CSS pixels (smaller, consistent across devices). \"device\" produces a high-resolution screenshot using device pixels (larger, accounts for the device pixel ratio). Default is css.",
|
|
446
|
+
"type": "string",
|
|
447
|
+
"enum": [
|
|
448
|
+
"css",
|
|
449
|
+
"device"
|
|
450
|
+
]
|
|
442
451
|
}
|
|
443
452
|
},
|
|
444
453
|
"required": [
|
|
445
|
-
"type"
|
|
454
|
+
"type",
|
|
455
|
+
"scale"
|
|
446
456
|
],
|
|
447
457
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
448
458
|
"additionalProperties": false
|
|
@@ -641,7 +651,7 @@
|
|
|
641
651
|
"id": "prompts",
|
|
642
652
|
"capability": "prompts",
|
|
643
653
|
"status": "unsupported",
|
|
644
|
-
"durationMs": 0.
|
|
654
|
+
"durationMs": 0.0011660000000119908,
|
|
645
655
|
"message": "Prompts are not advertised by the target.",
|
|
646
656
|
"evidence": [
|
|
647
657
|
{
|
|
@@ -657,7 +667,7 @@
|
|
|
657
667
|
"id": "resources",
|
|
658
668
|
"capability": "resources",
|
|
659
669
|
"status": "unsupported",
|
|
660
|
-
"durationMs": 0.
|
|
670
|
+
"durationMs": 0.0022920000010344665,
|
|
661
671
|
"message": "Resources are not advertised by the target.",
|
|
662
672
|
"evidence": [
|
|
663
673
|
{
|
|
@@ -673,7 +683,7 @@
|
|
|
673
683
|
"id": "security-lite",
|
|
674
684
|
"capability": "security-lite",
|
|
675
685
|
"status": "fail",
|
|
676
|
-
"durationMs": 0.
|
|
686
|
+
"durationMs": 0.05433400000038091,
|
|
677
687
|
"message": "Found 6 security finding(s): 2 high, 2 medium, 2 low.",
|
|
678
688
|
"evidence": [
|
|
679
689
|
{
|
|
@@ -741,7 +751,7 @@
|
|
|
741
751
|
"id": "conformance",
|
|
742
752
|
"capability": "conformance",
|
|
743
753
|
"status": "pass",
|
|
744
|
-
"durationMs":
|
|
754
|
+
"durationMs": 987.085916,
|
|
745
755
|
"message": "All 7 conformance checks passed.",
|
|
746
756
|
"evidence": [
|
|
747
757
|
{
|
|
@@ -767,7 +777,7 @@
|
|
|
767
777
|
"id": "schema-quality",
|
|
768
778
|
"capability": "schema-quality",
|
|
769
779
|
"status": "partial",
|
|
770
|
-
"durationMs":
|
|
780
|
+
"durationMs": 1.854709000001094,
|
|
771
781
|
"message": "Found 4 quality finding(s) across 23 item(s): 0 warnings, 4 info.",
|
|
772
782
|
"evidence": [
|
|
773
783
|
{
|
|
@@ -787,6 +797,32 @@
|
|
|
787
797
|
"[info] tool \"browser_run_code_unsafe\": Has properties but no 'required' array declared",
|
|
788
798
|
"[info] tool \"browser_snapshot\": Has properties but no 'required' array declared",
|
|
789
799
|
"[info] tool \"browser_wait_for\": Has properties but no 'required' array declared"
|
|
800
|
+
],
|
|
801
|
+
"findings": [
|
|
802
|
+
{
|
|
803
|
+
"itemType": "tool",
|
|
804
|
+
"itemName": "browser_file_upload",
|
|
805
|
+
"issue": "Has properties but no 'required' array declared",
|
|
806
|
+
"severity": "info"
|
|
807
|
+
},
|
|
808
|
+
{
|
|
809
|
+
"itemType": "tool",
|
|
810
|
+
"itemName": "browser_run_code_unsafe",
|
|
811
|
+
"issue": "Has properties but no 'required' array declared",
|
|
812
|
+
"severity": "info"
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
"itemType": "tool",
|
|
816
|
+
"itemName": "browser_snapshot",
|
|
817
|
+
"issue": "Has properties but no 'required' array declared",
|
|
818
|
+
"severity": "info"
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"itemType": "tool",
|
|
822
|
+
"itemName": "browser_wait_for",
|
|
823
|
+
"issue": "Has properties but no 'required' array declared",
|
|
824
|
+
"severity": "info"
|
|
825
|
+
}
|
|
790
826
|
]
|
|
791
827
|
}
|
|
792
828
|
]
|
|
@@ -795,7 +831,7 @@
|
|
|
795
831
|
"id": "security",
|
|
796
832
|
"capability": "security",
|
|
797
833
|
"status": "fail",
|
|
798
|
-
"durationMs":
|
|
834
|
+
"durationMs": 2.534332999999606,
|
|
799
835
|
"message": "Found 6 security finding(s): 2 high, 2 medium, 2 low.",
|
|
800
836
|
"evidence": [
|
|
801
837
|
{
|
|
@@ -858,6 +894,125 @@
|
|
|
858
894
|
]
|
|
859
895
|
}
|
|
860
896
|
]
|
|
897
|
+
},
|
|
898
|
+
{
|
|
899
|
+
"id": "attack-sim",
|
|
900
|
+
"capability": "attack-sim",
|
|
901
|
+
"status": "fail",
|
|
902
|
+
"durationMs": 1.0038750000003347,
|
|
903
|
+
"message": "Safe attack simulation found 4 finding(s): 1 high, 3 medium, 0 low.",
|
|
904
|
+
"evidence": [
|
|
905
|
+
{
|
|
906
|
+
"endpoint": "attack-sim/safe",
|
|
907
|
+
"advertised": true,
|
|
908
|
+
"responded": true,
|
|
909
|
+
"minimalShapePresent": true,
|
|
910
|
+
"itemCount": 4,
|
|
911
|
+
"identifiers": [
|
|
912
|
+
"browser_evaluate",
|
|
913
|
+
"browser_navigate",
|
|
914
|
+
"browser_run_code_unsafe",
|
|
915
|
+
"browser_tabs"
|
|
916
|
+
],
|
|
917
|
+
"diagnostics": [
|
|
918
|
+
"[medium] Tool \"browser_evaluate\" combines broad parameters (filename) with destructive or non-read-only behavior.",
|
|
919
|
+
"[medium] Tool \"browser_navigate\" combines broad parameters (url) with destructive or non-read-only behavior.",
|
|
920
|
+
"[high] Tool \"browser_run_code_unsafe\" combines broad parameters (code, filename) with destructive or non-read-only behavior.",
|
|
921
|
+
"[medium] Tool \"browser_tabs\" combines broad parameters (url) with destructive or non-read-only behavior."
|
|
922
|
+
],
|
|
923
|
+
"findings": [
|
|
924
|
+
{
|
|
925
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
926
|
+
"attackClass": "permission-boundary",
|
|
927
|
+
"severity": "medium",
|
|
928
|
+
"itemType": "tool",
|
|
929
|
+
"itemName": "browser_evaluate",
|
|
930
|
+
"message": "Tool \"browser_evaluate\" combines broad parameters (filename) with destructive or non-read-only behavior.",
|
|
931
|
+
"evidence": {
|
|
932
|
+
"broadParams": [
|
|
933
|
+
"filename"
|
|
934
|
+
],
|
|
935
|
+
"annotations": {
|
|
936
|
+
"title": "Evaluate JavaScript",
|
|
937
|
+
"readOnlyHint": false,
|
|
938
|
+
"destructiveHint": true,
|
|
939
|
+
"openWorldHint": true
|
|
940
|
+
},
|
|
941
|
+
"description": "Evaluate JavaScript expression on page or element"
|
|
942
|
+
},
|
|
943
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
944
|
+
"recommendedAction": "gate"
|
|
945
|
+
},
|
|
946
|
+
{
|
|
947
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
948
|
+
"attackClass": "permission-boundary",
|
|
949
|
+
"severity": "medium",
|
|
950
|
+
"itemType": "tool",
|
|
951
|
+
"itemName": "browser_navigate",
|
|
952
|
+
"message": "Tool \"browser_navigate\" combines broad parameters (url) with destructive or non-read-only behavior.",
|
|
953
|
+
"evidence": {
|
|
954
|
+
"broadParams": [
|
|
955
|
+
"url"
|
|
956
|
+
],
|
|
957
|
+
"annotations": {
|
|
958
|
+
"title": "Navigate to a URL",
|
|
959
|
+
"readOnlyHint": false,
|
|
960
|
+
"destructiveHint": true,
|
|
961
|
+
"openWorldHint": true
|
|
962
|
+
},
|
|
963
|
+
"description": "Navigate to a URL"
|
|
964
|
+
},
|
|
965
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
966
|
+
"recommendedAction": "gate"
|
|
967
|
+
},
|
|
968
|
+
{
|
|
969
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
970
|
+
"attackClass": "permission-boundary",
|
|
971
|
+
"severity": "high",
|
|
972
|
+
"itemType": "tool",
|
|
973
|
+
"itemName": "browser_run_code_unsafe",
|
|
974
|
+
"message": "Tool \"browser_run_code_unsafe\" combines broad parameters (code, filename) with destructive or non-read-only behavior.",
|
|
975
|
+
"evidence": {
|
|
976
|
+
"broadParams": [
|
|
977
|
+
"code",
|
|
978
|
+
"filename"
|
|
979
|
+
],
|
|
980
|
+
"annotations": {
|
|
981
|
+
"title": "Run Playwright code (unsafe)",
|
|
982
|
+
"readOnlyHint": false,
|
|
983
|
+
"destructiveHint": true,
|
|
984
|
+
"openWorldHint": true
|
|
985
|
+
},
|
|
986
|
+
"description": "Run a Playwright code snippet. Unsafe: executes arbitrary JavaScript in the Playwright server process and is RCE-equivalent."
|
|
987
|
+
},
|
|
988
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
989
|
+
"recommendedAction": "quarantine"
|
|
990
|
+
},
|
|
991
|
+
{
|
|
992
|
+
"ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
|
|
993
|
+
"attackClass": "permission-boundary",
|
|
994
|
+
"severity": "medium",
|
|
995
|
+
"itemType": "tool",
|
|
996
|
+
"itemName": "browser_tabs",
|
|
997
|
+
"message": "Tool \"browser_tabs\" combines broad parameters (url) with destructive or non-read-only behavior.",
|
|
998
|
+
"evidence": {
|
|
999
|
+
"broadParams": [
|
|
1000
|
+
"url"
|
|
1001
|
+
],
|
|
1002
|
+
"annotations": {
|
|
1003
|
+
"title": "Manage tabs",
|
|
1004
|
+
"readOnlyHint": false,
|
|
1005
|
+
"destructiveHint": true,
|
|
1006
|
+
"openWorldHint": true
|
|
1007
|
+
},
|
|
1008
|
+
"description": "List, create, close, or select a browser tab."
|
|
1009
|
+
},
|
|
1010
|
+
"recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
|
|
1011
|
+
"recommendedAction": "gate"
|
|
1012
|
+
}
|
|
1013
|
+
]
|
|
1014
|
+
}
|
|
1015
|
+
]
|
|
861
1016
|
}
|
|
862
1017
|
],
|
|
863
1018
|
"healthScore": {
|
|
@@ -886,7 +1041,8 @@
|
|
|
886
1041
|
"score": 0,
|
|
887
1042
|
"details": [
|
|
888
1043
|
"security-lite: fail (0/100)",
|
|
889
|
-
"security: fail (0/100)"
|
|
1044
|
+
"security: fail (0/100)",
|
|
1045
|
+
"attack-sim: fail (0/100)"
|
|
890
1046
|
]
|
|
891
1047
|
},
|
|
892
1048
|
{
|
|
@@ -904,16 +1060,16 @@
|
|
|
904
1060
|
"weight": 0.1,
|
|
905
1061
|
"score": 100,
|
|
906
1062
|
"details": [
|
|
907
|
-
"Connect:
|
|
908
|
-
"p95 latency:
|
|
1063
|
+
"Connect: 683ms",
|
|
1064
|
+
"p95 latency: 3ms (3 operations)"
|
|
909
1065
|
]
|
|
910
1066
|
}
|
|
911
1067
|
]
|
|
912
1068
|
},
|
|
913
1069
|
"performanceMetrics": {
|
|
914
|
-
"connectMs":
|
|
915
|
-
"toolsListMs":
|
|
916
|
-
"promptsListMs": 0.
|
|
917
|
-
"resourcesListMs": 0.
|
|
1070
|
+
"connectMs": 683.3468749999993,
|
|
1071
|
+
"toolsListMs": 2.8597500000014406,
|
|
1072
|
+
"promptsListMs": 0.0011660000000119908,
|
|
1073
|
+
"resourcesListMs": 0.0022920000010344665
|
|
918
1074
|
}
|
|
919
1075
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# MCP Observatory Run Report
|
|
2
2
|
|
|
3
|
-
Generated at 2026-
|
|
3
|
+
Generated at 2026-07-06T19:49:55.359Z
|
|
4
4
|
|
|
5
5
|
## Target and Environment Metadata
|
|
6
6
|
|
|
7
7
|
- Target: `playwright-mcp-server`
|
|
8
8
|
- Adapter: `local-process`
|
|
9
9
|
- Command: `npx -y @playwright/mcp`
|
|
10
|
-
- Server: `Playwright 1.
|
|
10
|
+
- Server: `Playwright 1.62.0-alpha-2026-06-29`
|
|
11
11
|
- Platform: `darwin 25.5.0`
|
|
12
12
|
- Node: `v22.22.1`
|
|
13
13
|
|
|
@@ -25,18 +25,18 @@ Generated at 2026-06-24T02:07:32.035Z
|
|
|
25
25
|
|
|
26
26
|
| Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
|
|
27
27
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
28
|
-
| fail |
|
|
28
|
+
| fail | 8 | 2 | 3 | 1 | 2 | 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 4 quality finding(s) across 23 item(s): 0 warnings, 4 info.;
|
|
33
|
+
- Top risks: schema-quality: Found 4 quality finding(s) across 23 item(s): 0 warnings, 4 info.; attack-sim: Safe attack simulation found 4 finding(s): 1 high, 3 medium, 0 low.; security: Found 6 security finding(s): 2 high, 2 medium, 2 low.
|
|
34
34
|
- Regression/schema drift: Run `mcp-observatory diff <previous-run.json> <current-run.json>` to classify regressions and schema drift.
|
|
35
|
-
- Failing checks: security-lite, 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, resources
|
|
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 | tools | pass |
|
|
52
|
-
| review | schema-quality | partial |
|
|
53
|
-
| confirm intent | prompts | unsupported | 0.
|
|
54
|
-
| confirm intent | resources | unsupported | 0.
|
|
55
|
-
| act now |
|
|
56
|
-
| act now | security
|
|
50
|
+
| healthy | conformance | pass | 987.09 | All 7 conformance checks passed. |
|
|
51
|
+
| healthy | tools | pass | 2.86 | Advertised capability responded with the minimal expected shape (23 items). |
|
|
52
|
+
| review | schema-quality | partial | 1.85 | Found 4 quality finding(s) across 23 item(s): 0 warnings, 4 info. |
|
|
53
|
+
| confirm intent | prompts | unsupported | 0.00 | Prompts are not advertised by the target. |
|
|
54
|
+
| confirm intent | resources | unsupported | 0.00 | Resources are not advertised by the target. |
|
|
55
|
+
| act now | attack-sim | fail | 1.00 | Safe attack simulation found 4 finding(s): 1 high, 3 medium, 0 low. |
|
|
56
|
+
| act now | security | fail | 2.53 | Found 6 security finding(s): 2 high, 2 medium, 2 low. |
|
|
57
|
+
| act now | security-lite | fail | 0.05 | Found 6 security finding(s): 2 high, 2 medium, 2 low. |
|
|
57
58
|
|
|
58
59
|
## Evidence Snippets
|
|
59
60
|
|
|
@@ -117,6 +118,18 @@ Summary: Resources are not advertised by the target.
|
|
|
117
118
|
- Identifiers: none
|
|
118
119
|
- Diagnostics: none
|
|
119
120
|
|
|
121
|
+
### attack-sim — fail
|
|
122
|
+
|
|
123
|
+
Summary: Safe attack simulation found 4 finding(s): 1 high, 3 medium, 0 low.
|
|
124
|
+
|
|
125
|
+
- Endpoint: `attack-sim/safe`
|
|
126
|
+
- Advertised: `true`
|
|
127
|
+
- Responded: `true`
|
|
128
|
+
- Minimal shape present: `true`
|
|
129
|
+
- Item count: `4`
|
|
130
|
+
- Identifiers: browser_evaluate, browser_navigate, browser_run_code_unsafe, browser_tabs
|
|
131
|
+
- Diagnostics: [medium] Tool "browser_evaluate" combines broad parameters (filename) with destructive or non-read-only behavior., [medium] Tool "browser_navigate" combines broad parameters (url) with destructive or non-read-only behavior., [high] Tool "browser_run_code_unsafe" combines broad parameters (code, filename) with destructive or non-read-only behavior. (+1 more)
|
|
132
|
+
|
|
120
133
|
### security — fail
|
|
121
134
|
|
|
122
135
|
Summary: Found 6 security finding(s): 2 high, 2 medium, 2 low.
|
|
@@ -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-
|
|
168
|
+
- Run ID: `run_2026-07-06T194955359Z_d769bb31`
|
|
156
169
|
- Gate: `fail`
|