Skip to main content
Glama

Matrix Scroll

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

ci-unit PyPI Python License

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.

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.

SSX360 has completed and produced the USB signer shown below. SSX360 supplies it by direct inquiry through SSX360 contact or mission@ssx360.com. Integration details are available to qualified operators during setup.

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

Install the MCP server

Install the current release from PyPI:

pip install "matrixscroll[mcp]==0.7.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.7.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

connect_card

Probes the SSX360 USB signer over USB CDC

Opens the configured serial port

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, MCP manifest checks, and USB signer access 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.7.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

Use the SSX360 USB signer

SSX360 USB signer product visualization

Product visualization of the finished SSX360 USB signer. Supplied configurations can vary in enclosure details. The product documentation supplied with each unit names that configuration's signing boundary.

Install the hardware and MCP extras:

pip install "matrixscroll[mcp,hardware]==0.7.0"

Set the hardware provider and USB CDC port before starting the MCP server.

Windows PowerShell:

$env:MATRIXSCROLL_MODE = "hardware"
$env:MATRIXSCROLL_SE050_PORT = "COM3"
matrixscroll status
matrixscroll-mcp

Linux:

export MATRIXSCROLL_MODE=hardware
export MATRIXSCROLL_SE050_PORT=/dev/ttyACM0
matrixscroll status
matrixscroll-mcp

You can also pass the hardware settings through the MCP client configuration:

{
  "mcpServers": {
    "matrixscroll": {
      "command": "matrixscroll-mcp",
      "args": [],
      "env": {
        "MATRIXSCROLL_MODE": "hardware",
        "MATRIXSCROLL_SE050_PORT": "COM3"
      }
    }
  }
}

Call connect_card to confirm that the signer responds. Then call status to inspect the active provider before creating an envelope.

SSX360 supplies the finished signer through direct contact. Ask for the Matrix Scroll USB signer through SSX360 contact. The hardware is not distributed through PyPI or listed for self-service purchase.

How hardware signing works

  1. The signer creates and retains the private Ed25519 key in hardware.

  2. The host sends canonical record bytes and receives the public key and detached signature.

  3. Matrix Scroll assembles the record and checks it with the same offline verifier used for software signing.

The host receives only the public material needed to verify the record. Qualified operators receive the integration guide during setup.

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.7.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.7.0 installs the 14-tool stdio MCP server and Git hooks. The release also includes the MCP Trust Scanner, offline verification, and USB signer host integration.

  • Hardware supply: SSX360 produces the USB signer and supplies it after a direct inquiry. PyPI distributes the host software.

  • 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). This tree defaults new software keys to ml-dsa-87 for CNSA 2.0 signature-parameter alignment; published PyPI 0.7.0 still defaults to ml-dsa-65 until a release ships the change. 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.

  • 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.7.0 wheel provenance:

curl -H "Accept: application/vnd.pypi.integrity.v1+json" \
  https://pypi.org/integrity/matrixscroll/0.7.0/matrixscroll-0.7.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.

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

Tombstone / schemas

matrixscroll.com

Documentation

GitHub docs

Offline verification

CLI guide

Protocol specification

SPEC.md

Source repository

github.com/SSX360/matrixscroll

SSX360 contact

Contact SSX360

Available Tools

14 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.

connect_cardConnect SE050 hardware bridgeA

Probe AP2 Vault Card / SE050 USB CDC hardware signing bridge availability.

Use before hardware signing to confirm the reader responds on the serial port. Use create_envelope for signing after hardware mode is configured. Do not use for verification — call verify_envelope after envelopes exist. Prefer status to check local identity without opening USB.

Side effects: opens a short-lived serial session; does not export private keys. No SSX360_API_KEY required. Returns {ok, mode, reader_name, available?, error?}.

Parameters: reader_name: Serial port, e.g. COM3 or /dev/ttyACM0 (or env default). pin: Optional secure-element PIN; prefer MATRIXSCROLL_PIV_PIN in CI. timeout: Transport timeout in milliseconds (default 3000).

ParametersJSON Schema
NameRequiredDescriptionDefault
pinNoOptional PIV or secure-element PIN when the reader requires user presence. Prefer env MATRIXSCROLL_PIV_PIN in CI; never log this value.
timeoutNoTransport timeout in milliseconds for ping and sign operations (default 3000). Increase on slow USB hubs or VM passthrough.
reader_nameNoSerial port or USB CDC device name for the SE050 bridge, e.g. COM3 on Windows or /dev/ttyACM0 on Linux. Empty uses MATRIXSCROLL_SE050_PORT.

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?

Despite annotations (readOnlyHint=false, destructiveHint=false), the description adds valuable context: 'opens a short-lived serial session; does not export private keys' and 'No SSX360_API_KEY required.' It also discloses the return shape, covering side effects and auth requirements beyond what annotations provide.

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: purpose sentence, usage guidance, side effects, return, then parameters. It is front-loaded with the core purpose. Slightly verbose due to repeated parameter details already in schema, but every sentence serves a functional role and the organization aids comprehension.

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's complexity (hardware interaction, side effects, alternatives) and the presence of an output schema, the description covers all essential aspects: prerequisites (probe before signing), exclusions, auth requirements, side effects, return format, and parameter guidance. The agent has enough context to invoke it correctly and understand outcomes.

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 schema already documents all parameters. The description restates parameter meanings (e.g., 'reader_name: Serial port, e.g. COM3 or /dev/ttyACM0') but adds no new semantic information beyond the schema. It also includes the same security hint about MATRIXSCROLL_PIV_PIN. Baseline 3 is appropriate.

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: 'Probe AP2 Vault Card / SE050 USB CDC hardware signing bridge availability.' It explicitly distinguishes itself from siblings by stating 'Use create_envelope for signing... Do not use for verification — call verify_envelope... Prefer status to check local identity without opening USB.' This clearly identifies the tool's unique role.

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 context ('Use before hardware signing to confirm the reader responds on the serial port') and clear exclusions ('Do not use for verification'). It names alternative tools (create_envelope, verify_envelope, status) with reasons, giving an agent strong decision support.

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. Dates show when Glama detected each change.

  1. 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"
        +}
  2. 4 tool updatesv0.6.2
    • Addedpublish_notes
    • Addedstatus
    • Addedverify_envelope
    • Addedverify_pr_range
  3. 4 tool updatesv0.6.1
    • Removedpublish_notes
    • Removedstatus
    • Removedverify_envelope
    • Removedverify_pr_range
  4. 5 tool updatesv0.4.3
    • Addedscan_mcp_server
    • Addedsign_agent_trace
    • Addedsign_mcp_manifest
    • Addedverify_agent_trace
    • Addedverify_mcp_manifest
  5. 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."
  6. 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
  7. 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.6/5.0
Disambiguation5/5

Each tool targets a distinct artifact type (commit, action, MCP manifest, agent trace) and operation (sign, verify, audit, list, status, connect). Descriptions explicitly distinguish overlapping tools, e.g., create_envelope for Git commits vs sign_action for non-Git, and verify_envelope for single commits vs verify_pr_range for ranges.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern (create_envelope, verify_pr_range, publish_notes, sign_agent_trace). However, 'status' is a bare noun and 'audit_export' is a compound noun rather than verb_object, introducing minor inconsistency.

Tool Count5/5

With 14 tools, the set is well-scoped for a provenance ecosystem covering signing, verification, publication, auditing, hardware connection, and specialized manifest/trace handling. Each tool earns its place without redundancy.

Completeness5/5

The tool surface provides full lifecycle coverage: creation/signing and verification for git commits, actions, MCP manifests, and agent traces, plus audit export, listing, status checks, and git notes publishing. No critical dead ends or missing operations are evident.

Maintenance

ActivityActive
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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SSX360/matrixscroll'

If you have feedback or need assistance with the MCP directory API, please join our Discord server