@kryptosai/mcp-observatory 0.28.0 → 1.28.2

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 (108) hide show
  1. package/COMMERCIAL.md +26 -5
  2. package/README.md +65 -12
  3. package/dist/src/action-receipt.d.ts +20 -0
  4. package/dist/src/action-receipt.js +85 -0
  5. package/dist/src/action-receipt.js.map +1 -0
  6. package/dist/src/audit.d.ts +64 -0
  7. package/dist/src/audit.js +359 -0
  8. package/dist/src/audit.js.map +1 -0
  9. package/dist/src/checks/attack-sim.d.ts +2 -0
  10. package/dist/src/checks/attack-sim.js +12 -0
  11. package/dist/src/checks/attack-sim.js.map +1 -1
  12. package/dist/src/cli.js +8 -1
  13. package/dist/src/cli.js.map +1 -1
  14. package/dist/src/commands/attack-sim.js +54 -2
  15. package/dist/src/commands/attack-sim.js.map +1 -1
  16. package/dist/src/commands/audit.d.ts +2 -0
  17. package/dist/src/commands/audit.js +132 -0
  18. package/dist/src/commands/audit.js.map +1 -0
  19. package/dist/src/commands/init-ci.d.ts +2 -0
  20. package/dist/src/commands/init-ci.js +71 -11
  21. package/dist/src/commands/init-ci.js.map +1 -1
  22. package/dist/src/commands/legacy.js +2 -0
  23. package/dist/src/commands/legacy.js.map +1 -1
  24. package/dist/src/commands/receipt.d.ts +2 -0
  25. package/dist/src/commands/receipt.js +113 -0
  26. package/dist/src/commands/receipt.js.map +1 -0
  27. package/dist/src/commands/scan.js +23 -5
  28. package/dist/src/commands/scan.js.map +1 -1
  29. package/dist/src/commands/score.js +63 -0
  30. package/dist/src/commands/score.js.map +1 -1
  31. package/dist/src/commands/setup-ci-conversion.d.ts +2 -1
  32. package/dist/src/commands/setup-ci-conversion.js +22 -8
  33. package/dist/src/commands/setup-ci-conversion.js.map +1 -1
  34. package/dist/src/commands/test.js +18 -1
  35. package/dist/src/commands/test.js.map +1 -1
  36. package/dist/src/findings.d.ts +1 -0
  37. package/dist/src/findings.js +1 -0
  38. package/dist/src/findings.js.map +1 -1
  39. package/dist/src/index.d.ts +2 -0
  40. package/dist/src/index.js +2 -0
  41. package/dist/src/index.js.map +1 -1
  42. package/dist/src/receipt.d.ts +100 -0
  43. package/dist/src/receipt.js +375 -0
  44. package/dist/src/receipt.js.map +1 -0
  45. package/dist/src/reporters/attack-sim.js +6 -1
  46. package/dist/src/reporters/attack-sim.js.map +1 -1
  47. package/dist/src/reporters/sarif.js +11 -1
  48. package/dist/src/reporters/sarif.js.map +1 -1
  49. package/dist/src/security-profiles.d.ts +13 -0
  50. package/dist/src/security-profiles.js +59 -0
  51. package/dist/src/security-profiles.js.map +1 -0
  52. package/dist/src/telemetry.d.ts +7 -0
  53. package/dist/src/telemetry.js.map +1 -1
  54. package/docs/10x-agentic-growth-sprint.md +47 -0
  55. package/docs/agent-ecosystem-promotion-plan.md +1 -1
  56. package/docs/agentic-contributor-outreach.md +52 -0
  57. package/docs/code-scanning-demo.md +2 -2
  58. package/docs/commercial-boundary.md +83 -0
  59. package/docs/contributor-proof-cards/README.md +1 -1
  60. package/docs/examples/nsa-mcp-audit-report.md +372 -0
  61. package/docs/examples/nsa-mcp-results.sarif +930 -0
  62. package/docs/examples/nsa-mcp-score.json +13 -0
  63. package/docs/feishu-lark-mcp.md +1 -1
  64. package/docs/github-code-scanning-for-mcp.md +1 -1
  65. package/docs/government-enterprise-pilot.md +93 -0
  66. package/docs/mcp-receipts.md +109 -0
  67. package/docs/mcp-server-safety-index.md +26 -25
  68. package/docs/nsa-mcp-audit-ci.md +88 -0
  69. package/docs/procurement-one-pager.md +74 -0
  70. package/docs/proof.md +2 -2
  71. package/docs/public-guidance-crosswalk.md +48 -0
  72. package/docs/safety-index/artifacts/antv-chart-server.json +41 -23
  73. package/docs/safety-index/artifacts/antv-chart-server.md +23 -10
  74. package/docs/safety-index/artifacts/browsermcp-server.json +38 -20
  75. package/docs/safety-index/artifacts/browsermcp-server.md +23 -10
  76. package/docs/safety-index/artifacts/context7-server.json +85 -28
  77. package/docs/safety-index/artifacts/context7-server.md +35 -22
  78. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +460 -36
  79. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +31 -18
  80. package/docs/safety-index/artifacts/everything-server.json +38 -20
  81. package/docs/safety-index/artifacts/everything-server.md +25 -12
  82. package/docs/safety-index/artifacts/executeautomation-playwright-server.json +155 -20
  83. package/docs/safety-index/artifacts/executeautomation-playwright-server.md +26 -13
  84. package/docs/safety-index/artifacts/filesystem-server.json +116 -22
  85. package/docs/safety-index/artifacts/filesystem-server.md +27 -14
  86. package/docs/safety-index/artifacts/kubernetes-server.json +252 -27
  87. package/docs/safety-index/artifacts/kubernetes-server.md +44 -18
  88. package/docs/safety-index/artifacts/memory-server.json +39 -21
  89. package/docs/safety-index/artifacts/memory-server.md +24 -11
  90. package/docs/safety-index/artifacts/opentofu-server.json +38 -20
  91. package/docs/safety-index/artifacts/opentofu-server.md +24 -11
  92. package/docs/safety-index/artifacts/playwright-mcp-server.json +140 -20
  93. package/docs/safety-index/artifacts/playwright-mcp-server.md +26 -13
  94. package/docs/safety-index/artifacts/promptopia-server.json +41 -23
  95. package/docs/safety-index/artifacts/promptopia-server.md +26 -13
  96. package/docs/safety-index/artifacts/puppeteer-server.json +77 -34
  97. package/docs/safety-index/artifacts/puppeteer-server.md +45 -32
  98. package/docs/safety-index/artifacts/ref-tools-server.json +38 -20
  99. package/docs/safety-index/artifacts/ref-tools-server.md +22 -9
  100. package/docs/safety-index/artifacts/sequential-thinking-server.json +39 -21
  101. package/docs/safety-index/artifacts/sequential-thinking-server.md +23 -10
  102. package/docs/security-due-diligence.md +87 -0
  103. package/docs/setup-ci-doctor.md +11 -1
  104. package/docs/tool-call-receipts.md +1 -2
  105. package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
  106. package/examples/insecure-mcp-server/server.mjs +62 -0
  107. package/package.json +12 -1
  108. package/scripts/postinstall.mjs +22 -7
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "pass",
5
- "runId": "run_2026-07-06T014658742Z_9d713d02",
6
- "createdAt": "2026-07-06T01:46:58.742Z",
7
- "toolVersion": "0.26.1",
5
+ "runId": "run_2026-07-06T194952194Z_80b1e6dd",
6
+ "createdAt": "2026-07-06T19:49:52.194Z",
7
+ "toolVersion": "0.28.0",
8
8
  "target": {
9
9
  "targetId": "cyanheads-git-mcp-server",
10
10
  "adapter": "local-process",
@@ -25,14 +25,14 @@
25
25
  "serverVersion": "2.15.1"
26
26
  },
27
27
  "environment": {
28
- "platform": "darwin 24.0.0",
29
- "nodeVersion": "v25.8.1"
28
+ "platform": "darwin 25.5.0",
29
+ "nodeVersion": "v22.22.1"
30
30
  },
31
31
  "summary": {
32
- "total": 7,
32
+ "total": 8,
33
33
  "pass": 4,
34
34
  "fail": 0,
35
- "partial": 3,
35
+ "partial": 4,
36
36
  "unsupported": 0,
37
37
  "flaky": 0,
38
38
  "skipped": 0,
@@ -43,7 +43,7 @@
43
43
  "id": "tools",
44
44
  "capability": "tools",
45
45
  "status": "pass",
46
- "durationMs": 33.99316700000054,
46
+ "durationMs": 27.61420899999939,
47
47
  "message": "Advertised capability responded with the minimal expected shape (28 items).",
48
48
  "evidence": [
49
49
  {
@@ -1357,7 +1357,7 @@
1357
1357
  "id": "prompts",
1358
1358
  "capability": "prompts",
1359
1359
  "status": "pass",
1360
- "durationMs": 0.766749999998865,
1360
+ "durationMs": 0.6529589999991003,
1361
1361
  "message": "Advertised capability responded with the minimal expected shape (1 item).",
1362
1362
  "evidence": [
1363
1363
  {
@@ -1370,11 +1370,11 @@
1370
1370
  "git_wrapup"
1371
1371
  ],
1372
1372
  "diagnostics": [
1373
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Attempting to connect stdio transport...\"}",
1374
- "{\"level\":20,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Creating StdioServerTransport instance...\"}",
1375
- "{\"level\":20,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Connecting McpServer instance to StdioServerTransport...\"}",
1376
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"MCP Server connected and listening via stdio transport.\"}",
1377
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"applicationName\":\"@cyanheads/git-mcp-server\",\"applicationVersion\":\"2.15.1\",\"nodeEnvironment\":\"development\",\"requestId\":\"E3M9U-3WL5B\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"ServerStartup\",\"msg\":\"@cyanheads/git-mcp-server is now running and ready.\"}"
1373
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Attempting to connect stdio transport...\"}",
1374
+ "{\"level\":20,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Creating StdioServerTransport instance...\"}",
1375
+ "{\"level\":20,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Connecting McpServer instance to StdioServerTransport...\"}",
1376
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"MCP Server connected and listening via stdio transport.\"}",
1377
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"applicationName\":\"@cyanheads/git-mcp-server\",\"applicationVersion\":\"2.15.1\",\"nodeEnvironment\":\"development\",\"requestId\":\"TCM3J-5YAYY\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"ServerStartup\",\"msg\":\"@cyanheads/git-mcp-server is now running and ready.\"}"
1378
1378
  ]
1379
1379
  }
1380
1380
  ]
@@ -1383,7 +1383,7 @@
1383
1383
  "id": "resources",
1384
1384
  "capability": "resources",
1385
1385
  "status": "pass",
1386
- "durationMs": 0.6985839999997552,
1386
+ "durationMs": 0.6025000000008731,
1387
1387
  "message": "Advertised capability responded with the minimal expected shape (2 items).",
1388
1388
  "evidence": [
1389
1389
  {
@@ -1396,11 +1396,11 @@
1396
1396
  "git://working-directory"
1397
1397
  ],
1398
1398
  "diagnostics": [
1399
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Attempting to connect stdio transport...\"}",
1400
- "{\"level\":20,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Creating StdioServerTransport instance...\"}",
1401
- "{\"level\":20,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Connecting McpServer instance to StdioServerTransport...\"}",
1402
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"MCP Server connected and listening via stdio transport.\"}",
1403
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"applicationName\":\"@cyanheads/git-mcp-server\",\"applicationVersion\":\"2.15.1\",\"nodeEnvironment\":\"development\",\"requestId\":\"E3M9U-3WL5B\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"ServerStartup\",\"msg\":\"@cyanheads/git-mcp-server is now running and ready.\"}"
1399
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Attempting to connect stdio transport...\"}",
1400
+ "{\"level\":20,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Creating StdioServerTransport instance...\"}",
1401
+ "{\"level\":20,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Connecting McpServer instance to StdioServerTransport...\"}",
1402
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"MCP Server connected and listening via stdio transport.\"}",
1403
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"applicationName\":\"@cyanheads/git-mcp-server\",\"applicationVersion\":\"2.15.1\",\"nodeEnvironment\":\"development\",\"requestId\":\"TCM3J-5YAYY\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"ServerStartup\",\"msg\":\"@cyanheads/git-mcp-server is now running and ready.\"}"
1404
1404
  ]
1405
1405
  },
1406
1406
  {
@@ -1413,11 +1413,11 @@
1413
1413
  "git://working-directory"
1414
1414
  ],
1415
1415
  "diagnostics": [
1416
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Attempting to connect stdio transport...\"}",
1417
- "{\"level\":20,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Creating StdioServerTransport instance...\"}",
1418
- "{\"level\":20,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Connecting McpServer instance to StdioServerTransport...\"}",
1419
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"transport\":\"stdio\",\"requestId\":\"0MOWN-K5EH1\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"MCP Server connected and listening via stdio transport.\"}",
1420
- "{\"level\":30,\"time\":1783302419905,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":87344,\"applicationName\":\"@cyanheads/git-mcp-server\",\"applicationVersion\":\"2.15.1\",\"nodeEnvironment\":\"development\",\"requestId\":\"E3M9U-3WL5B\",\"timestamp\":\"2026-07-06T01:46:59.900Z\",\"operation\":\"ServerStartup\",\"msg\":\"@cyanheads/git-mcp-server is now running and ready.\"}"
1416
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Attempting to connect stdio transport...\"}",
1417
+ "{\"level\":20,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Creating StdioServerTransport instance...\"}",
1418
+ "{\"level\":20,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"Connecting McpServer instance to StdioServerTransport...\"}",
1419
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"transport\":\"stdio\",\"requestId\":\"A40P7-B7WJU\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"connectStdioTransport\",\"transportType\":\"Stdio\",\"msg\":\"MCP Server connected and listening via stdio transport.\"}",
1420
+ "{\"level\":30,\"time\":1783367393061,\"env\":\"development\",\"version\":\"2.15.1\",\"pid\":13590,\"applicationName\":\"@cyanheads/git-mcp-server\",\"applicationVersion\":\"2.15.1\",\"nodeEnvironment\":\"development\",\"requestId\":\"TCM3J-5YAYY\",\"timestamp\":\"2026-07-06T19:49:53.057Z\",\"operation\":\"ServerStartup\",\"msg\":\"@cyanheads/git-mcp-server is now running and ready.\"}"
1421
1421
  ]
1422
1422
  }
1423
1423
  ]
@@ -1426,7 +1426,7 @@
1426
1426
  "id": "security-lite",
1427
1427
  "capability": "security-lite",
1428
1428
  "status": "partial",
1429
- "durationMs": 0.10316700000112178,
1429
+ "durationMs": 0.08429100000103062,
1430
1430
  "message": "Found 19 security finding(s): 0 high, 19 medium, 0 low.",
1431
1431
  "evidence": [
1432
1432
  {
@@ -1600,7 +1600,7 @@
1600
1600
  "id": "conformance",
1601
1601
  "capability": "conformance",
1602
1602
  "status": "pass",
1603
- "durationMs": 43.65862500000003,
1603
+ "durationMs": 35.621124999999665,
1604
1604
  "message": "All 7 conformance checks passed.",
1605
1605
  "evidence": [
1606
1606
  {
@@ -1626,7 +1626,7 @@
1626
1626
  "id": "schema-quality",
1627
1627
  "capability": "schema-quality",
1628
1628
  "status": "partial",
1629
- "durationMs": 21.666000000001077,
1629
+ "durationMs": 17.433541000000332,
1630
1630
  "message": "Found 17 quality finding(s) across 30 item(s): 0 warnings, 17 info.",
1631
1631
  "evidence": [
1632
1632
  {
@@ -1784,7 +1784,7 @@
1784
1784
  "id": "security",
1785
1785
  "capability": "security",
1786
1786
  "status": "partial",
1787
- "durationMs": 27.04162499999984,
1787
+ "durationMs": 16.142957999998544,
1788
1788
  "message": "Found 19 security finding(s): 0 high, 19 medium, 0 low.",
1789
1789
  "evidence": [
1790
1790
  {
@@ -1953,6 +1953,429 @@
1953
1953
  ]
1954
1954
  }
1955
1955
  ]
1956
+ },
1957
+ {
1958
+ "id": "attack-sim",
1959
+ "capability": "attack-sim",
1960
+ "status": "partial",
1961
+ "durationMs": 18.084541000000172,
1962
+ "message": "Safe attack simulation found 19 finding(s): 0 high, 19 medium, 0 low.",
1963
+ "evidence": [
1964
+ {
1965
+ "endpoint": "attack-sim/safe",
1966
+ "advertised": true,
1967
+ "responded": true,
1968
+ "minimalShapePresent": true,
1969
+ "itemCount": 19,
1970
+ "identifiers": [
1971
+ "git_add",
1972
+ "git_branch",
1973
+ "git_checkout",
1974
+ "git_cherry_pick",
1975
+ "git_clean",
1976
+ "git_clone",
1977
+ "git_commit",
1978
+ "git_fetch",
1979
+ "git_init",
1980
+ "git_merge",
1981
+ "git_pull",
1982
+ "git_push",
1983
+ "git_rebase",
1984
+ "git_remote",
1985
+ "git_reset",
1986
+ "git_set_working_dir",
1987
+ "git_stash",
1988
+ "git_tag",
1989
+ "git_worktree"
1990
+ ],
1991
+ "diagnostics": [
1992
+ "[medium] Tool \"git_add\" combines broad parameters (path) with destructive or non-read-only behavior.",
1993
+ "[medium] Tool \"git_branch\" combines broad parameters (path) with destructive or non-read-only behavior.",
1994
+ "[medium] Tool \"git_checkout\" combines broad parameters (path) with destructive or non-read-only behavior.",
1995
+ "[medium] Tool \"git_cherry_pick\" combines broad parameters (path) with destructive or non-read-only behavior.",
1996
+ "[medium] Tool \"git_clean\" combines broad parameters (path) with destructive or non-read-only behavior.",
1997
+ "[medium] Tool \"git_clone\" combines broad parameters (url, path) with destructive or non-read-only behavior.",
1998
+ "[medium] Tool \"git_commit\" combines broad parameters (path) with destructive or non-read-only behavior.",
1999
+ "[medium] Tool \"git_fetch\" combines broad parameters (path) with destructive or non-read-only behavior.",
2000
+ "[medium] Tool \"git_init\" combines broad parameters (path) with destructive or non-read-only behavior.",
2001
+ "[medium] Tool \"git_merge\" combines broad parameters (path) with destructive or non-read-only behavior.",
2002
+ "[medium] Tool \"git_pull\" combines broad parameters (path) with destructive or non-read-only behavior.",
2003
+ "[medium] Tool \"git_push\" combines broad parameters (path) with destructive or non-read-only behavior.",
2004
+ "[medium] Tool \"git_rebase\" combines broad parameters (path) with destructive or non-read-only behavior.",
2005
+ "[medium] Tool \"git_remote\" combines broad parameters (path, url) with destructive or non-read-only behavior.",
2006
+ "[medium] Tool \"git_reset\" combines broad parameters (path) with destructive or non-read-only behavior.",
2007
+ "[medium] Tool \"git_set_working_dir\" combines broad parameters (path) with destructive or non-read-only behavior.",
2008
+ "[medium] Tool \"git_stash\" combines broad parameters (path) with destructive or non-read-only behavior.",
2009
+ "[medium] Tool \"git_tag\" combines broad parameters (path) with destructive or non-read-only behavior.",
2010
+ "[medium] Tool \"git_worktree\" combines broad parameters (path) with destructive or non-read-only behavior."
2011
+ ],
2012
+ "findings": [
2013
+ {
2014
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2015
+ "attackClass": "permission-boundary",
2016
+ "severity": "medium",
2017
+ "itemType": "tool",
2018
+ "itemName": "git_add",
2019
+ "message": "Tool \"git_add\" combines broad parameters (path) with destructive or non-read-only behavior.",
2020
+ "evidence": {
2021
+ "broadParams": [
2022
+ "path"
2023
+ ],
2024
+ "annotations": {
2025
+ "readOnlyHint": false
2026
+ },
2027
+ "description": "Stage files for commit. Add file contents to the staging area (index) to prepare for the next commit."
2028
+ },
2029
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2030
+ "recommendedAction": "gate"
2031
+ },
2032
+ {
2033
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2034
+ "attackClass": "permission-boundary",
2035
+ "severity": "medium",
2036
+ "itemType": "tool",
2037
+ "itemName": "git_branch",
2038
+ "message": "Tool \"git_branch\" combines broad parameters (path) with destructive or non-read-only behavior.",
2039
+ "evidence": {
2040
+ "broadParams": [
2041
+ "path"
2042
+ ],
2043
+ "annotations": {
2044
+ "readOnlyHint": false
2045
+ },
2046
+ "description": "Manage branches: list all branches, show current branch, create a new branch, delete a branch, or rename a branch."
2047
+ },
2048
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2049
+ "recommendedAction": "gate"
2050
+ },
2051
+ {
2052
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2053
+ "attackClass": "permission-boundary",
2054
+ "severity": "medium",
2055
+ "itemType": "tool",
2056
+ "itemName": "git_checkout",
2057
+ "message": "Tool \"git_checkout\" combines broad parameters (path) with destructive or non-read-only behavior.",
2058
+ "evidence": {
2059
+ "broadParams": [
2060
+ "path"
2061
+ ],
2062
+ "annotations": {
2063
+ "readOnlyHint": false
2064
+ },
2065
+ "description": "Switch branches or restore working tree files. Can checkout an existing branch, create a new branch, or restore specific files."
2066
+ },
2067
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2068
+ "recommendedAction": "gate"
2069
+ },
2070
+ {
2071
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2072
+ "attackClass": "permission-boundary",
2073
+ "severity": "medium",
2074
+ "itemType": "tool",
2075
+ "itemName": "git_cherry_pick",
2076
+ "message": "Tool \"git_cherry_pick\" combines broad parameters (path) with destructive or non-read-only behavior.",
2077
+ "evidence": {
2078
+ "broadParams": [
2079
+ "path"
2080
+ ],
2081
+ "annotations": {
2082
+ "readOnlyHint": false
2083
+ },
2084
+ "description": "Cherry-pick commits from other branches. Apply specific commits to the current branch without merging entire branches."
2085
+ },
2086
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2087
+ "recommendedAction": "gate"
2088
+ },
2089
+ {
2090
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2091
+ "attackClass": "permission-boundary",
2092
+ "severity": "medium",
2093
+ "itemType": "tool",
2094
+ "itemName": "git_clean",
2095
+ "message": "Tool \"git_clean\" combines broad parameters (path) with destructive or non-read-only behavior.",
2096
+ "evidence": {
2097
+ "broadParams": [
2098
+ "path"
2099
+ ],
2100
+ "annotations": {
2101
+ "readOnlyHint": false
2102
+ },
2103
+ "description": "Remove untracked files from the working directory. Requires force flag for safety. Use dry-run to preview files that would be removed."
2104
+ },
2105
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2106
+ "recommendedAction": "gate"
2107
+ },
2108
+ {
2109
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2110
+ "attackClass": "permission-boundary",
2111
+ "severity": "medium",
2112
+ "itemType": "tool",
2113
+ "itemName": "git_clone",
2114
+ "message": "Tool \"git_clone\" combines broad parameters (url, path) with destructive or non-read-only behavior.",
2115
+ "evidence": {
2116
+ "broadParams": [
2117
+ "url",
2118
+ "path"
2119
+ ],
2120
+ "annotations": {
2121
+ "readOnlyHint": false
2122
+ },
2123
+ "description": "Clone a repository from a remote URL or local path. Accepts HTTP(S), SSH, git://, file://, and bare filesystem paths, with optional shallow cloning."
2124
+ },
2125
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2126
+ "recommendedAction": "gate"
2127
+ },
2128
+ {
2129
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2130
+ "attackClass": "permission-boundary",
2131
+ "severity": "medium",
2132
+ "itemType": "tool",
2133
+ "itemName": "git_commit",
2134
+ "message": "Tool \"git_commit\" combines broad parameters (path) with destructive or non-read-only behavior.",
2135
+ "evidence": {
2136
+ "broadParams": [
2137
+ "path"
2138
+ ],
2139
+ "annotations": {
2140
+ "readOnlyHint": false
2141
+ },
2142
+ "description": "Create a new commit with staged changes in the repository. Records a snapshot of the staging area with a commit message.\n\n**Commit Message Format:**\nPass commit messages as JSON string parameters. Multi-line messages are supported using standard JSON string escaping.\n\n**Examples:**\n- Single line: { \"message\": \"feat: add user authentication\" }\n- Multi-line: { \"message\": \"feat: add user authentication\\n\\nImplemented OAuth2 flow with JWT tokens.\\nAdded tests for login and logout.\" }\n\nNote: Do not use bash heredoc syntax. Literal escape sequences (\\n, \\t) in the message string are automatically normalized to their actual characters."
2143
+ },
2144
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2145
+ "recommendedAction": "gate"
2146
+ },
2147
+ {
2148
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2149
+ "attackClass": "permission-boundary",
2150
+ "severity": "medium",
2151
+ "itemType": "tool",
2152
+ "itemName": "git_fetch",
2153
+ "message": "Tool \"git_fetch\" combines broad parameters (path) with destructive or non-read-only behavior.",
2154
+ "evidence": {
2155
+ "broadParams": [
2156
+ "path"
2157
+ ],
2158
+ "annotations": {
2159
+ "readOnlyHint": false
2160
+ },
2161
+ "description": "Fetch updates from a remote repository. Downloads objects and refs without merging them."
2162
+ },
2163
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2164
+ "recommendedAction": "gate"
2165
+ },
2166
+ {
2167
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2168
+ "attackClass": "permission-boundary",
2169
+ "severity": "medium",
2170
+ "itemType": "tool",
2171
+ "itemName": "git_init",
2172
+ "message": "Tool \"git_init\" combines broad parameters (path) with destructive or non-read-only behavior.",
2173
+ "evidence": {
2174
+ "broadParams": [
2175
+ "path"
2176
+ ],
2177
+ "annotations": {
2178
+ "readOnlyHint": false
2179
+ },
2180
+ "description": "Initialize a new Git repository at the specified path. Creates a .git directory and sets up the initial branch."
2181
+ },
2182
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2183
+ "recommendedAction": "gate"
2184
+ },
2185
+ {
2186
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2187
+ "attackClass": "permission-boundary",
2188
+ "severity": "medium",
2189
+ "itemType": "tool",
2190
+ "itemName": "git_merge",
2191
+ "message": "Tool \"git_merge\" combines broad parameters (path) with destructive or non-read-only behavior.",
2192
+ "evidence": {
2193
+ "broadParams": [
2194
+ "path"
2195
+ ],
2196
+ "annotations": {
2197
+ "readOnlyHint": false
2198
+ },
2199
+ "description": "Merge branches together. Integrates changes from another branch into the current branch with optional merge strategies."
2200
+ },
2201
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2202
+ "recommendedAction": "gate"
2203
+ },
2204
+ {
2205
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2206
+ "attackClass": "permission-boundary",
2207
+ "severity": "medium",
2208
+ "itemType": "tool",
2209
+ "itemName": "git_pull",
2210
+ "message": "Tool \"git_pull\" combines broad parameters (path) with destructive or non-read-only behavior.",
2211
+ "evidence": {
2212
+ "broadParams": [
2213
+ "path"
2214
+ ],
2215
+ "annotations": {
2216
+ "readOnlyHint": false
2217
+ },
2218
+ "description": "Pull changes from a remote repository. Fetches and integrates changes into the current branch."
2219
+ },
2220
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2221
+ "recommendedAction": "gate"
2222
+ },
2223
+ {
2224
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2225
+ "attackClass": "permission-boundary",
2226
+ "severity": "medium",
2227
+ "itemType": "tool",
2228
+ "itemName": "git_push",
2229
+ "message": "Tool \"git_push\" combines broad parameters (path) with destructive or non-read-only behavior.",
2230
+ "evidence": {
2231
+ "broadParams": [
2232
+ "path"
2233
+ ],
2234
+ "annotations": {
2235
+ "readOnlyHint": false
2236
+ },
2237
+ "description": "Push changes to a remote repository. Uploads local commits to the remote branch."
2238
+ },
2239
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2240
+ "recommendedAction": "gate"
2241
+ },
2242
+ {
2243
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2244
+ "attackClass": "permission-boundary",
2245
+ "severity": "medium",
2246
+ "itemType": "tool",
2247
+ "itemName": "git_rebase",
2248
+ "message": "Tool \"git_rebase\" combines broad parameters (path) with destructive or non-read-only behavior.",
2249
+ "evidence": {
2250
+ "broadParams": [
2251
+ "path"
2252
+ ],
2253
+ "annotations": {
2254
+ "readOnlyHint": false
2255
+ },
2256
+ "description": "Rebase commits onto another branch. Reapplies commits on top of another base tip for a cleaner history."
2257
+ },
2258
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2259
+ "recommendedAction": "gate"
2260
+ },
2261
+ {
2262
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2263
+ "attackClass": "permission-boundary",
2264
+ "severity": "medium",
2265
+ "itemType": "tool",
2266
+ "itemName": "git_remote",
2267
+ "message": "Tool \"git_remote\" combines broad parameters (path, url) with destructive or non-read-only behavior.",
2268
+ "evidence": {
2269
+ "broadParams": [
2270
+ "path",
2271
+ "url"
2272
+ ],
2273
+ "annotations": {
2274
+ "readOnlyHint": false
2275
+ },
2276
+ "description": "Manage remote repositories: list remotes, add new remotes, remove remotes, rename remotes, or get/set remote URLs."
2277
+ },
2278
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2279
+ "recommendedAction": "gate"
2280
+ },
2281
+ {
2282
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2283
+ "attackClass": "permission-boundary",
2284
+ "severity": "medium",
2285
+ "itemType": "tool",
2286
+ "itemName": "git_reset",
2287
+ "message": "Tool \"git_reset\" combines broad parameters (path) with destructive or non-read-only behavior.",
2288
+ "evidence": {
2289
+ "broadParams": [
2290
+ "path"
2291
+ ],
2292
+ "annotations": {
2293
+ "readOnlyHint": false
2294
+ },
2295
+ "description": "Reset current HEAD to specified state. Can be used to unstage files (soft), discard commits (mixed), or discard all changes (hard)."
2296
+ },
2297
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2298
+ "recommendedAction": "gate"
2299
+ },
2300
+ {
2301
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2302
+ "attackClass": "permission-boundary",
2303
+ "severity": "medium",
2304
+ "itemType": "tool",
2305
+ "itemName": "git_set_working_dir",
2306
+ "message": "Tool \"git_set_working_dir\" combines broad parameters (path) with destructive or non-read-only behavior.",
2307
+ "evidence": {
2308
+ "broadParams": [
2309
+ "path"
2310
+ ],
2311
+ "annotations": {
2312
+ "readOnlyHint": false
2313
+ },
2314
+ "description": "Set the session working directory for all git operations so subsequent calls can omit the path parameter. Always returns a repository snapshot (status, recent commits, recent tags, remotes) to orient the caller."
2315
+ },
2316
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2317
+ "recommendedAction": "gate"
2318
+ },
2319
+ {
2320
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2321
+ "attackClass": "permission-boundary",
2322
+ "severity": "medium",
2323
+ "itemType": "tool",
2324
+ "itemName": "git_stash",
2325
+ "message": "Tool \"git_stash\" combines broad parameters (path) with destructive or non-read-only behavior.",
2326
+ "evidence": {
2327
+ "broadParams": [
2328
+ "path"
2329
+ ],
2330
+ "annotations": {
2331
+ "readOnlyHint": false
2332
+ },
2333
+ "description": "Manage stashes: list stashes, save current changes (push), restore changes (pop/apply), or remove stashes (drop/clear)."
2334
+ },
2335
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2336
+ "recommendedAction": "gate"
2337
+ },
2338
+ {
2339
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2340
+ "attackClass": "permission-boundary",
2341
+ "severity": "medium",
2342
+ "itemType": "tool",
2343
+ "itemName": "git_tag",
2344
+ "message": "Tool \"git_tag\" combines broad parameters (path) with destructive or non-read-only behavior.",
2345
+ "evidence": {
2346
+ "broadParams": [
2347
+ "path"
2348
+ ],
2349
+ "annotations": {
2350
+ "readOnlyHint": false
2351
+ },
2352
+ "description": "Manage tags: list all tags, create a new tag, delete a tag, or verify a signed tag. Tags are used to mark specific points in history (releases, milestones). Verify runs `git tag -v` and returns a structured result distinguishing unsigned tags, missing trust configuration, bad signatures, and valid signatures."
2353
+ },
2354
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2355
+ "recommendedAction": "gate"
2356
+ },
2357
+ {
2358
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
2359
+ "attackClass": "permission-boundary",
2360
+ "severity": "medium",
2361
+ "itemType": "tool",
2362
+ "itemName": "git_worktree",
2363
+ "message": "Tool \"git_worktree\" combines broad parameters (path) with destructive or non-read-only behavior.",
2364
+ "evidence": {
2365
+ "broadParams": [
2366
+ "path"
2367
+ ],
2368
+ "annotations": {
2369
+ "readOnlyHint": false
2370
+ },
2371
+ "description": "Manage multiple working trees: list worktrees, add new worktrees for parallel work, remove worktrees, or move worktrees to new locations."
2372
+ },
2373
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
2374
+ "recommendedAction": "gate"
2375
+ }
2376
+ ]
2377
+ }
2378
+ ]
1956
2379
  }
1957
2380
  ],
1958
2381
  "healthScore": {
@@ -1981,7 +2404,8 @@
1981
2404
  "score": 60,
1982
2405
  "details": [
1983
2406
  "security-lite: partial (60/100)",
1984
- "security: partial (60/100)"
2407
+ "security: partial (60/100)",
2408
+ "attack-sim: partial (60/100)"
1985
2409
  ]
1986
2410
  },
1987
2411
  {
@@ -1999,16 +2423,16 @@
1999
2423
  "weight": 0.1,
2000
2424
  "score": 100,
2001
2425
  "details": [
2002
- "Connect: 1166ms",
2003
- "p95 latency: 34ms (3 operations)"
2426
+ "Connect: 870ms",
2427
+ "p95 latency: 28ms (3 operations)"
2004
2428
  ]
2005
2429
  }
2006
2430
  ]
2007
2431
  },
2008
2432
  "performanceMetrics": {
2009
- "connectMs": 1166.4691249999996,
2010
- "toolsListMs": 33.99316700000054,
2011
- "promptsListMs": 0.766749999998865,
2012
- "resourcesListMs": 0.6985839999997552
2433
+ "connectMs": 869.9702500000003,
2434
+ "toolsListMs": 27.61420899999939,
2435
+ "promptsListMs": 0.6529589999991003,
2436
+ "resourcesListMs": 0.6025000000008731
2013
2437
  }
2014
2438
  }