matrixscroll
This MCP server is a workspace intelligence and developer tooling server for the Matrix Scroll protocol, providing analysis, planning, auditing, and scaffolding capabilities for agent-assisted development.
analyze_workspace— Scan a local directory (read-only, offline) to detect languages, frameworks, dependencies, package managers, and project structure.brainstorm_workspace— Generate file-grounded, next-action recommendations aligned to a specific engineering or product goal.recommend_ecosystem— Suggest compatible MCP servers, repositories, and APIs matching the project's profile, with optional live query mode.build_usecase_blueprint— Synthesize a 3-layer architecture blueprint (BUILD / INTEGRATE / FOUNDATION) to guide build-vs-integrate decisions.scan_research_radar— Surface relevant academic papers and AI/ML models from arXiv and Hugging Face (live or cached mode).scan_market_radar— Identify market signals and developer discussions (Hacker News, DevHunt, Uneed) relevant to the project goal.benchmark_openhuman— Compare the project's posture and tooling against the OpenHuman framework to find alignment gaps.audit_trust_surface— Audit for missing proof links, stale naming, and trust gaps across public-site, MCP server, or repository surfaces.scaffold_editor_integration— Preview or write editor configs (Cursor, VS Code, Claude Desktop) to integrate the Matrix Scroll MCP server, with safe diff-preview before any writes.plan_matrixscroll_rollout— Generate an audience-specific rollout playbook (founder, security, devrel, or team) with steps, objection handling, and comparison hooks.
Provides tools for signing and verifying commit provenance using Ed25519 signatures, enabling proof of authorship for agent-assisted Git commits.
Integrates with GitHub via a GitHub Action for verifying commit provenance in PRs, and provides browser verification of commit envelopes.
Provides a GitHub Action for verifying commit provenance in CI pipelines, ensuring every commit in a PR range is signed before merge.
Supports hardware-backed signing using the NXP SE050 secure element for enhanced trust, available as a preview upgrade.
Matrix Scroll
Signed machine-action records with offline verification for MCP, Git, and CI.
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-mcpAfter 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 |
| Reports local identity, hook state, and envelope count | Read-only and local |
| Creates an Ed25519-signed Git commit envelope | Writes a local envelope by default |
| Verifies one signed envelope and its policy fields | Read-only and local |
| Signs provenance for CI, infrastructure changes, migrations, API calls, or other actions | Writes only when |
| Checks every commit in a Git range | Local for |
| Publishes local envelopes to | Writes local Git notes |
| Exports evidence for review | Writes a local bundle or uses the hosted API when configured |
| Lists organization envelopes | Requires |
| Probes the SSX360 USB signer over USB CDC | Opens the configured serial port |
| Fingerprints MCP tool names, descriptions, and input schemas | Read-only when tools are supplied |
| Signs an MCP tool-surface manifest | Writes only when |
| Verifies a manifest and compares it with a signed baseline | Read-only and local |
| Signs a browser-agent JSONL trace | Writes a signed envelope |
| 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 \
--prettyThe 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 --prettyUse the SSX360 USB signer

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-mcpLinux:
export MATRIXSCROLL_MODE=hardware
export MATRIXSCROLL_SE050_PORT=/dev/ttyACM0
matrixscroll status
matrixscroll-mcpYou 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
The signer creates and retains the private Ed25519 key in hardware.
The host sends canonical record bytes and receives the public key and detached signature.
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.jsonmatrixscroll 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.0installs 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_envelopesand the hosted modes ofverify_pr_rangeandaudit_exportrequireSSX360_API_KEYand 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 toml-dsa-87for CNSA 2.0 signature-parameter alignment; published PyPI0.7.0still defaults toml-dsa-65until 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_typecan 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/provenanceThe 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 | |
Documentation | |
Offline verification | |
Protocol specification | |
Source repository | |
SSX360 contact |
Available Tools
14 toolsaudit_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.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Local-only: Git ref (exclusive) when exporting from git notes or on-disk envelopes. | origin/main |
| head | No | Local-only: Git ref (inclusive) when exporting from git notes or on-disk envelopes. | HEAD |
| format | No | Export serialization: json (envelope bundle), guac (GUAC JSONL ingest), or evidence-pack (compliance bundle with verification metadata). | json |
| end_date | No | ISO 8601 UTC upper bound for audit records (inclusive), e.g. 2026-06-30T23:59:59Z. | |
| signer_id | No | Filter export to envelopes signed by this device_id (MS-XXXX-YYYY) or Ed25519 public-key fingerprint. Empty includes all signers in scope. | |
| workspace | No | Git repository root for local fallback export. Empty auto-detects from cwd. | |
| output_dir | No | Local-only: directory for exported files. Relative paths resolve under the repo root. | .matrixscroll/audit-export |
| start_date | No | 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. | |
| include_verification | No | When 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| pin | No | Optional PIV or secure-element PIN when the reader requires user presence. Prefer env MATRIXSCROLL_PIV_PIN in CI; never log this value. | |
| timeout | No | Transport timeout in milliseconds for ping and sign operations (default 3000). Increase on slow USB hubs or VM passthrough. | |
| reader_name | No | Serial 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | When true (default), persist the envelope under .matrixscroll/envelopes/. | |
| sign | No | When true (default), Ed25519-sign the envelope with the active key store. | |
| tool | No | Producing tool name recorded in provenance, e.g. cursor or claude-code. | |
| workspace | No | Absolute or relative path to the Git repository root. Leave empty to auto-detect from the current working directory. | |
| actor_type | No | Provenance actor label recorded in the envelope, e.g. agent, human, or ci. | |
| commit_sha | No | Existing commit to envelope (full or short SHA). Empty uses the staged commit or HEAD depending on hook context. | |
| agent_scope | No | Optional path or glob limiting what an agent commit claims to touch. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_envelopesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum envelopes to return per page (1–200). Default 50. Use with offset for paginated audit review in agent workflows. | |
| offset | No | Number of newest matching envelopes to skip before returning results. Zero-based pagination index for large org histories. | |
| signer_filter | No | Optional device_id (MS-XXXX-YYYY) or public-key prefix to restrict results to envelopes signed by one identity. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Range start ref (exclusive) for envelopes to publish. | origin/main |
| head | No | Range end ref (inclusive) for envelopes to publish. | HEAD |
| notes_ref | No | Git notes ref to write, default refs/notes/matrixscroll. | refs/notes/matrixscroll |
| workspace | No | Git repository root. Empty auto-detects from the working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_serverARead-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}``.
| Name | Required | Description | Default |
|---|---|---|---|
| tools | Yes | MCP tool definitions (name, description, inputSchema) to fingerprint. | |
| package | No | Optional npm/pypi package coordinate. | |
| server_url | No | Optional server URL or package registry link. | |
| server_name | No | Optional MCP server display name. | |
| server_version | No | Optional server version. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | JSON object to sign. Keys are canonicalized before Ed25519 signing per SPEC.md §4. Do not include a top-level signature block. | |
| key_path | No | Optional override for the Matrix Scroll identity store directory (defaults to MATRIXSCROLL_HOME or ~/.matrixscroll). Use for CI ephemeral keys. | |
| save_path | No | Optional file path to write the signed document. When empty, returns JSON only. | |
| action_type | Yes | Provenance 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
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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?}``.
| Name | Required | Description | Default |
|---|---|---|---|
| save_path | No | Optional envelope output path (default: `<trace>.envelope.json`). | |
| trace_path | Yes | Path to a WEB_WIZARD `.traces/<runId>.jsonl` run log. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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?}``.
| Name | Required | Description | Default |
|---|---|---|---|
| manifest | Yes | Unsigned ssx360.mcp-manifest.v1 document from scan_mcp_server. | |
| save_path | No | Optional file path to write the signed manifest. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
statusARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | Git repository root. Empty auto-detects from the working directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_traceARead-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?}``.
| Name | Required | Description | Default |
|---|---|---|---|
| trace_path | No | Optional live `.jsonl` path to confirm bytes match the signed hash. | |
| envelope_path | Yes | Signed matrixscroll.agent_trace.v1 envelope JSON. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_envelopeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| envelope | No | Path to a commit envelope JSON file to verify. Alias for envelope_path; use when importing bundles from CI artifacts or audit exports. | |
| workspace | No | Git repository root. Empty auto-detects from the working directory. | |
| commit_sha | No | Commit SHA whose local envelope file should be verified offline. | |
| check_expiry | No | When true, reject envelopes whose signed delegation or agent-scope manifest includes an expired ``expires_at`` timestamp (ISO 8601 UTC). | |
| require_mode | No | Policy filter on signature mode, e.g. emulated or hardware. Empty skips mode enforcement. | |
| trusted_keys | No | Path to a JSON policy file listing trusted Ed25519 public keys (device_id or base64 public keys). Alias for trusted_keys_file. | |
| envelope_path | No | Optional explicit path to an envelope JSON file instead of the default ``.matrixscroll/envelopes/<sha>.json`` location. | |
| deny_actor_types | No | If set, fail verification when provenance.actor_type matches any denied value. | |
| trusted_keys_file | No | Path to a JSON policy file listing trusted Ed25519 public keys. | |
| require_actor_types | No | If set, fail verification unless provenance.actor_type is in this list. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_manifestARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| baseline | No | Optional baseline signed manifest for rug-pull drift detection. | |
| manifest | Yes | Signed ssx360.mcp-manifest.v1 to verify offline. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Range start Git ref (exclusive), typically origin/main. | origin/main |
| head | No | Range end Git ref (inclusive), e.g. HEAD or a PR head SHA. | HEAD |
| source | No | Envelope transport: hosted Scroll Gate (default, requires SSX360_API_KEY), local files, git notes, or bundle dir for offline verification. | hosted |
| notes_ref | No | Git notes ref when source=notes, default refs/notes/matrixscroll. | refs/notes/matrixscroll |
| workspace | No | Git repository root. Empty auto-detects from the working directory. | |
| bundle_dir | No | Directory containing exported envelope bundles when source=bundle. | |
| allow_empty | No | Explicitly accept an empty range. Defaults to false and the result remains labelled empty. | |
| require_mode | No | Optional policy require_mode filter applied to every commit in the range. | |
| deny_actor_types | No | Optional deny-list of provenance.actor_type values. | |
| trusted_keys_file | No | Optional JSON file of trusted public keys for the range check. | |
| require_actor_types | No | Optional allow-list of provenance.actor_type values. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v0.7.0- Changed
audit_export1 field changed- changed
Input schema / properties / format / descriptionPrevious 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)."
- Changed
verify_pr_range1 field changed- added
Input schema / properties / allow_emptyAdded value: +{ + "default": false, + "description": "Explicitly accept an empty range. Defaults to false and the result remains labelled empty.", + "title": "Allow Empty", + "type": "boolean" +}
4 tool updates
v0.6.2- Added
publish_notes - Added
status - Added
verify_envelope - Added
verify_pr_range
4 tool updates
v0.6.1- Removed
publish_notes - Removed
status - Removed
verify_envelope - Removed
verify_pr_range
5 tool updates
v0.4.3- Added
scan_mcp_server - Added
sign_agent_trace - Added
sign_mcp_manifest - Added
verify_agent_trace - Added
verify_mcp_manifest
9 tool updates
v0.4.2- Changed
audit_export10 fields changed- added
Input schema / properties / base / descriptionAdded value: +"Local-only: Git ref (exclusive) when exporting from git notes or on-disk envelopes." - added
Input schema / properties / end_dateAdded value: +{ + "default": "", + "description": "ISO 8601 UTC upper bound for audit records (inclusive), e.g. 2026-06-30T23:59:59Z.", + "title": "End Date", + "type": "string" +} - added
Input schema / properties / formatAdded 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" +} - added
Input schema / properties / head / descriptionAdded value: +"Local-only: Git ref (inclusive) when exporting from git notes or on-disk envelopes." - removed
Input schema / properties / include_guacRemoved value: -{ - "default": true, - "title": "Include Guac", - "type": "boolean" -} - added
Input schema / properties / include_verificationAdded 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" +} - added
Input schema / properties / output_dir / descriptionAdded value: +"Local-only: directory for exported files. Relative paths resolve under the repo root." - added
Input schema / properties / signer_idAdded 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" +} - added
Input schema / properties / start_dateAdded 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" +} - added
Input schema / properties / workspace / descriptionAdded value: +"Git repository root for local fallback export. Empty auto-detects from cwd."
- Added
connect_card - Changed
create_envelope7 fields changed- added
Input schema / properties / actor_type / descriptionAdded value: +"Provenance actor label recorded in the envelope, e.g. agent, human, or ci." - added
Input schema / properties / agent_scope / descriptionAdded value: +"Optional path or glob limiting what an agent commit claims to touch." - added
Input schema / properties / commit_sha / descriptionAdded value: +"Existing commit to envelope (full or short SHA). Empty uses the staged commit or HEAD depending on hook context." - added
Input schema / properties / save / descriptionAdded value: +"When true (default), persist the envelope under .matrixscroll/envelopes/." - added
Input schema / properties / sign / descriptionAdded value: +"When true (default), Ed25519-sign the envelope with the active key store." - added
Input schema / properties / tool / descriptionAdded value: +"Producing tool name recorded in provenance, e.g. cursor or claude-code." - added
Input schema / properties / workspace / descriptionAdded value: +"Absolute or relative path to the Git repository root. Leave empty to auto-detect from the current working directory."
- Added
list_envelopes - Changed
publish_notes4 fields changed- added
Input schema / properties / base / descriptionAdded value: +"Range start ref (exclusive) for envelopes to publish." - added
Input schema / properties / head / descriptionAdded value: +"Range end ref (inclusive) for envelopes to publish." - added
Input schema / properties / notes_ref / descriptionAdded value: +"Git notes ref to write, default refs/notes/matrixscroll." - added
Input schema / properties / workspace / descriptionAdded value: +"Git repository root. Empty auto-detects from the working directory."
- Added
sign_action - Changed
status1 field changed- added
Input schema / properties / workspace / descriptionAdded value: +"Git repository root. Empty auto-detects from the working directory."
- Changed
verify_envelope10 fields changed- added
Input schema / properties / check_expiryAdded 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" +} - added
Input schema / properties / commit_sha / descriptionAdded value: +"Commit SHA whose local envelope file should be verified offline." - added
Input schema / properties / deny_actor_types / descriptionAdded value: +"If set, fail verification when provenance.actor_type matches any denied value." - added
Input schema / properties / envelopeAdded 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" +} - added
Input schema / properties / envelope_path / descriptionAdded value: +"Optional explicit path to an envelope JSON file instead of the default ``.matrixscroll/envelopes/<sha>.json`` location." - added
Input schema / properties / require_actor_types / descriptionAdded value: +"If set, fail verification unless provenance.actor_type is in this list." - added
Input schema / properties / require_mode / descriptionAdded value: +"Policy filter on signature mode, e.g. emulated or hardware. Empty skips mode enforcement." - added
Input schema / properties / trusted_keysAdded 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" +} - added
Input schema / properties / trusted_keys_file / descriptionAdded value: +"Path to a JSON policy file listing trusted Ed25519 public keys." - added
Input schema / properties / workspace / descriptionAdded value: +"Git repository root. Empty auto-detects from the working directory."
- Changed
verify_pr_range12 fields changed- added
Input schema / properties / base / descriptionAdded value: +"Range start Git ref (exclusive), typically origin/main." - added
Input schema / properties / bundle_dir / descriptionAdded value: +"Directory containing exported envelope bundles when source=bundle." - added
Input schema / properties / deny_actor_types / descriptionAdded value: +"Optional deny-list of provenance.actor_type values." - added
Input schema / properties / head / descriptionAdded value: +"Range end Git ref (inclusive), e.g. HEAD or a PR head SHA." - added
Input schema / properties / notes_ref / descriptionAdded value: +"Git notes ref when source=notes, default refs/notes/matrixscroll." - added
Input schema / properties / require_actor_types / descriptionAdded value: +"Optional allow-list of provenance.actor_type values." - added
Input schema / properties / require_mode / descriptionAdded value: +"Optional policy require_mode filter applied to every commit in the range." - changed
Input schema / properties / source / defaultPrevious value: -"notes"New value: +"hosted" - added
Input schema / properties / source / descriptionAdded value: +"Envelope transport: hosted Scroll Gate (default, requires SSX360_API_KEY), local files, git notes, or bundle dir for offline verification." - changed
Input schema / properties / source / enumPrevious value: -[ - "local", - "notes", - "bundle" -]New value: +[ + "hosted", + "local", + "notes", + "bundle" +] - added
Input schema / properties / trusted_keys_file / descriptionAdded value: +"Optional JSON file of trusted public keys for the range check." - added
Input schema / properties / workspace / descriptionAdded value: +"Git repository root. Empty auto-detects from the working directory."
16 tool updates
v0.3.0- Removed
analyze_workspace - Added
audit_export - Removed
audit_trust_surface - Removed
benchmark_openhuman - Removed
brainstorm_workspace - Removed
build_usecase_blueprint - Added
create_envelope - Removed
plan_matrixscroll_rollout - Added
publish_notes - Removed
recommend_ecosystem - Removed
scaffold_editor_integration - Removed
scan_market_radar - Removed
scan_research_radar - Added
status - Added
verify_envelope - Added
verify_pr_range
10 tool updates
v0.2.6- First observed
analyze_workspace - First observed
audit_trust_surface - First observed
benchmark_openhuman - First observed
brainstorm_workspace - First observed
build_usecase_blueprint - First observed
plan_matrixscroll_rollout - First observed
recommend_ecosystem - First observed
scaffold_editor_integration - First observed
scan_market_radar - First observed
scan_research_radar
TDQS
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.
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.
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.
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
Related MCP Connectors
Deep security scans of repos you own from your editor: dependency CVEs, SAST, git-history secrets.
Audit GitHub repos for malicious and supply-chain code before you depend on them.
Security reviews for coding agents: diffs checked against your org policy and live infrastructure.
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Related MCP Servers
- FlicenseCqualityCmaintenanceAn 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.1001-
- AlicenseAqualityDmaintenanceActs as a production-grade safety layer for AI-assisted coding, monitoring Git hygiene, scanning for security issues (PII, secrets, injection), and enabling semantic history search.9MIT
- AlicenseNot gradedqualityBmaintenanceLocal-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
- AlicenseBqualityBmaintenanceA 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.27MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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