matrixscroll 0.6.3__tar.gz → 0.7.0__tar.gz

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 (200) hide show
  1. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/.gitignore +1 -0
  2. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/CHANGELOG.md +83 -0
  3. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/CONTRIBUTING.md +30 -0
  4. matrixscroll-0.7.0/PKG-INFO +317 -0
  5. matrixscroll-0.7.0/README.md +258 -0
  6. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/SECURITY.md +3 -2
  7. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/SPEC.md +23 -6
  8. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/ADOPTER_KIT.md +6 -6
  9. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/AGENTIC_AI_SECURITY.md +3 -3
  10. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/CI_HARD_GATE.md +2 -2
  11. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/COMMIT_TIME_VS_ARTIFACT_TIME.md +3 -3
  12. matrixscroll-0.7.0/docs/COMPARISON.md +47 -0
  13. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/CRYPTO_BACKEND.md +1 -1
  14. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/CRYPTO_ROADMAP.md +1 -1
  15. matrixscroll-0.7.0/docs/DOCTRINE.md +56 -0
  16. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/FIVE_MINUTES.md +2 -2
  17. matrixscroll-0.7.0/docs/POC2_AUDIT.md +52 -0
  18. matrixscroll-0.7.0/docs/ROADMAP_2026-07.md +38 -0
  19. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/SECURITY_PROPERTIES.md +1 -1
  20. matrixscroll-0.7.0/docs/SLSA_SOURCE_TRACK_MAPPING.md +26 -0
  21. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/SOFTWARE_PRODUCTS.md +7 -8
  22. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/WHITEPAPER.md +22 -23
  23. matrixscroll-0.7.0/docs/commercial/README.md +20 -0
  24. matrixscroll-0.7.0/docs/commercial/SCROLL_GATE_V2.md +55 -0
  25. matrixscroll-0.7.0/docs/commercial/SSX360_SCROLL.md +34 -0
  26. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/delegation-attestation-rfc.md +1 -1
  27. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/explanation/ap2.md +2 -2
  28. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/explanation/style-supplement.md +14 -13
  29. matrixscroll-0.7.0/docs/explanation/trust-boundaries.md +40 -0
  30. matrixscroll-0.7.0/docs/hardware-provider.md +115 -0
  31. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/how-to/gate-protected-branch.md +19 -10
  32. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/how-to/scan-mcp-server.md +1 -1
  33. matrixscroll-0.7.0/docs/images/ssx360-usb-signer-architecture.jpg +0 -0
  34. matrixscroll-0.7.0/docs/images/ssx360-usb-signer-round-trip.jpg +0 -0
  35. matrixscroll-0.7.0/docs/images/ssx360-usb-signer.jpg +0 -0
  36. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/index.md +22 -16
  37. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/quickstart-agent.md +1 -1
  38. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/quickstart-claude-code.md +1 -1
  39. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/quickstart-git.md +4 -4
  40. matrixscroll-0.7.0/docs/quickstart-mcp.md +64 -0
  41. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/reference/cli.md +32 -9
  42. matrixscroll-0.7.0/docs/reference/commit-envelope.md +57 -0
  43. matrixscroll-0.7.0/docs/reference/exit-codes.md +56 -0
  44. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/reference/python-api.md +9 -3
  45. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/registries-guide.md +3 -2
  46. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/requirements.txt +2 -2
  47. matrixscroll-0.7.0/docs/tutorial/first-commit.md +158 -0
  48. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/ci/protected-branch.yml +3 -3
  49. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/__init__.py +5 -7
  50. matrixscroll-0.7.0/matrixscroll/_schemas.py +34 -0
  51. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/cli.py +34 -17
  52. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/cloud/__init__.py +0 -2
  53. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/cloud/client.py +6 -7
  54. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/formal.py +1 -0
  55. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/gate.py +81 -19
  56. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/mcp.py +48 -19
  57. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/mcp_core.py +19 -1
  58. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/providers/se050_transport.py +1 -1
  59. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/ssx360_cli.py +119 -33
  60. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/pyproject.toml +22 -11
  61. matrixscroll-0.7.0/schemas/ssx360.evidence-pack.v1.json +64 -0
  62. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_cli.py +93 -0
  63. matrixscroll-0.7.0/tests/test_evidence_pack_export.py +333 -0
  64. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_formal_specs.py +8 -5
  65. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_gate.py +89 -2
  66. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_mcp_core.py +5 -1
  67. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_mcp_server.py +83 -0
  68. matrixscroll-0.7.0/tests/test_no_monetization_surface.py +72 -0
  69. matrixscroll-0.7.0/tests/test_release_metadata.py +158 -0
  70. matrixscroll-0.7.0/tests/test_se050_acceptance_vectors.py +56 -0
  71. matrixscroll-0.7.0/tests/test_verify_action_parser.py +480 -0
  72. matrixscroll-0.7.0/tests/test_verify_action_step.py +352 -0
  73. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/README.md +3 -0
  74. matrixscroll-0.7.0/vectors/se050/README.md +35 -0
  75. matrixscroll-0.7.0/vectors/se050/vector_01.json +16 -0
  76. matrixscroll-0.6.3/PKG-INFO +0 -579
  77. matrixscroll-0.6.3/README.md +0 -522
  78. matrixscroll-0.6.3/docs/COMPARISON.md +0 -83
  79. matrixscroll-0.6.3/docs/DOCTRINE.md +0 -60
  80. matrixscroll-0.6.3/docs/POC2_AUDIT.md +0 -61
  81. matrixscroll-0.6.3/docs/ROADMAP_2026-07.md +0 -49
  82. matrixscroll-0.6.3/docs/SLSA_SOURCE_TRACK_MAPPING.md +0 -34
  83. matrixscroll-0.6.3/docs/commercial/PLATFORM_PIVOT.md +0 -62
  84. matrixscroll-0.6.3/docs/commercial/README.md +0 -13
  85. matrixscroll-0.6.3/docs/commercial/SCROLL_GATE_V2.md +0 -81
  86. matrixscroll-0.6.3/docs/commercial/SSX360_SCROLL.md +0 -31
  87. matrixscroll-0.6.3/docs/explanation/trust-boundaries.md +0 -85
  88. matrixscroll-0.6.3/docs/hardware-provider.md +0 -77
  89. matrixscroll-0.6.3/docs/quickstart-mcp.md +0 -62
  90. matrixscroll-0.6.3/docs/reference/commit-envelope.md +0 -45
  91. matrixscroll-0.6.3/docs/reference/exit-codes.md +0 -38
  92. matrixscroll-0.6.3/docs/tutorial/first-commit.md +0 -133
  93. matrixscroll-0.6.3/matrixscroll/_claim.py +0 -96
  94. matrixscroll-0.6.3/tests/test_release_metadata.py +0 -60
  95. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/LICENSE +0 -0
  96. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/controls/agentic_ai_controls.json +0 -0
  97. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/AIMS_INTEROP.md +0 -0
  98. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/GITTUF_INTEROP.md +0 -0
  99. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/GIT_AI_NOTES_INTEROP.md +0 -0
  100. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/HERO_DEMO.md +0 -0
  101. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/OPENSSF_SANDBOX_DECISION.md +0 -0
  102. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/SE050_POC_SCOPE.md +0 -0
  103. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/SE050_USB_PROTOCOL.md +0 -0
  104. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/explanation/actor-attribution.md +0 -0
  105. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/explanation/commit-time-vs-artifact-time.md +0 -0
  106. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/explanation/writing-workflow.md +0 -0
  107. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/how-to/publish-git-notes.md +0 -0
  108. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/rekor-guac-bridge-design.md +0 -0
  109. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/superpowers/plans/2026-06-19-ci-action-plan.md +0 -0
  110. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/superpowers/plans/2026-06-19-sdk-refactor-plan.md +0 -0
  111. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/superpowers/specs/2026-06-19-matrixscroll-git-design.md +0 -0
  112. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/yubikey-bridge.md +0 -0
  113. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/docs/yubikey-smoke.md +0 -0
  114. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/agentic_ai_evidence_manifest.json +0 -0
  115. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/agentic_ai_evidence_manifest.signed.json +0 -0
  116. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/commit-envelope.json +0 -0
  117. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/commit-envelope.signed.json +0 -0
  118. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/demo/agent-commit-demo.sh +0 -0
  119. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/demo/generate_signed_examples.py +0 -0
  120. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/demo/hero-self-attestation-demo.sh +0 -0
  121. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/demo/mcp-rugpull-demo.cast +0 -0
  122. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/demo/mcp-rugpull-demo.gif +0 -0
  123. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/demo/mcp-rugpull-demo.sh +0 -0
  124. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/mcp/matrixscroll-mcp.baseline.json +0 -0
  125. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/mcp/matrixscroll-mcp.manifest.json +0 -0
  126. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/mcp/matrixscroll-mcp.signed.json +0 -0
  127. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/release-manifest.json +0 -0
  128. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/release-manifest.signed.json +0 -0
  129. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/examples/trusted-keys-policy.json +0 -0
  130. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/_core.py +0 -0
  131. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/_payment.py +0 -0
  132. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/agent_trace.py +0 -0
  133. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/canonical.py +0 -0
  134. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/constants.py +0 -0
  135. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/crypto_backend.py +0 -0
  136. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/errors.py +0 -0
  137. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/git.py +0 -0
  138. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/guac_export.py +0 -0
  139. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/hooks/post-commit +0 -0
  140. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/hooks/pre-push +0 -0
  141. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/manifest.py +0 -0
  142. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/mcp_trust.py +0 -0
  143. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/policy.py +0 -0
  144. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/pqc.py +0 -0
  145. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/provenance/__init__.py +0 -0
  146. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/provenance/actions.py +0 -0
  147. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/providers/__init__.py +0 -0
  148. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/providers/base.py +0 -0
  149. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/providers/emulated.py +0 -0
  150. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/providers/hardware.py +0 -0
  151. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/providers/registry.py +0 -0
  152. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/providers/tpm.py +0 -0
  153. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/providers/yubikey.py +0 -0
  154. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/py.typed +0 -0
  155. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/rekor_publish.py +0 -0
  156. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/scroll/README.md +0 -0
  157. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/matrixscroll/scroll/__init__.py +0 -0
  158. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/schemas/action-envelope.v1.json +0 -0
  159. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/schemas/commit-envelope.v1.1.json +0 -0
  160. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/schemas/commit-envelope.v1.json +0 -0
  161. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/schemas/evidence-pack.v1.json +0 -0
  162. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/schemas/pqc-signature.v1.json +0 -0
  163. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/schemas/release-manifest.v1.json +0 -0
  164. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/schemas/ssx360.mcp-manifest.v1.json +0 -0
  165. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/__init__.py +0 -0
  166. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/fixtures/github-gpgsig-commit.txt +0 -0
  167. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/fixtures/mcp-tools-sample.json +0 -0
  168. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_agent_trace.py +0 -0
  169. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_agentic_guidance.py +0 -0
  170. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_canonical.py +0 -0
  171. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_canonical_pqc.py +0 -0
  172. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_core.py +0 -0
  173. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_crypto_backend.py +0 -0
  174. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_git_envelope.py +0 -0
  175. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_guac_rekor.py +0 -0
  176. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_mcp_trust.py +0 -0
  177. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_policy.py +0 -0
  178. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_pqc.py +0 -0
  179. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_provenance.py +0 -0
  180. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_se050_transport.py +0 -0
  181. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_security_properties.py +0 -0
  182. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_ssx360_cli.py +0 -0
  183. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_tpm_provider.py +0 -0
  184. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_vectors.py +0 -0
  185. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/tests/test_yubikey_provider.py +0 -0
  186. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/_fixture_key.json +0 -0
  187. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/_generate.py +0 -0
  188. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/tampered_algorithm.json +0 -0
  189. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/tampered_device_id.json +0 -0
  190. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/tampered_field.json +0 -0
  191. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/tampered_nested.json +0 -0
  192. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/tampered_public_key.json +0 -0
  193. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/tampered_schema.json +0 -0
  194. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/tampered_signature.json +0 -0
  195. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/unsigned_empty_block.json +0 -0
  196. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/unsigned_no_block.json +0 -0
  197. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/valid_commit_envelope.json +0 -0
  198. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/valid_nested.json +0 -0
  199. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/valid_simple.json +0 -0
  200. {matrixscroll-0.6.3 → matrixscroll-0.7.0}/vectors/valid_unicode.json +0 -0
@@ -18,6 +18,7 @@ htmlcov/
18
18
  .tox/
19
19
  .mypy_cache/
20
20
  .ruff_cache/
21
+ onboarding-smoke-summary*.json
21
22
 
22
23
  # Virtual envs
23
24
  .venv/
@@ -6,6 +6,81 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.0] - 2026-08-11
10
+
11
+ Fail-closed verification, package completeness, and public positioning. No
12
+ wire-format change.
13
+
14
+ ### Added
15
+ - Range verification results now report agent-scope details and the formal model
16
+ includes the default-path invariant `Inv_EmptyRangeFailsClosed`.
17
+ - Added `schemas/ssx360.evidence-pack.v1.json` for the document written by the
18
+ evidence-pack exporter.
19
+ - Added a hardware-signed SE050 acceptance vector with CLI and CI verification.
20
+ - You can explicitly set the composite action's `allow-empty-range` input. It
21
+ remains disabled by default and cannot satisfy a signature-mode requirement.
22
+
23
+ ### Changed
24
+ - Empty commit ranges now return `ok: false` by default. CLI and Python callers
25
+ that intentionally accept an empty range must opt in explicitly. MCP callers
26
+ use the same explicit opt-in and fail closed by default.
27
+ - Documentation now describes the shipped 14-tool MCP server and completed USB
28
+ signer directly, without retired pricing tiers or level-based product gates.
29
+ - Development, documentation, and GitHub Action dependencies were refreshed.
30
+ - Public package metadata now describes signed machine-action records instead
31
+ of leading with AI terminology. Exact schema terms such as `actor_type: agent`
32
+ remain unchanged.
33
+
34
+ ### Fixed
35
+ - **The verify action could hand a caller a blank `ok` when the verifier
36
+ crashed.** It now writes all eight outputs on every path, masks captured
37
+ verifier output in the job summary, and distinguishes tool failures from
38
+ legitimate verification failures. Parser and action-step tests cover crashes,
39
+ silent output, malformed JSON, and signature failures.
40
+ - Unhandled CLI exceptions now return structured JSON with exit status 1 instead
41
+ of leaking a traceback into automation output.
42
+ - Evidence-pack annotations no longer mutate signed hosted response bodies.
43
+ - JSON schemas now ship in wheels and MCP schema resources resolve the installed
44
+ copies.
45
+ - The MCP extra now requires the verified 1.28+ SDK line; earlier 1.x releases
46
+ cannot register the server's annotated tools, and MCP 2.0 removed the
47
+ `mcp.server.fastmcp` API entirely.
48
+ - You receive an explicit rejection when a hosted MCP Git range is empty, before
49
+ any API call. Non-empty ranges send the resolved commit SHAs.
50
+ - Hosted CLI checks now write `--summary-output` on successful and empty-range
51
+ responses, matching local checks.
52
+ - Local evidence-pack documents without a `bundle` now fail schema validation,
53
+ and CI verifies all eight schemas from an isolated wheel installation.
54
+
55
+ ### Removed
56
+ - **Breaking:** removed `matrixscroll claim`, `matrixscroll identity`, the
57
+ `--identity` verification flag, and their private paid-enrollment client. The
58
+ retired service no longer issues identity certificates; device identity
59
+ remains the local Ed25519 key pair reported by `matrixscroll status`.
60
+ - Removed the retired platform-pricing and signup guide.
61
+
62
+ ## [0.6.4] - 2026-08-11
63
+
64
+ Documentation and release metadata. No wire-format change.
65
+
66
+ ### Added
67
+ - The PyPI page now leads with the working `matrixscroll-mcp` stdio server and
68
+ documents all 14 tools.
69
+ - The completed SSX360 USB signer, signing sequence, and architecture are shown
70
+ with the direct-contact acquisition path.
71
+
72
+ ### Changed
73
+ - Removed the overlapping authorization and provider maturity ladders from the
74
+ PyPI page. Capability names and provider modes now stand on their own.
75
+ - Hardware documentation now distinguishes the `matrixscroll[hardware]` host
76
+ package from physical signers supplied through `ssx360.com/contact`.
77
+ - Install examples and release metadata now pin `matrixscroll==0.6.4`.
78
+
79
+ ### Verified
80
+ - The stdio handshake returns 14 MCP tools.
81
+ - The focused MCP and SE050 transport suite passes 29 tests.
82
+ - The wheel and source distribution pass `twine check`.
83
+
9
84
  ## [0.6.3] - 2026-08-10
10
85
 
11
86
  Repository layout and documentation. No code, CLI or wire-format changes.
@@ -312,12 +387,20 @@ Initial public release. Extracted from the SSX360 reference implementation.
312
387
  - Device id format: `MS-XXXX-XXXX` (SHA-256 of the raw public key, first 8 hex
313
388
  chars, uppercase).
314
389
 
390
+ [0.7.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.7.0
391
+ [0.6.4]: https://github.com/SSX360/matrixscroll/releases/tag/v0.6.4
315
392
  [0.6.3]: https://github.com/SSX360/matrixscroll/releases/tag/v0.6.3
316
393
  [0.6.2]: https://github.com/SSX360/matrixscroll/releases/tag/v0.6.2
317
394
  [0.6.1]: https://github.com/SSX360/matrixscroll/releases/tag/v0.6.1
318
395
  [0.6.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.6.0
319
396
  [0.5.1]: https://github.com/SSX360/matrixscroll/releases/tag/v0.5.1
320
397
  [0.5.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.5.0
398
+ [0.4.2]: https://github.com/SSX360/matrixscroll/releases/tag/v0.4.2
399
+ [0.4.1]: https://github.com/SSX360/matrixscroll/releases/tag/v0.4.1
400
+ [0.3.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.3.0
401
+ [0.2.6]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.6
402
+ [0.2.5]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.5
403
+ [0.2.4]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.4
321
404
  [0.2.2]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.2
322
405
  [0.2.1]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.1
323
406
  [0.2.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.0
@@ -83,6 +83,36 @@ vectors are welcome.
83
83
  - [ ] No private keys, no real device ids, and no fixtures generated by a
84
84
  production device in test data.
85
85
 
86
+ ## Cutting a release
87
+
88
+ Bump the version in `pyproject.toml`, `matrixscroll/__init__.py`, `CHANGELOG.md`,
89
+ the README pins, and the default `matrixscroll-version` in
90
+ `.github/actions/verify/action.yml` together in one PR. Run
91
+ `scripts/release-readiness.py` before you open it. That script covers
92
+ `pyproject.toml`, `matrixscroll/__init__.py`, the README pins and `glama.json`,
93
+ and exits non-zero when they disagree. It never reads `CHANGELOG.md` or
94
+ `action.yml`, so check those two yourself.
95
+
96
+ Leave `glama.json` at the previous version. Glama installs the pin it names from
97
+ PyPI, so `scripts/validate_glama_pypi.py` fails while that version is unpublished.
98
+
99
+ Once `publish.yml` has finished and pypi.org serves the new version, open and
100
+ merge a second PR bumping `glama.json`. Then move the floating action tag:
101
+
102
+ ```bash
103
+ git fetch origin && git tag -f action-v1 origin/main && git push -f origin action-v1
104
+ ```
105
+
106
+ Both halves of that matter. Fetch first, because a local `main` that predates
107
+ the merge moves `action-v1` onto the wrong commit and Git reports nothing.
108
+ Merge the `glama.json` PR first, because `origin/main` otherwise still points at
109
+ the commit before it.
110
+
111
+ Consumers pin `SSX360/matrixscroll/.github/actions/verify@action-v1`, so that tag
112
+ decides which SDK version their workflows install. Leave it behind and
113
+ matrixscroll.com stays on the previous release and fails its version lint, which
114
+ is what happened on August 10, 2026.
115
+
86
116
  ## Security
87
117
 
88
118
  See `SECURITY.md`. **Do not file security issues as public PRs.**
@@ -0,0 +1,317 @@
1
+ Metadata-Version: 2.5
2
+ Name: matrixscroll
3
+ Version: 0.7.0
4
+ Summary: MCP server for signed machine-action records, offline tool-surface checks, and SSX360 USB signer support.
5
+ Project-URL: Homepage, https://matrixscroll.com
6
+ Project-URL: Documentation, https://matrixscroll.com/docs/
7
+ Project-URL: Specification, https://matrixscroll.com/spec/
8
+ Project-URL: Verifier, https://matrixscroll.com/verify/
9
+ Project-URL: Repository, https://github.com/SSX360/matrixscroll
10
+ Project-URL: Source, https://github.com/SSX360/matrixscroll
11
+ Project-URL: Issues, https://github.com/SSX360/matrixscroll/issues
12
+ Project-URL: Whitepaper, https://github.com/SSX360/matrixscroll/blob/main/docs/WHITEPAPER.md
13
+ Project-URL: Changelog, https://github.com/SSX360/matrixscroll/blob/main/CHANGELOG.md
14
+ Project-URL: Discussions, https://github.com/SSX360/matrixscroll/discussions
15
+ Project-URL: Security, https://github.com/SSX360/matrixscroll/blob/main/SECURITY.md
16
+ Project-URL: GitHub Action, https://github.com/SSX360/matrixscroll/tree/main/.github/actions/verify
17
+ Project-URL: Tests, https://github.com/SSX360/matrixscroll/tree/main/tests
18
+ Project-URL: Public Roadmap, https://github.com/SSX360/matrixscroll/blob/main/docs/ROADMAP_2026-07.md
19
+ Project-URL: Hardware Status, https://github.com/SSX360/matrixscroll/blob/main/docs/hardware-provider.md
20
+ Project-URL: Maintainer, https://ssx360.com/about
21
+ Author-email: SSX360 <security@matrixscroll.com>
22
+ License-Expression: Apache-2.0
23
+ License-File: LICENSE
24
+ Keywords: authorization,ed25519,fips-204,fips-205,machine-action,matrixscroll,ml-dsa,post-quantum,provenance,root-of-trust,secure-element,signing,slh-dsa,ssx360,supply-chain
25
+ Classifier: Development Status :: 4 - Beta
26
+ Classifier: Intended Audience :: Developers
27
+ Classifier: Intended Audience :: Information Technology
28
+ Classifier: License :: OSI Approved :: Apache Software License
29
+ Classifier: Operating System :: OS Independent
30
+ Classifier: Programming Language :: Python :: 3
31
+ Classifier: Programming Language :: Python :: 3 :: Only
32
+ Classifier: Programming Language :: Python :: 3.10
33
+ Classifier: Programming Language :: Python :: 3.11
34
+ Classifier: Programming Language :: Python :: 3.12
35
+ Classifier: Programming Language :: Python :: 3.13
36
+ Classifier: Topic :: Security :: Cryptography
37
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
38
+ Classifier: Typing :: Typed
39
+ Requires-Python: >=3.10
40
+ Requires-Dist: cryptography>=43.0
41
+ Provides-Extra: dev
42
+ Requires-Dist: build>=1.5.0; extra == 'dev'
43
+ Requires-Dist: hypothesis>=6.165.2; extra == 'dev'
44
+ Requires-Dist: jsonschema>=4.23.0; extra == 'dev'
45
+ Requires-Dist: pytest-cov>=7.1.0; extra == 'dev'
46
+ Requires-Dist: pytest>=9.1.1; extra == 'dev'
47
+ Requires-Dist: pyyaml>=6.0.3; extra == 'dev'
48
+ Provides-Extra: git
49
+ Provides-Extra: hardware
50
+ Requires-Dist: pyserial>=3.5; extra == 'hardware'
51
+ Provides-Extra: mcp
52
+ Requires-Dist: mcp<2.0.0,>=1.28.0; extra == 'mcp'
53
+ Provides-Extra: pqc
54
+ Requires-Dist: liboqs-python>=0.16.0; extra == 'pqc'
55
+ Provides-Extra: tpm
56
+ Provides-Extra: yubikey
57
+ Requires-Dist: python-pkcs11>=0.9.5; extra == 'yubikey'
58
+ Description-Content-Type: text/markdown
59
+
60
+ # Matrix Scroll
61
+
62
+ Model Context Protocol server for signed machine-action records and offline tool-surface verification.
63
+
64
+ [![ci-unit](https://github.com/SSX360/matrixscroll/actions/workflows/ci-unit.yml/badge.svg)](https://github.com/SSX360/matrixscroll/actions/workflows/ci-unit.yml)
65
+ [![PyPI](https://img.shields.io/pypi/v/matrixscroll)](https://pypi.org/project/matrixscroll/)
66
+ [![Python](https://img.shields.io/pypi/pyversions/matrixscroll)](https://pypi.org/project/matrixscroll/)
67
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](https://github.com/SSX360/matrixscroll/blob/main/LICENSE)
68
+
69
+ An MCP server can change its tool descriptions or input schemas after installation. A Git commit can also declare an actor or tool without carrying a signed authorization record. Matrix Scroll addresses both gaps with Ed25519-signed evidence that reviewers can verify offline.
70
+
71
+ The `matrixscroll-mcp` stdio server exposes 14 tools for commit envelopes, action records, pull-request checks, Git notes, MCP surface manifests, agent traces, and the SSX360 USB signer. Local signing and verification need no cloud account.
72
+
73
+ SSX360 has completed and produced the USB signer shown below. The device uses an RP2350 USB bridge and an NXP SE050 secure element. SSX360 supplies the signer by direct inquiry through [SSX360 contact](https://ssx360.com/contact) or `mission@ssx360.com`.
74
+
75
+ Matrix Scroll is an open protocol. The Python SDK is Apache-2.0 software, and the specification and vectors are CC0 1.0.
76
+
77
+ ## Contents
78
+
79
+ - [Install the MCP server](#install-the-mcp-server)
80
+ - [MCP tools](#mcp-tools)
81
+ - [Detect MCP tool-surface changes](#detect-mcp-tool-surface-changes)
82
+ - [Use the SSX360 USB signer](#use-the-ssx360-usb-signer)
83
+ - [Sign and verify from the CLI](#sign-and-verify-from-the-cli)
84
+ - [Honest limits](#honest-limits)
85
+ - [Verify the release](#verify-the-release)
86
+ - [Security and license](#security-and-license)
87
+
88
+ ## Install the MCP server
89
+
90
+ Install the current release from PyPI:
91
+
92
+ ```bash
93
+ pip install "matrixscroll[mcp]==0.7.0"
94
+ ```
95
+
96
+ Register the stdio server in your MCP client:
97
+
98
+ ```json
99
+ {
100
+ "mcpServers": {
101
+ "matrixscroll": {
102
+ "command": "matrixscroll-mcp",
103
+ "args": []
104
+ }
105
+ }
106
+ }
107
+ ```
108
+
109
+ On Windows, use the full path to `matrixscroll-mcp.exe` inside the active virtual environment if the command is not on `PATH`.
110
+
111
+ Start the executable directly when you want to inspect the server over stdio:
112
+
113
+ ```bash
114
+ matrixscroll-mcp
115
+ ```
116
+
117
+ After your client connects, call `status`. The server reports the local identity, hook state, and envelope count.
118
+
119
+ ## MCP tools
120
+
121
+ The `0.7.0` server exposes these tools:
122
+
123
+ | Tool | What it does | Network or write behavior |
124
+ | --- | --- | --- |
125
+ | `status` | Reports local identity, hook state, and envelope count | Read-only and local |
126
+ | `create_envelope` | Creates an Ed25519-signed Git commit envelope | Writes a local envelope by default |
127
+ | `verify_envelope` | Verifies one signed envelope and its policy fields | Read-only and local |
128
+ | `sign_action` | Signs provenance for CI, infrastructure changes, migrations, API calls, or other actions | Writes only when `save_path` is set |
129
+ | `verify_pr_range` | Checks every commit in a Git range | Local for `local`, `notes`, or `bundle`. Hosted mode requires an API key |
130
+ | `publish_notes` | Publishes local envelopes to `refs/notes/matrixscroll` | Writes local Git notes |
131
+ | `audit_export` | Exports evidence for review | Writes a local bundle or uses the hosted API when configured |
132
+ | `list_envelopes` | Lists organization envelopes | Requires `SSX360_API_KEY` and the hosted API |
133
+ | `connect_card` | Probes the SSX360 USB signer over USB CDC | Opens the configured serial port |
134
+ | `scan_mcp_server` | Fingerprints MCP tool names, descriptions, and input schemas | Read-only when tools are supplied |
135
+ | `sign_mcp_manifest` | Signs an MCP tool-surface manifest | Writes only when `save_path` is set |
136
+ | `verify_mcp_manifest` | Verifies a manifest and compares it with a signed baseline | Read-only and local |
137
+ | `sign_agent_trace` | Signs a browser-agent JSONL trace | Writes a signed envelope |
138
+ | `verify_agent_trace` | Verifies a signed trace and optionally checks the source bytes | Read-only and local |
139
+
140
+ An API key is optional. Local signing, offline verification, MCP manifest checks, and USB signer access do not require one. Hosted organization history and hosted range verification use `SSX360_API_KEY`.
141
+
142
+ ## Detect MCP tool-surface changes
143
+
144
+ Matrix Scroll records an MCP server's tool names, descriptions, and input schemas in a signed manifest. Re-scan the server after an update and compare it with the install-time baseline.
145
+
146
+ ```bash
147
+ pip install "matrixscroll[mcp]==0.7.0"
148
+
149
+ matrixscroll mcp scan \
150
+ --connect stdio \
151
+ --server-command "npx -y some-mcp-server" \
152
+ --output manifest.json \
153
+ --pretty
154
+
155
+ matrixscroll mcp sign manifest.json \
156
+ --output baseline.signed.json
157
+
158
+ matrixscroll mcp scan \
159
+ --connect stdio \
160
+ --server-command "npx -y some-mcp-server" \
161
+ --output current.json
162
+
163
+ matrixscroll mcp sign current.json \
164
+ --output current.signed.json
165
+
166
+ matrixscroll mcp verify current.signed.json \
167
+ --baseline baseline.signed.json \
168
+ --pretty
169
+ ```
170
+
171
+ The verify command exits with code `2` when the signature is invalid or the current tool surface differs from the signed baseline. You can also scan an exported `tools/list` response without starting a server:
172
+
173
+ ```bash
174
+ matrixscroll mcp scan --tools tools.json --output manifest.json --pretty
175
+ ```
176
+
177
+ ## Use the SSX360 USB signer
178
+
179
+ ![Completed SSX360 USB signer](https://raw.githubusercontent.com/SSX360/matrixscroll/main/docs/images/ssx360-usb-signer.jpg)
180
+
181
+ Install the hardware and MCP extras:
182
+
183
+ ```bash
184
+ pip install "matrixscroll[mcp,hardware]==0.7.0"
185
+ ```
186
+
187
+ Set the hardware provider and USB CDC port before starting the MCP server.
188
+
189
+ Windows PowerShell:
190
+
191
+ ```powershell
192
+ $env:MATRIXSCROLL_MODE = "hardware"
193
+ $env:MATRIXSCROLL_SE050_PORT = "COM3"
194
+ matrixscroll status
195
+ matrixscroll-mcp
196
+ ```
197
+
198
+ Linux:
199
+
200
+ ```bash
201
+ export MATRIXSCROLL_MODE=hardware
202
+ export MATRIXSCROLL_SE050_PORT=/dev/ttyACM0
203
+ matrixscroll status
204
+ matrixscroll-mcp
205
+ ```
206
+
207
+ You can also pass the hardware settings through the MCP client configuration:
208
+
209
+ ```json
210
+ {
211
+ "mcpServers": {
212
+ "matrixscroll": {
213
+ "command": "matrixscroll-mcp",
214
+ "args": [],
215
+ "env": {
216
+ "MATRIXSCROLL_MODE": "hardware",
217
+ "MATRIXSCROLL_SE050_PORT": "COM3"
218
+ }
219
+ }
220
+ }
221
+ }
222
+ ```
223
+
224
+ Call `connect_card` to confirm that the signer responds. Then call `status` to inspect the active provider before creating an envelope.
225
+
226
+ SSX360 supplies the finished signer through direct contact. Ask for the Matrix Scroll USB signer through [SSX360 contact](https://ssx360.com/contact). The hardware is not distributed through PyPI or listed for self-service purchase.
227
+
228
+ ### How hardware signing works
229
+
230
+ ![USB signing round trip](https://raw.githubusercontent.com/SSX360/matrixscroll/main/docs/images/ssx360-usb-signer-round-trip.jpg)
231
+
232
+ 1. The host sends `GEN_KEY` through the RP2350 USB bridge.
233
+ 2. The SE050 creates an Ed25519 key pair in the secure element. The private key is non-exportable.
234
+ 3. The host reads the 32-byte public key.
235
+ 4. The host sends canonical bytes with a `SIGN` request.
236
+ 5. The SE050 returns a 64-byte Ed25519 signature.
237
+ 6. Matrix Scroll assembles the signed record and verifies it with the same offline verifier used for software signing.
238
+
239
+ The host receives the public key and signature. The private key stays inside the SE050.
240
+
241
+ ![USB signer architecture](https://raw.githubusercontent.com/SSX360/matrixscroll/main/docs/images/ssx360-usb-signer-architecture.jpg)
242
+
243
+ ## Sign and verify from the CLI
244
+
245
+ The Python package includes a CLI and Git hooks for workflows that do not use MCP.
246
+
247
+ ```bash
248
+ pip install "matrixscroll==0.7.0"
249
+ matrixscroll hook-install
250
+
251
+ export MATRIXSCROLL_ACTOR_TYPE=agent
252
+ export MATRIXSCROLL_TOOL=agent-runner
253
+ git commit -m "feat: agent-assisted change"
254
+
255
+ matrixscroll envelope-verify "$(git rev-parse HEAD)"
256
+ ```
257
+
258
+ Sign a JSON manifest directly:
259
+
260
+ ```bash
261
+ matrixscroll sign release.json > release.signed.json
262
+ matrixscroll verify release.signed.json
263
+ ```
264
+
265
+ `matrixscroll verify` exits with code `0` for a valid signature and code `2` for invalid input, a failed signature, a mismatched device identity, or an unsupported schema or algorithm.
266
+
267
+ ## Honest limits
268
+
269
+ <!-- vale ai-tells.ShipOveruse = NO -->
270
+
271
+ - Shipping now: PyPI `matrixscroll==0.7.0` installs the 14-tool stdio MCP server and Git hooks. The release also includes the MCP Trust Scanner, offline verification, and USB CDC integration for the SSX360 signer.
272
+ - Hardware availability: SSX360 produces the USB signer and supplies it after a direct inquiry. PyPI distributes the host software only.
273
+ - Hosted tools: `list_envelopes` and the hosted modes of `verify_pr_range` and `audit_export` require `SSX360_API_KEY` and a deployed SSX360 API. Local alternatives remain available without a key.
274
+ - Post-quantum overlay: the optional `matrixscroll[pqc]` extra provides ML-DSA and SLH-DSA through liboqs. This module has no CMVP validation. liboqs states that applications should not rely on it to protect sensitive data in production.
275
+ - Verification scope: an Ed25519 signature proves that the signed bytes match and correspond to the included public key. The declared `actor_type` still requires a trusted-key and authorization policy.
276
+ - Not included: identity and access management, sandboxing, prompt filtering, or an agent runtime.
277
+
278
+ <!-- vale ai-tells.ShipOveruse = YES -->
279
+
280
+ ## Verify the release
281
+
282
+ GitHub Actions publishes each Matrix Scroll release through PyPI Trusted Publishing. PyPI records a PEP 740 attestation for the wheel and source distribution.
283
+
284
+ Ask PyPI for the `0.7.0` wheel provenance:
285
+
286
+ ```bash
287
+ curl -H "Accept: application/vnd.pypi.integrity.v1+json" \
288
+ https://pypi.org/integrity/matrixscroll/0.7.0/matrixscroll-0.7.0-py3-none-any.whl/provenance
289
+ ```
290
+
291
+ The response names the GitHub publisher:
292
+
293
+ ```json
294
+ {
295
+ "kind": "GitHub",
296
+ "repository": "SSX360/matrixscroll",
297
+ "workflow": "publish.yml",
298
+ "environment": "pypi"
299
+ }
300
+ ```
301
+
302
+ Compare the attested `subject[].digest.sha256` value with the SHA-256 digest of the file you downloaded. Stop if the repository, workflow, or digest differs.
303
+
304
+ ## Security and license
305
+
306
+ Read the [security policy](https://github.com/SSX360/matrixscroll/blob/main/SECURITY.md) and [security properties](https://github.com/SSX360/matrixscroll/blob/main/docs/SECURITY_PROPERTIES.md). Report vulnerabilities privately to `security@matrixscroll.com` or through a GitHub Security Advisory.
307
+
308
+ Matrix Scroll code is licensed under Apache-2.0. [`SPEC.md`](https://github.com/SSX360/matrixscroll/blob/main/SPEC.md) and [`vectors/`](https://github.com/SSX360/matrixscroll/tree/main/vectors/) are released under CC0 1.0.
309
+
310
+ | Resource | Link |
311
+ | --- | --- |
312
+ | Documentation | [matrixscroll.com/docs](https://matrixscroll.com/docs/) |
313
+ | MCP Trust Scanner | [matrixscroll.com/scan](https://matrixscroll.com/scan/) |
314
+ | Offline verifier | [matrixscroll.com/verify](https://matrixscroll.com/verify/) |
315
+ | Protocol specification | [matrixscroll.com/spec](https://matrixscroll.com/spec/) |
316
+ | Source repository | [github.com/SSX360/matrixscroll](https://github.com/SSX360/matrixscroll) |
317
+ | SSX360 contact | [Contact SSX360](https://ssx360.com/contact) |