Skip to main content
Glama

Matrix Scroll

Signed machine-action records with offline verification for MCP, Git, and CI.

ci-unit PyPI Python License

SSX360 Matrix Scroll: Trust must be checkable. Open verifier matrixscroll 0.10.0; signed sources Ed25519 plus ML-DSA; ledger available.

Shipping / Bar. Shipping: raw event → domain-separated hash (matrixscroll.ledger) → time-epoch checkpoints → Ed25519 signature with optional FIPS 204 ML-DSA overlay. Bar: ML-DSA-only primary mode as default, Lean 4 / F* extracted verifier. Reviewers verify offline. Results are CONSISTENT, INCONSISTENT, or INDETERMINATE. AI never enters the verified core and never decides a technical conclusion. Full mapping: docs/explanation/gold-standard.md.

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 records both surfaces as Ed25519-signed evidence that reviewers can verify offline, with an optional ML-DSA-87 post-quantum overlay and ML-KEM-1024 sealed evidence packs on the CNSA 2.0 Category 5 track.

The matrixscroll-mcp stdio server exposes 13 tools for commit envelopes, action records, pull-request checks, Git notes, MCP surface manifests, and agent traces. Custody is device-agnostic: the default is a file-backed software provider, and any device or HSM plugs in through the IdentityProvider seam. Local signing and verification need no cloud account.

Matrix Scroll is an open protocol. The Python SDK is Apache-2.0 software, and the specification and vectors are CC0 1.0.

Contents

Related MCP server: FlowCheck MCP Server

Gold standard

Three pillars and one refusal rule govern the protocol:

Pillar

Requirement

Post-quantum proofs

FIPS 204 ML-DSA and FIPS 205 SLH-DSA overlays so attestation survives the quantum computers the programme monitors (parameter readiness through liboqs; not FIPS CMVP or CNSA certification)

Offline verification

An auditor reconstructs events from raw records offline. Shipping: independent verifier + TLC. Bar: Lean 4 / F* extracted executable

Fail-closed architecture

Every result is CONSISTENT (0), INCONSISTENT (2), or INDETERMINATE (1). No silent pass on missing evidence

Rule of Refusal. We refuse to accept AI-generated or AI-altered data into the verified core. The provenance of every artifact is digest-pinned. No AI system is a decision authority for any technical conclusion.

See docs/explanation/gold-standard.md and docs/DOCTRINE.md.

Install the MCP server

Install the current release from PyPI:

pip install "matrixscroll[mcp]==0.10.0"

Register the stdio server in your MCP client:

{
  "mcpServers": {
    "matrixscroll": {
      "command": "matrixscroll-mcp",
      "args": []
    }
  }
}

On Windows, use the full path to matrixscroll-mcp.exe inside the active virtual environment if the command is not on PATH.

Start the executable directly when you want to inspect the server over stdio:

matrixscroll-mcp

After your client connects, call status. The server reports the local identity, hook state, and envelope count.

MCP tools

The 0.10.0 server exposes these tools:

Tool

What it does

Network or write behavior

status

Reports local identity, hook state, and envelope count

Read-only and local

create_envelope

Creates an Ed25519-signed Git commit envelope

Writes a local envelope by default

verify_envelope

Verifies one signed envelope and its policy fields

Read-only and local

sign_action

Signs provenance for CI, infrastructure changes, migrations, API calls, or other actions

Writes only when save_path is set

verify_pr_range

Checks every commit in a Git range

Local for local, notes, or bundle. Hosted mode requires an API key

publish_notes

Publishes local envelopes to refs/notes/matrixscroll

Writes local Git notes

audit_export

Exports evidence for review

Writes a local bundle or uses the hosted API when configured

list_envelopes

Lists organization envelopes

Requires SSX360_API_KEY and the hosted API

scan_mcp_server

Fingerprints MCP tool names, descriptions, and input schemas

Read-only when tools are supplied

sign_mcp_manifest

Signs an MCP tool-surface manifest

Writes only when save_path is set

verify_mcp_manifest

Verifies a manifest and compares it with a signed baseline

Read-only and local

sign_agent_trace

Signs a browser-agent JSONL trace

Writes a signed envelope

verify_agent_trace

Verifies a signed trace and optionally checks the source bytes

Read-only and local

An API key is optional. Local signing, offline verification, and MCP manifest checks do not require one. Hosted organization history and hosted range verification use SSX360_API_KEY.

Detect MCP tool-surface changes

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.

pip install "matrixscroll[mcp]==0.10.0"

matrixscroll mcp scan \
  --connect stdio \
  --server-command "npx -y some-mcp-server" \
  --output manifest.json \
  --pretty

matrixscroll mcp sign manifest.json \
  --output baseline.signed.json

matrixscroll mcp scan \
  --connect stdio \
  --server-command "npx -y some-mcp-server" \
  --output current.json

matrixscroll mcp sign current.json \
  --output current.signed.json

matrixscroll mcp verify current.signed.json \
  --baseline baseline.signed.json \
  --pretty

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:

matrixscroll mcp scan --tools tools.json --output manifest.json --pretty

Device-agnostic custody

Signing goes through an IdentityProvider (public_key_bytes, sign, mode). The default emulated provider stores an Ed25519 key under ~/.matrixscroll. To adapt Matrix Scroll to any device or HSM, implement that interface and select it with MATRIXSCROLL_MODE (or pass a provider instance to the library APIs). Experimental tpm and yubikey previews remain available; they are not the Category 5 story and do not claim hardware ML-DSA.

Historical envelopes with signature.mode equal to "hardware" still verify. The USB/SE050 signing path was removed in 0.10.0; MATRIXSCROLL_MODE=hardware raises instead of opening a serial port.

Sealed evidence packs (matrixscroll.sealed) encrypt a payload to a recipient's ML-KEM-1024 key with a hybrid X25519 + ML-KEM-1024 agreement, AES-256-GCM for the body, and Ed25519 plus ML-DSA-87 signatures over the pack. Install matrixscroll[pqc]. This is parameter-set readiness through liboqs, not a CNSA certification or FIPS validation.

Sign and verify from the CLI

The Python package includes a CLI and Git hooks for workflows that do not use MCP.

pip install "matrixscroll==0.10.0"
matrixscroll hook-install

export MATRIXSCROLL_ACTOR_TYPE=ci
export MATRIXSCROLL_TOOL=release-runner
git commit -m "feat: automate release"

matrixscroll envelope-verify "$(git rev-parse HEAD)"

Sign a JSON manifest directly:

matrixscroll sign release.json > release.signed.json
matrixscroll verify release.signed.json

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.

Verification boundaries

  • Release: PyPI matrixscroll==0.10.0 installs the 13-tool stdio MCP server and Git hooks, the MCP Trust Scanner, offline verification, sealed evidence packs, and device-agnostic custody.

  • 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 signing and verification remain available without a key.

  • Post-quantum evaluation path: the optional matrixscroll[pqc] extra provides ML-DSA and SLH-DSA through liboqs, including Category 5 sets (ml-dsa-87, slh-dsa-sha2-256s/256f). Release 0.10.0 defaults new software keys to ml-dsa-87 for CNSA 2.0 signature-parameter alignment (0.7.0 and earlier default to ml-dsa-65; pass --algorithm or MATRIXSCROLL_PQC to choose a set explicitly). That is parameter-set readiness, not CNSA certification, FIPS CMVP validation, or NSA approval. This module has no CMVP validation. liboqs states that applications should not rely on it to protect sensitive data in production.

  • CNSA 2.0 full-suite track: matrixscroll.kem provides ML-KEM-1024 primitives (ACVP-checked). Sealed evidence packs in matrixscroll.sealed use hybrid X25519 + ML-KEM-1024 with Ed25519 + ML-DSA-87. Same boundary as the signature overlay: evidence mapping against NIST vectors, not a validation. See docs/CRYPTO_ROADMAP.md.

  • Verification scope: an Ed25519 signature proves that the signed bytes match and correspond to the included public key. A trusted-key and authorization policy establishes whether the declared actor_type can perform the action.

  • Adjacent controls: identity and access management, sandboxing, prompt filtering, and agent runtime policy remain separate controls.

Verify the release

GitHub Actions publishes each Matrix Scroll release through PyPI Trusted Publishing. PyPI records a PEP 740 attestation for the wheel and source distribution.

Ask PyPI for the 0.10.0 wheel provenance:

curl -H "Accept: application/vnd.pypi.integrity.v1+json" \
  https://pypi.org/integrity/matrixscroll/0.10.0/matrixscroll-0.10.0-py3-none-any.whl/provenance

The response names the GitHub publisher:

{
  "kind": "GitHub",
  "repository": "SSX360/matrixscroll",
  "workflow": "publish.yml",
  "environment": "pypi"
}

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.

Ten-minute check for reviewers

Five questions a programme manager or auditor asks first, each with the command that answers it. Everything below runs offline from a clone of this repository with pip install "matrixscroll[pqc]==0.10.0" (the pqc extra is needed only for the last two lines of question 3).

  1. Does it run in one command, offline? matrixscroll verify vectors/valid_simple.json prints "ok": true and exits 0; matrixscroll verify vectors/tampered_field.json prints "ok": false and exits 2. Neither command opens a network connection. Exit codes are fixed in docs/reference/exit-codes.md.

  2. Is there a second implementation of the verifier? python tools/independent_verify.py vectors/ re-implements SPEC.md sections 3 to 6 from the text, with its own canonical serializer and a pure-Python RFC 8032 Ed25519, and imports nothing from the SDK. It must reach the same verdict as the SDK on every committed vector and on 500 randomly generated documents; tests/test_independent_verifier.py enforces that in CI on every change.

  3. Are the vectors committed? vectors/valid_*.json, tampered_*.json and unsigned_*.json are the conformance set (CC0 1.0); vectors/acvp-sigver-fips204-fips205.json and vectors/acvp-mlkem-fips203.json are NIST ACVP sample vectors with source URLs and SHA-256 digests. python -m pytest tests/test_vectors.py tests/test_independent_verifier.py -q runs the conformance set; python -m pytest tests/test_acvp_sigver.py tests/test_acvp_mlkem.py -q runs the NIST vectors through liboqs.

  4. Is the boundary stated? Verification boundaries above, docs/CRYPTO_ROADMAP.md (Shipping now / In progress / Not, with policy dates) and docs/COMPARISON.md (a dated landscape and the claims Matrix Scroll does not make). Compliance language everywhere is evidence mapping, not a certification claim.

  5. Are the design rules checked by a model checker? formal/tla/ holds TLA+ models of the canonical bytes, the dual signature and the Scroll Gate range rules; .github/workflows/formal-verify.yml runs TLC on all seven configurations on every change to them. The models check the design, not the Python implementation; the tests above check the implementation. docs/WHITEPAPER.md is the written account of the protocol.

Security and license

Read the security policy and security properties. Report vulnerabilities privately to security@matrixscroll.com or through a GitHub Security Advisory.

Matrix Scroll code is licensed under Apache-2.0. SPEC.md and vectors/ are released under CC0 1.0.

Resource

Link

Gold standard (formal mathematics of accountability)

docs/explanation/gold-standard.md

Release evidence (digests, provenance, PQC boundary)

docs/EVIDENCE.md

Tombstone / schemas

matrixscroll.com

Documentation

GitHub docs

Where Matrix Scroll fits (dated comparison)

docs/COMPARISON.md

Cryptographic roadmap (Ed25519, ML-DSA-87 overlay, policy dates)

docs/CRYPTO_ROADMAP.md

Offline verification

CLI guide

Protocol specification

SPEC.md

Source repository

github.com/SSX360/matrixscroll

SSX360 contact

Contact SSX360

Available Tools

13 tools
audit_exportA

Export a compliance or procurement audit bundle with optional verification proofs.

Use when auditors need envelope bundles (JSON, GUAC JSONL, or evidence-pack).
Prefer ``verify_pr_range`` for merge-gate pass/fail on a commit range.
Prefer ``list_envelopes`` to browse hosted metadata without exporting files.

Hosted mode requires SSX360_API_KEY and calls ssx360.com/api/v1/audit/export.
Local fallback: exports from git notes or on-disk envelopes when no API key.
Side effects: writes files under ``output_dir`` locally; hosted mode returns
download metadata. Returns ``{ok, bundle?, download_url?, error?}``.

Parameters:
    start_date / end_date: ISO 8601 UTC bounds (hosted filter).
    signer_id: Filter by device_id or public-key fingerprint.
    format: json, guac, or evidence-pack serialization.
    include_verification: Attach per-envelope verification replay data.
    workspace / base / head / output_dir: Local fallback range and output path.
ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoLocal-only: Git ref (exclusive) when exporting from git notes or on-disk envelopes.origin/main
headNoLocal-only: Git ref (inclusive) when exporting from git notes or on-disk envelopes.HEAD
formatNoExport serialization: json (envelope bundle), guac (GUAC JSONL ingest), or evidence-pack (compliance bundle with verification metadata).json
end_dateNoISO 8601 UTC upper bound for audit records (inclusive), e.g. 2026-06-30T23:59:59Z.
signer_idNoFilter export to envelopes signed by this device_id (MS-XXXX-YYYY) or Ed25519 public-key fingerprint. Empty includes all signers in scope.
workspaceNoGit repository root for local fallback export. Empty auto-detects from cwd.
output_dirNoLocal-only: directory for exported files. Relative paths resolve under the repo root..matrixscroll/audit-export
start_dateNoISO 8601 UTC lower bound for audit records (inclusive), e.g. 2026-01-01T00:00:00Z. Hosted export filters org audit history; local export filters by commit author date when available.
include_verificationNoWhen true (default), attach per-envelope verification results and trusted-key policy outcomes to the export for auditor replay without re-running Scroll Gate.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses side effects (writes files under output_dir), auth requirement (SSX360_API_KEY), and mode-dependent behavior (hosted vs local fallback). These details go beyond the annotations (readOnlyHint=false, destructiveHint=false) and provide essential operational transparency. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose and usage context. It uses bullet-like lines and a compact return type summary. Every sentence earns its place; there is no fluff or redundancy despite covering multiple modes and parameter groups.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 9 parameters, no required fields, and an output schema, the description fully covers hosted vs local modes, authentication, side effects, and return types. It also points to sibling tools for adjacent needs, making it complete for an AI agent to decide when to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds value by grouping parameters (hosted filter vs local range) and summarizing each parameter's role (e.g., signer_id filters by device_id or fingerprint). It doesn't merely repeat the schema; it clarifies which parameters apply in which mode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports compliance or procurement audit bundles, naming specific formats (JSON, GUAC JSONL, evidence-pack). It distinguishes from siblings by explicitly naming verify_pr_range and list_envelopes as alternatives, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'Use when auditors need envelope bundles'. Gives clear when-not-to-use: 'Prefer verify_pr_range for merge-gate pass/fail' and 'Prefer list_envelopes to browse hosted metadata'. This directly addresses tool selection versus sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_envelopeA

Create a signed Git commit envelope with Ed25519 provenance metadata.

Use after staging changes and before or after ``git commit`` when you need
commit-time actor/tool proof. Prefer ``sign_action`` for non-Git evidence
(CI steps, IaC, migrations). Do not use for verification — call
``verify_envelope`` or ``verify_pr_range`` instead.

Side effects: may write ``.matrixscroll/envelopes/<sha>.json`` when ``save``
is true. Requires a Git repo and Matrix Scroll identity store. No network.
Returns ``{ok, sha, envelope, path, error?}``.

Parameters:
    workspace: Git repo root (defaults to detected repo).
    commit_sha: Existing commit to envelope (defaults to staged/next commit).
    actor_type: Provenance actor, e.g. agent, human, ci.
    tool: Producing tool name, e.g. cursor, claude-code.
    agent_scope: Optional bounded scope path/glob for agent commits.
    sign: Ed25519-sign the envelope (default True).
    save: Persist under .matrixscroll/envelopes (default True).
ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoWhen true (default), persist the envelope under .matrixscroll/envelopes/.
signNoWhen true (default), Ed25519-sign the envelope with the active key store.
toolNoProducing tool name recorded in provenance, e.g. cursor or claude-code.
workspaceNoAbsolute or relative path to the Git repository root. Leave empty to auto-detect from the current working directory.
actor_typeNoProvenance actor label recorded in the envelope, e.g. agent, human, or ci.
commit_shaNoExisting commit to envelope (full or short SHA). Empty uses the staged commit or HEAD depending on hook context.
agent_scopeNoOptional path or glob limiting what an agent commit claims to touch.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite minimal annotations (all false), the description details side effects: 'may write .matrixscroll/envelopes/<sha>.json when save is true.' It also states prerequisites (Git repo, Matrix Scroll identity store), network requirement (no network), and return format. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections: purpose, usage, side effects, parameters list. Each sentence adds value, though the parameter list largely mirrors schema information. Could be slightly more concise but remains efficient for a 7-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 optional parameters and an output schema not shown, the description covers the return format ('{ok, sha, envelope, path, error?}'), side effects, and prerequisites. It is adequate for an agent to understand the tool's behavior, though the exact output schema details are not included (but output schema exists).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by providing examples for `actor_type` ('e.g. agent, human, ci') and clarifying defaults. It also groups parameters logically and adds context beyond schema descriptions, but some entries are close to schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a signed Git commit envelope with Ed25519 provenance metadata.' This is a specific verb+resource combination. It distinguishes from sibling tools like 'sign_action' (non-Git evidence) and 'verify_envelope' (verification only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Use after staging changes and before or after git commit.' Provides alternatives: 'Prefer sign_action for non-Git evidence.' Clearly excludes verification use: 'Do not use for verification — call verify_envelope or verify_pr_range instead.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_envelopesA
Read-onlyIdempotent

List commit envelopes stored on ssx360.com for the authenticated organization.

Use for paginated org triage and agent memory. Requires SSX360_API_KEY.
Do not use for offline Git repos — call ``status`` and ``verify_envelope``.
Do not use for bulk export — call ``audit_export`` instead.

Read-only: no local Git writes. Returns ``{ok, envelopes, total?, error?}``.

Parameters:
    limit: Maximum envelopes per page (1–200, default 50).
    offset: Pagination skip index (zero-based).
    signer_filter: Optional device_id or public-key prefix.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum envelopes to return per page (1–200). Default 50. Use with offset for paginated audit review in agent workflows.
offsetNoNumber of newest matching envelopes to skip before returning results. Zero-based pagination index for large org histories.
signer_filterNoOptional device_id (MS-XXXX-YYYY) or public-key prefix to restrict results to envelopes signed by one identity.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that the tool is 'Read-only: no local Git writes' and specifies the return shape ('Returns {ok, envelopes, total?, error?}'). This adds useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it opens with the main purpose, then provides usage guidelines, behavioral notes, and a bulleted parameter listing. Every sentence serves a clear purpose with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete given the context: annotations cover safety, output schema exists (not shown but acknowledged), input schema is fully documented, and the description covers usage, behavior, and parameters comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description does not need to fully explain parameters. However, the description adds context like 'paginated audit review in agent workflows' for limit and offset, and explains the format for signer_filter. This adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List commit envelopes stored on ssx360.com for the authenticated organization.' It uses specific verb ('List'), resource ('commit envelopes'), and scope ('for the authenticated organization'), and distinguishes from siblings like 'audit_export' and 'verify_envelope'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use ('paginated org triage and agent memory') and when-not-to-use ('Do not use for offline Git repos — call status and verify_envelope. Do not use for bulk export — call audit_export instead.') with alternative tools named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_notesA

Publish local signed envelopes to git notes for CI Scroll Gate verification.

Use after ``create_envelope`` when CI reads ``refs/notes/matrixscroll``.
Do not use for offline single-commit checks — call ``verify_envelope``.
Do not use for hosted org audit — call ``audit_export`` with SSX360_API_KEY.

Side effects: updates the local git notes ref only; push
``refs/notes/matrixscroll`` to remote separately. Returns
``{ok, published, notes_ref, error?}``.

Parameters:
    workspace: Git repo root (defaults to detected repo).
    base: Range start ref (exclusive) for envelopes to publish.
    head: Range end ref (inclusive) for envelopes to publish.
    notes_ref: Git notes ref to write (default refs/notes/matrixscroll).
ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoRange start ref (exclusive) for envelopes to publish.origin/main
headNoRange end ref (inclusive) for envelopes to publish.HEAD
notes_refNoGit notes ref to write, default refs/notes/matrixscroll.refs/notes/matrixscroll
workspaceNoGit repository root. Empty auto-detects from the working directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With minimal annotation hints (all false), the description discloses side effects clearly: 'updates the local git notes ref only; push refs/notes/matrixscroll to remote separately.' It also specifies the return tuple, adding meaningful behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear lead sentence, usage block, side-effect note, and parameter list. It is slightly redundant with the schema's parameter docs, but each section earns its place and is efficiently written.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage alternatives, side effects, and return format. With output schema present, it still provides adequate context for a 4-parameter tool, making it fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description's parameter section largely repeats the schema (e.g., 'Range start ref (exclusive)'), adding no new semantic information. Baseline 3 is appropriate since the schema already carries the parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+context: 'Publish local signed envelopes to git notes for CI Scroll Gate verification.' It clearly distinguishes from siblings by naming the CI workflow and separate tools for offline checks and hosted audit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage direction is provided: 'Use after create_envelope' and 'Do not use for offline single-commit checks — call verify_envelope' and 'Do not use for hosted org audit — call audit_export'. This covers both when and when-not to use, naming explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_mcp_serverA
Read-onlyIdempotent

Fingerprint an MCP server's tool surface into an unsigned ssx360.mcp-manifest.v1.

Use before ``sign_mcp_manifest`` to capture install-time tool names, descriptions,
and input schema hashes. Re-scan later and pass results to ``verify_mcp_manifest``
with a baseline to detect rug-pull drift. Read-only; no network required when
``tools`` is supplied directly.

Returns ``{ok, tool_count, surface_hash, manifest}``.
ParametersJSON Schema
NameRequiredDescriptionDefault
toolsYesMCP tool definitions (name, description, inputSchema) to fingerprint.
packageNoOptional npm/pypi package coordinate.
server_urlNoOptional server URL or package registry link.
server_nameNoOptional MCP server display name.
server_versionNoOptional server version.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and idempotentHint=true, and the description confirms 'Read-only; no network required when tools is supplied directly.' It adds return format details. No contradictions; the description complements annotations well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each adding value: core purpose, usage workflow, behavioral notes, return format. No redundancy; front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (5 parameters, 1 required) and robust annotations, the description covers purpose, workflow, behavior, and returns. It could mention error handling or edge cases, but overall it is complete enough for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description does not add significant new meaning beyond the schema; it mentions the required 'tools' parameter implicitly but does not elaborate on optional parameters' semantic purpose beyond what's in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Fingerprint an MCP server's tool surface into an unsigned ssx360.mcp-manifest.v1.' It uses a specific verb and resource, and distinguishes itself from siblings like sign_mcp_manifest and verify_mcp_manifest by explaining the workflow (use before/after).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use: 'Use before sign_mcp_manifest' and 'Re-scan later and pass results to verify_mcp_manifest with a baseline.' It also provides context about network requirements and read-only nature, helping the agent decide when to invoke.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_actionA

Sign a universal provenance action envelope with the active Ed25519 identity.

Use for CI steps, IaC changes, DB migrations, API calls, contract deploys,
or agent delegation grants. Prefer ``create_envelope`` for Git commits.
Do not use for verification — call ``verify_envelope`` on exported JSON.

Side effects: writes ``save_path`` when set; uses local identity store.
No network unless you later upload the signed artifact yourself.
Returns ``{ok, signed, device_id, mode, path?, error?}``.

Parameters:
    action_type: Provenance label (git_commit, ci_step, iac_change, etc.).
    payload: JSON object to sign (no top-level signature block).
    key_path: Optional MATRIXSCROLL_HOME override for CI ephemeral keys.
    save_path: Optional file path to write the signed document.
ParametersJSON Schema
NameRequiredDescriptionDefault
payloadYesJSON object to sign. Keys are canonicalized before Ed25519 signing per SPEC.md §4. Do not include a top-level signature block.
key_pathNoOptional override for the Matrix Scroll identity store directory (defaults to MATRIXSCROLL_HOME or ~/.matrixscroll). Use for CI ephemeral keys.
save_pathNoOptional file path to write the signed document. When empty, returns JSON only.
action_typeYesProvenance action type: git_commit, ci_step, iac_change, db_migration, api_call, contract_deploy, or custom labels for evidence packs. Typed actions validate required payload fields per schemas/action-envelope.v1.json.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses side effects: writes save_path, uses local identity store, no network. Describes return structure. No contradiction with annotations (readOnlyHint=false, destructiveHint=false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded with purpose and usage, structured into clear paragraphs with parameter bullet points. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, output schema exists, and annotations provide basics, description covers side effects, return format, and usage guidance comprehensively. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds extra context: action_type enumerates valid labels, payload clarifies no signature block, key_path is for CI ephemeral keys, save_path for file output. Adds value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Sign a universal provenance action envelope with the active Ed25519 identity.' Lists specific use cases (CI steps, IaC changes, etc.) and explicitly distinguishes from siblings create_envelope and verify_envelope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (for signing actions like CI, migrations, deployments) and when not to use (for verification, prefer create_envelope for Git commits). Provides clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_agent_traceA

Sign a browser-agent JSONL trace with the active Ed25519 identity.

Use when a WEB_WIZARD or Steel run completes. Hashes the full trace bytes,
records step count and run_id, and writes an offline-verifiable envelope.
Side effects: writes envelope file; uses local identity store. No network.
Returns ``{ok, signed, path?, error?}``.
ParametersJSON Schema
NameRequiredDescriptionDefault
save_pathNoOptional envelope output path (default: `<trace>.envelope.json`).
trace_pathYesPath to a WEB_WIZARD `.traces/<runId>.jsonl` run log.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses side effects: writes an envelope file, uses local identity store, hashing, and no network. This provides substantial behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at five sentences, front-loaded with purpose and usage, followed by side effects and return type. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description appropriately summarizes the return type. The side effects and no-network behavior are clearly stated. Sibling tools include verification counterparts, providing complete context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description need not add much. It restates the schema's description for trace_path and mentions the default for save_path, but does not add new syntactic details or constraints that would significantly help the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (sign), resource (browser-agent JSONL trace), and method (Ed25519 identity). It specifies the exact trace format (WEB_WIZARD .traces/<runId>.jsonl), distinguishing from sibling tools like sign_action or sign_mcp_manifest, but could be more explicit about differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states 'Use when a WEB_WIZARD or Steel run completes,' providing contextual triggers. It also notes the absence of network activity. However, it does not mention when not to use the tool or suggest alternatives like verify_agent_trace.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_mcp_manifestA

Ed25519-sign an MCP tool-surface manifest for offline install verification.

Use after ``scan_mcp_server``. Prefer ``verify_mcp_manifest`` for checks.
Side effects: may write ``save_path``; uses local identity store. No network.
Returns ``{ok, signed, device_id, path?, error?}``.
ParametersJSON Schema
NameRequiredDescriptionDefault
manifestYesUnsigned ssx360.mcp-manifest.v1 document from scan_mcp_server.
save_pathNoOptional file path to write the signed manifest.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (which only indicate non-read-only and non-destructive), the description discloses side effects: 'may write save_path; uses local identity store. No network.' It also describes the return format. This fully informs the agent of behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: main action, usage guidance, side effects/return format. Front-loaded with purpose. No wasted words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage context, behavioral side effects, and return format. Even though an output schema exists, the description still provides a high-level return structure. Given the tool's simplicity (2 params, 1 required), this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds minimal extra meaning: it specifies the manifest is an 'Unsigned ssx360.mcp-manifest.v1 document from scan_mcp_server' and save_path is an 'Optional file path.' This is helpful but not significantly beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool's action: 'Ed25519-sign an MCP tool-surface manifest for offline install verification.' It specifies the output format and differentiates from siblings by mentioning 'Use after scan_mcp_server' and 'Prefer verify_mcp_manifest for checks.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidance: 'Use after scan_mcp_server. Prefer verify_mcp_manifest for checks.' Also notes side effects and what the tool does not do (no network). This clearly helps an agent decide when to invoke this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusA
Read-onlyIdempotent

Report hook install state, local envelope count, and Matrix Scroll config.

Call first in a new repo before any verify/sign tool. Read-only: no Git or
filesystem writes, no network. Do not use for signature checks — call
``verify_envelope`` or ``verify_pr_range`` instead.

Returns ``{ok, config, hook_installed, envelope_count, mode?, device_id?}``.

Parameters:
    workspace: Git repo root (defaults to detected repo).
ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceNoGit repository root. Empty auto-detects from the working directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this by stating 'no Git or filesystem writes, no network', adding specific behavioral detail beyond the boolean hints. It also discloses the return tuple structure, providing extra transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the main purpose, and each sentence adds value: purpose, usage guidance, read-only disclosure, return format, and parameter note. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (1 optional param) with strong annotations and an output schema (also described in text). The description covers what it does, when to use it, what it returns, and how it differs from siblings. Nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the single parameter fully with its own description, so the baseline is 3. The description's parameter note ('defaults to detected repo') mirrors the schema's 'Empty auto-detects', adding no new meaning beyond what's already provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Report') and lists exact resources: hook install state, local envelope count, and Matrix Scroll config. It also differentiates from siblings by explicitly excluding signature checks and directing to verify_envelope or verify_pr_range.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('Call first in a new repo before any verify/sign tool') and explicit when-not-to-use with named alternatives ('Do not use for signature checks — call verify_envelope or verify_pr_range instead'). This fully covers usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_agent_traceA
Read-onlyIdempotent

Verify a signed agent trace envelope offline; optional trace byte check.

Use in CI or auditor handoff. Read-only; no network.
Returns ``{ok, run_id?, step_count?, error?}``.
ParametersJSON Schema
NameRequiredDescriptionDefault
trace_pathNoOptional live `.jsonl` path to confirm bytes match the signed hash.
envelope_pathYesSigned matrixscroll.agent_trace.v1 envelope JSON.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint and destructiveHint. Description adds offline operation, no network, return format with optional fields. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: function, usage, return. Front-loaded with core purpose. No extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a verification tool: purpose, usage context, offline nature, parameter role, return shape. Output schema covers detailed return. No gaps given complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters with descriptions. Description adds meaning by explaining trace_path as 'optional trace byte check' and return structure. Adds value beyond schema for the optional parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific action: verifying a signed agent trace envelope offline. Distinct from sibling verification tools targeting different resources (e.g., verify_envelope, verify_mcp_manifest).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends use in CI or auditor handoff. States read-only and no-network constraints. Does not explicitly exclude scenarios, but context is sufficient for appropriate selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_envelopeA
Read-onlyIdempotent

Verify one signed commit envelope offline against RFC 8032 Ed25519 rules.

Use for a single commit SHA or explicit envelope JSON file. Prefer
``verify_pr_range`` for PR/branch ranges and ``audit_export`` for procurement
bundles spanning many commits. Do not use when you only need hook status —
call ``status`` instead.

Read-only: no network or SSX360_API_KEY required. Does not modify Git state.
Returns ``{ok, sha, actor_type, mode, error?, envelope?}``; ``ok`` is false
on signature, policy, expiry, or missing-envelope errors.

Parameters:
    workspace: Git repo root (defaults to detected repo).
    commit_sha: Commit SHA to verify (uses local envelope file).
    envelope / envelope_path: Optional explicit path to envelope JSON.
    require_mode: Policy filter, e.g. emulated or hardware (empty skips).
    trusted_keys / trusted_keys_file: JSON file listing trusted public keys.
    check_expiry: Reject envelopes with expired delegation timestamps.
    require_actor_types / deny_actor_types: Actor policy allow/deny lists.
ParametersJSON Schema
NameRequiredDescriptionDefault
envelopeNoPath to a commit envelope JSON file to verify. Alias for envelope_path; use when importing bundles from CI artifacts or audit exports.
workspaceNoGit repository root. Empty auto-detects from the working directory.
commit_shaNoCommit SHA whose local envelope file should be verified offline.
check_expiryNoWhen true, reject envelopes whose signed delegation or agent-scope manifest includes an expired ``expires_at`` timestamp (ISO 8601 UTC).
require_modeNoPolicy filter on signature mode, e.g. emulated or hardware. Empty skips mode enforcement.
trusted_keysNoPath to a JSON policy file listing trusted Ed25519 public keys (device_id or base64 public keys). Alias for trusted_keys_file.
envelope_pathNoOptional explicit path to an envelope JSON file instead of the default ``.matrixscroll/envelopes/<sha>.json`` location.
deny_actor_typesNoIf set, fail verification when provenance.actor_type matches any denied value.
trusted_keys_fileNoPath to a JSON policy file listing trusted Ed25519 public keys.
require_actor_typesNoIf set, fail verification unless provenance.actor_type is in this list.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnly/idempotent/destructive false, but the description adds valuable context: 'Read-only: no network or SSX360_API_KEY required. Does not modify Git state.' It also details the return tuple and error semantics: 'ok is false on signature, policy, expiry, or missing-envelope errors.' No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized: purpose sentence, usage guidance, behavioral notes, return format, then parameter summary. It is concise but comprehensive for a 10-parameter tool, with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 10 parameters and complex policy options, but the description covers purpose, usage vs alternatives, behavioral constraints, return format, and parameter semantics. It is fully sufficient for an agent to select and invoke the tool correctly, especially given the output schema exists and the description already explains return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's parameter section duplicates schema information without adding substantive meaning; for instance, grouping aliases like 'envelope / envelope_path' and 'trusted_keys / trusted_keys_file' is already stated in the schema as alias relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Verify one signed commit envelope offline against RFC 8032 Ed25519 rules.' It explicitly distinguishes from siblings by directing users to verify_pr_range for ranges, audit_export for bundles, and status for hook status, making the tool's unique scope clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'Use for a single commit SHA or explicit envelope JSON file.' It also gives concrete alternatives and exclusions: 'Prefer verify_pr_range for PR/branch ranges and audit_export for procurement bundles' and 'Do not use when you only need hook status — call status instead.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_mcp_manifestA
Read-onlyIdempotent

Verify a signed MCP manifest and optionally diff against an install-time baseline.

Use in CI or before trusting an MCP server after upgrade. Read-only; no network.
Returns ``{ok, surface_hash, tool_count, drift?, error?}``; ``ok`` is false on
bad signature or surface drift vs baseline.
ParametersJSON Schema
NameRequiredDescriptionDefault
baselineNoOptional baseline signed manifest for rug-pull drift detection.
manifestYesSigned ssx360.mcp-manifest.v1 to verify offline.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds valuable context: 'Read-only; no network' and describes the return tuple with conditions for ok false (bad signature or drift). This goes beyond annotations by explaining output semantics and error conditions without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first defines the action; second gives usage context and return format. No fluff, front-loaded with the core purpose. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description still explains return values and key conditions. It covers behavioral constraints (read-only, no network), usage context (CI/trust before upgrade), and parameter roles. The tool is simple (2 params, no enums) and the description fully addresses its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description's parameter explanations ('Optional baseline signed manifest for rug-pull drift detection', 'Signed ssx360.mcp-manifest.v1 to verify offline') are identical to the schema's own descriptions. Thus the description adds no new meaning beyond the schema, meeting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool verifies a signed MCP manifest and optionally diffs against a baseline. It distinguishes from sibling tools like verify_agent_trace and verify_envelope by specifying the resource type (MCP manifest) and the operation (verify with diff). It also suggests a concrete use case (CI or before trusting after upgrade).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends using in CI or before trusting after upgrade. States it is read-only and no network, which reassures safe usage. However, it does not explicitly mention when not to use or compare to alternatives like verify_agent_trace, though the specific resource type implicitly differentiates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_pr_rangeA

Scroll Gate: verify signed/unsigned commits across a PR commit range.

Use for merge gates and PR review (many commits). Prefer ``verify_envelope``
for one commit offline. Prefer ``audit_export`` when auditors need bundles,
not pass/fail on a range.

Hosted mode (default): calls ssx360.com; requires SSX360_API_KEY.
Set ``source=local|notes|bundle`` to verify offline without an API key.
Read-only for Git refs; hosted mode emits usage to ssx360.com.
Returns ``{ok, verified_count, unsigned_shas?, failures?, error?}``.

Parameters:
    workspace: Git repo root (defaults to detected repo).
    base: Range start ref (exclusive), e.g. origin/main.
    head: Range end ref (inclusive), e.g. HEAD or PR head SHA.
    source: Envelope transport — hosted, local, notes, or bundle.
    notes_ref: Git notes ref when source=notes.
    bundle_dir: Bundle directory when source=bundle.
    require_mode: Policy require_mode filter.
    trusted_keys_file: Trusted keys JSON for signed/untrusted actor checks.
    require_actor_types / deny_actor_types: Actor policy lists.
    allow_empty: Accept a labelled empty range. Defaults to false.
ParametersJSON Schema
NameRequiredDescriptionDefault
baseNoRange start Git ref (exclusive), typically origin/main.origin/main
headNoRange end Git ref (inclusive), e.g. HEAD or a PR head SHA.HEAD
sourceNoEnvelope transport: hosted Scroll Gate (default, requires SSX360_API_KEY), local files, git notes, or bundle dir for offline verification.hosted
notes_refNoGit notes ref when source=notes, default refs/notes/matrixscroll.refs/notes/matrixscroll
workspaceNoGit repository root. Empty auto-detects from the working directory.
bundle_dirNoDirectory containing exported envelope bundles when source=bundle.
allow_emptyNoExplicitly accept an empty range. Defaults to false and the result remains labelled empty.
require_modeNoOptional policy require_mode filter applied to every commit in the range.
deny_actor_typesNoOptional deny-list of provenance.actor_type values.
trusted_keys_fileNoOptional JSON file of trusted public keys for the range check.
require_actor_typesNoOptional allow-list of provenance.actor_type values.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations indicating readOnlyHint=false, the description clarifies 'Read-only for Git refs' and discloses side effects: 'hosted mode emits usage to ssx360.com' and requires SSX360_API_KEY. This adds context beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a front-loaded purpose, usage guidance, mode behavior, return shape, and parameter list. However, the parameter list is largely redundant with the schema, adding length without new information, so it scores 4 rather than 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 params, no required fields, output schema present), the description provides use-case guidance, explains hosted vs offline modes, and summarizes the return format. It omits detailed policy semantics, but those are covered by the schema and output schema, so it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage with full descriptions for all 11 parameters, so the bar is at baseline 3. The description's parameter block mostly restates schema content with slight grouping (e.g., 'require_actor_types / deny_actor_types: Actor policy lists'), offering minimal additional semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Scroll Gate: verify signed/unsigned commits across a PR commit range,' providing a specific verb and resource scope. It clearly distinguishes the tool from siblings like verify_envelope and audit_export by naming them explicitly, so the agent knows what this tool uniquely does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Use for merge gates and PR review (many commits),' and then provides alternative tools for different conditions: 'Prefer verify_envelope for one commit offline' and 'Prefer audit_export when auditors need bundles.' This is clear when-to-use guidance with named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.10.0
    • Removedconnect_card
  2. 2 tool updatesv0.7.0
    • Changedaudit_export1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"Export serialization: json (envelope bundle), guac (GUAC JSONL ingest), or evidence-pack (hosted Team+ procurement bundle with verification metadata)."New value: +"Export serialization: json (envelope bundle), guac (GUAC JSONL ingest), or evidence-pack (compliance bundle with verification metadata)."
    • Changedverify_pr_range1 field changed
      • addedInput schema / properties / allow_empty
        Added value: +{
        +  "default": false,
        +  "description": "Explicitly accept an empty range. Defaults to false and the result remains labelled empty.",
        +  "title": "Allow Empty",
        +  "type": "boolean"
        +}
  3. 4 tool updatesv0.6.2
    • Addedpublish_notes
    • Addedstatus
    • Addedverify_envelope
    • Addedverify_pr_range
  4. 4 tool updatesv0.6.1
    • Removedpublish_notes
    • Removedstatus
    • Removedverify_envelope
    • Removedverify_pr_range
  5. 5 tool updatesv0.4.3
    • Addedscan_mcp_server
    • Addedsign_agent_trace
    • Addedsign_mcp_manifest
    • Addedverify_agent_trace
    • Addedverify_mcp_manifest
  6. 9 tool updatesv0.4.2
    • Changedaudit_export10 fields changed
      • addedInput schema / properties / base / description
        Added value: +"Local-only: Git ref (exclusive) when exporting from git notes or on-disk envelopes."
      • addedInput schema / properties / end_date
        Added value: +{
        +  "default": "",
        +  "description": "ISO 8601 UTC upper bound for audit records (inclusive), e.g. 2026-06-30T23:59:59Z.",
        +  "title": "End Date",
        +  "type": "string"
        +}
      • addedInput schema / properties / format
        Added value: +{
        +  "default": "json",
        +  "description": "Export serialization: json (envelope bundle), guac (GUAC JSONL ingest), or evidence-pack (hosted Team+ procurement bundle with verification metadata).",
        +  "enum": [
        +    "json",
        +    "guac",
        +    "evidence-pack"
        +  ],
        +  "title": "Format",
        +  "type": "string"
        +}
      • addedInput schema / properties / head / description
        Added value: +"Local-only: Git ref (inclusive) when exporting from git notes or on-disk envelopes."
      • removedInput schema / properties / include_guac
        Removed value: -{
        -  "default": true,
        -  "title": "Include Guac",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / include_verification
        Added value: +{
        +  "default": true,
        +  "description": "When true (default), attach per-envelope verification results and trusted-key policy outcomes to the export for auditor replay without re-running Scroll Gate.",
        +  "title": "Include Verification",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / output_dir / description
        Added value: +"Local-only: directory for exported files. Relative paths resolve under the repo root."
      • addedInput schema / properties / signer_id
        Added value: +{
        +  "default": "",
        +  "description": "Filter export to envelopes signed by this device_id (MS-XXXX-YYYY) or Ed25519 public-key fingerprint. Empty includes all signers in scope.",
        +  "title": "Signer Id",
        +  "type": "string"
        +}
      • addedInput schema / properties / start_date
        Added value: +{
        +  "default": "",
        +  "description": "ISO 8601 UTC lower bound for audit records (inclusive), e.g. 2026-01-01T00:00:00Z. Hosted export filters org audit history; local export filters by commit author date when available.",
        +  "title": "Start Date",
        +  "type": "string"
        +}
      • addedInput schema / properties / workspace / description
        Added value: +"Git repository root for local fallback export. Empty auto-detects from cwd."
    • Addedconnect_card
    • Changedcreate_envelope7 fields changed
      • addedInput schema / properties / actor_type / description
        Added value: +"Provenance actor label recorded in the envelope, e.g. agent, human, or ci."
      • addedInput schema / properties / agent_scope / description
        Added value: +"Optional path or glob limiting what an agent commit claims to touch."
      • addedInput schema / properties / commit_sha / description
        Added value: +"Existing commit to envelope (full or short SHA). Empty uses the staged commit or HEAD depending on hook context."
      • addedInput schema / properties / save / description
        Added value: +"When true (default), persist the envelope under .matrixscroll/envelopes/."
      • addedInput schema / properties / sign / description
        Added value: +"When true (default), Ed25519-sign the envelope with the active key store."
      • addedInput schema / properties / tool / description
        Added value: +"Producing tool name recorded in provenance, e.g. cursor or claude-code."
      • addedInput schema / properties / workspace / description
        Added value: +"Absolute or relative path to the Git repository root. Leave empty to auto-detect from the current working directory."
    • Addedlist_envelopes
    • Changedpublish_notes4 fields changed
      • addedInput schema / properties / base / description
        Added value: +"Range start ref (exclusive) for envelopes to publish."
      • addedInput schema / properties / head / description
        Added value: +"Range end ref (inclusive) for envelopes to publish."
      • addedInput schema / properties / notes_ref / description
        Added value: +"Git notes ref to write, default refs/notes/matrixscroll."
      • addedInput schema / properties / workspace / description
        Added value: +"Git repository root. Empty auto-detects from the working directory."
    • Addedsign_action
    • Changedstatus1 field changed
      • addedInput schema / properties / workspace / description
        Added value: +"Git repository root. Empty auto-detects from the working directory."
    • Changedverify_envelope10 fields changed
      • addedInput schema / properties / check_expiry
        Added value: +{
        +  "default": false,
        +  "description": "When true, reject envelopes whose signed delegation or agent-scope manifest includes an expired ``expires_at`` timestamp (ISO 8601 UTC).",
        +  "title": "Check Expiry",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / commit_sha / description
        Added value: +"Commit SHA whose local envelope file should be verified offline."
      • addedInput schema / properties / deny_actor_types / description
        Added value: +"If set, fail verification when provenance.actor_type matches any denied value."
      • addedInput schema / properties / envelope
        Added value: +{
        +  "default": "",
        +  "description": "Path to a commit envelope JSON file to verify. Alias for envelope_path; use when importing bundles from CI artifacts or audit exports.",
        +  "title": "Envelope",
        +  "type": "string"
        +}
      • addedInput schema / properties / envelope_path / description
        Added value: +"Optional explicit path to an envelope JSON file instead of the default ``.matrixscroll/envelopes/<sha>.json`` location."
      • addedInput schema / properties / require_actor_types / description
        Added value: +"If set, fail verification unless provenance.actor_type is in this list."
      • addedInput schema / properties / require_mode / description
        Added value: +"Policy filter on signature mode, e.g. emulated or hardware. Empty skips mode enforcement."
      • addedInput schema / properties / trusted_keys
        Added value: +{
        +  "default": "",
        +  "description": "Path to a JSON policy file listing trusted Ed25519 public keys (device_id or base64 public keys). Alias for trusted_keys_file.",
        +  "title": "Trusted Keys",
        +  "type": "string"
        +}
      • addedInput schema / properties / trusted_keys_file / description
        Added value: +"Path to a JSON policy file listing trusted Ed25519 public keys."
      • addedInput schema / properties / workspace / description
        Added value: +"Git repository root. Empty auto-detects from the working directory."
    • Changedverify_pr_range12 fields changed
      • addedInput schema / properties / base / description
        Added value: +"Range start Git ref (exclusive), typically origin/main."
      • addedInput schema / properties / bundle_dir / description
        Added value: +"Directory containing exported envelope bundles when source=bundle."
      • addedInput schema / properties / deny_actor_types / description
        Added value: +"Optional deny-list of provenance.actor_type values."
      • addedInput schema / properties / head / description
        Added value: +"Range end Git ref (inclusive), e.g. HEAD or a PR head SHA."
      • addedInput schema / properties / notes_ref / description
        Added value: +"Git notes ref when source=notes, default refs/notes/matrixscroll."
      • addedInput schema / properties / require_actor_types / description
        Added value: +"Optional allow-list of provenance.actor_type values."
      • addedInput schema / properties / require_mode / description
        Added value: +"Optional policy require_mode filter applied to every commit in the range."
      • changedInput schema / properties / source / default
        Previous value: -"notes"New value: +"hosted"
      • addedInput schema / properties / source / description
        Added value: +"Envelope transport: hosted Scroll Gate (default, requires SSX360_API_KEY), local files, git notes, or bundle dir for offline verification."
      • changedInput schema / properties / source / enum
        Previous value: -[
        -  "local",
        -  "notes",
        -  "bundle"
        -]New value: +[
        +  "hosted",
        +  "local",
        +  "notes",
        +  "bundle"
        +]
      • addedInput schema / properties / trusted_keys_file / description
        Added value: +"Optional JSON file of trusted public keys for the range check."
      • addedInput schema / properties / workspace / description
        Added value: +"Git repository root. Empty auto-detects from the working directory."
  7. 16 tool updatesv0.3.0
    • Removedanalyze_workspace
    • Addedaudit_export
    • Removedaudit_trust_surface
    • Removedbenchmark_openhuman
    • Removedbrainstorm_workspace
    • Removedbuild_usecase_blueprint
    • Addedcreate_envelope
    • Removedplan_matrixscroll_rollout
    • Addedpublish_notes
    • Removedrecommend_ecosystem
    • Removedscaffold_editor_integration
    • Removedscan_market_radar
    • Removedscan_research_radar
    • Addedstatus
    • Addedverify_envelope
    • Addedverify_pr_range
  8. 10 tool updatesv0.2.6
    • First observedanalyze_workspace
    • First observedaudit_trust_surface
    • First observedbenchmark_openhuman
    • First observedbrainstorm_workspace
    • First observedbuild_usecase_blueprint
    • First observedplan_matrixscroll_rollout
    • First observedrecommend_ecosystem
    • First observedscaffold_editor_integration
    • First observedscan_market_radar
    • First observedscan_research_radar

TDQS

A4.4/5.0

Scored across 13 tools

Disambiguation4/5

Each tool targets a distinct artifact type (PR range, commit envelope, action, MCP manifest, agent trace), and the descriptions include helpful cross-references like 'prefer verify_envelope' and 'prefer audit_export.' However, the multiple sign/verify/create tools share similar shapes and require careful reading of the object noun to avoid misselection.

Naming Consistency4/5

Most tool names follow a clear verb_noun snake_case pattern, with consistent sign_/verify_ pairs across mcp_manifest and agent_trace. The pattern is weakened slightly by 'status' (a bare noun) and 'audit_export' (noun_noun), though these are still readable and do not cause much confusion.

Tool Count4/5

Thirteen tools is within a reasonable range and each tool maps to a distinct workflow step. The count feels slightly heavy because the server covers several domains at once—Git commit provenance, action signing, MCP manifest security, agent trace verification, and hosted audit export—rather than focusing on one narrow purpose.

Completeness4/5

The core lifecycle is well covered: create/verify/publish for Git envelopes, sign/verify for actions, manifests, and traces, plus status, listing, and audit export. Minor gaps exist around identity/key management and there is no explicit revocation or deletion workflow, but these are not critical for the primary signing and verification use cases.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    C
    maintenance
    An MCP server providing 1,112 tools for the GitHub REST API across all 44 API categories. It enables comprehensive GitHub operations through Claude with typed validation and category filtering.
    100
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-first security check for AI coding agents — finds hardcoded secrets, exposed .env files, git-history leaks and vulnerable dependencies (OSV), entirely on your machine. Ask your agent "is this safe to ship?" and get a Launch Readiness score with a fix for every finding.
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    A security-first MCP gateway that enables AI assistants to safely inspect and interact with GitHub repositories through a controlled, auditable tool layer with policy enforcement and human approval for mutations.
    27
    MIT