Skip to main content
Glama

Verify a Signed Print

verify_print
Read-onlyIdempotent

Verify a signed print locally with ECDSA P-256/SHA-256. Canonical bytes are pulse-index-v1\n\n<priceText or String(price)>\n\n. The public key ring is read from /api/index/v1/pubkey, cached for five minutes and refreshed at most once per 30 seconds on a failed check. A supplied kid selects only that exact key; old prints without kid are tried against the bounded published ring. valid=true authenticates only the canonical price fields, not kid, sig, quality, cadence, timestamps outside at, or other metadata. When the print carries a v2 block (pulse-index-v2), it is verified too: v2.valid=true means the signature over v2.canonical is valid AND every signed line (sources, tier, confidence, dispersionBps, interval, cadence, engine, price and the rest) matches the supplied fields; v2.signedFields are the signed values and v2.mismatches names any field that differs. recordValid=true and verificationScope=full-record require BOTH price and complete v2 record verification. metadataSigned equals recordValid. Require recordValid before trusting quality fields. A v1-only print has scope price-only, never verified metadata. Neither signature proves freshness or settlement suitability; indicative data must not be used for settlement. An invalid signature can mean an altered print or a key no longer published; it does not by itself prove tampering.

Input Schema

NameRequiredDescriptionDefault
atYesTimestamp from the print, unchanged
v2NoThe v2 block from the print, unchanged: it signs the whole record, quality fields included
kidNoSigning key identifier, when provided by the API
sigNo
kindNo
tierNo
gradeYes
priceYes
engineNo
symbolYesCrypto ticker symbol, e.g. BTC, ETH, SOL
assetIdNo
cadenceNo
sourcesNo
closeDayNo
intervalNo
priceTextNoExact signed price text, when provided by the API; preserve unchanged
signatureYesECDSA P-256 signature in base64
confidenceNo
dispersionBpsNo

Output Schema

NameRequiredDescriptionDefault
v2No
errorNo
validNoLegacy price-only signature check. Use recordValid for quality metadata.
checkedNo
keySourceNo
requestIdYesIdentifier for this MCP call; not a signed price field.
recordValidNoBoth signatures and every required v2 field verified. Does not prove freshness or settlement suitability.
metadataSignedNo
verifiedWithKidNo
verificationScopeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4/5.0
Behavior5/5

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

Far beyond the readOnly/idempotent annotations, it explains key ring caching (5 min TTL, 30 sec refresh on failure), kid selection semantics, bounded ring fallback for old prints, exactly what valid=true authenticates vs excludes, v2 record verification semantics, recordValid vs metadataSigned, and the important caveat that an invalid signature may not mean tampering. This is unusually rich behavioral disclosure.

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

Conciseness3/5

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

The description is long and dense, packed with important caveats, but it is not front-loaded; key verification scope warnings appear late. While every sentence conveys non-trivial information, the lack of structure (paragraphs/bullets) makes it harder to scan than necessary for an agent.

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 19-parameter schema, output schema, and nested v2 object, the description covers the verification logic and output semantics thoroughly. It could go further in explaining the many ancillary fields (cadence, interval, etc.), but it provides enough to invoke correctly and interpret results.

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 low (32%) across 19 parameters, but the description compensates selectively: it defines the canonical string components (symbol, priceText or String(price), at, grade), explains kid selection, and describes v2.signedFields/mismatches. However, many parameters (tier, engine, cadence, interval, confidence, dispersionBps, kind, closeDay, assetId) have no explanation in the description, leaving substantial gaps.

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 specifically states 'Verify a signed print locally with ECDSA P-256/SHA-256', naming the exact cryptographic operation and resource. It is clearly distinct from sibling tools like get_recorded_print or get_index_price, which fetch rather than verify.

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

Usage Guidelines3/5

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

Usage is implied by the verification scope and warnings ('require recordValid before trusting quality fields', 'indicative data must not be used for settlement'), but there is no explicit statement of when to choose this tool over alternatives or prerequisites for calling it.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.