Skip to main content
Glama

ASPERN: counterparty checks for agents

How much of the way out we can see

exit_lifecycle_coverage
Read-onlyIdempotent

HOW MUCH OF THE WAY OUT WE CAN SEE, phase by phase, across every open vault. Getting out has four phases — a request filed, something set aside to claim, money that actually left, and an attempt that failed — and we read THREE. The fourth is on this answer anyway, with its reason: no vault state records a redemption somebody attempted and could not complete, so reading it needs every transaction sent to each contract and its receipt, and a zero there would be the most misleading figure available because it would say nobody was turned away. FOUR STATES PER PHASE and never collapsed into "missing", because two of them look identical and are not: exempt is a phase that CANNOT exist (a synchronous redeem settles in the transaction that asks, so nothing is ever filed and nothing is ever set aside) and subjectRefuses is a phase that EXISTS while the contract will not expose it (an ERC-7540 vault carrying neither standard getter — the holder is in that phase and cannot be told what became of their request). Only unread is work of ours. THERE IS NO SINGLE LIFECYCLE PERCENTAGE: the phases have different denominators, so averaging them would give a number no phase is answerable for. Free, because it is a statement about our own reach.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
metaNoHow current this answer is and what it was read from: `freshness` and the ages behind it. Present on every answer from this server, whatever the tool.
saysYesHow many phases we can read, which is thinnest, and why there is no single lifecycle number.
phasesYesOne per phase, in the order a depositor meets them: `key`, `label`, then `read`, `exempt`, `subjectRefuses` and `unread` each as {vaults, tvlUsd}. `readNoSizeRead` counts the vaults with the reading whose SIZE is unread, and where it equals `read.vaults` the capital share is NULL rather than 0 — the reading covers vaults we cannot weigh rather than vaults that are small, and a 0% would say the opposite; measured on the day this shipped, all 349 vaults whose filed requests we can read were in exactly that state. `byCountApplicable` and `byCapitalApplicable` divide by what the phase COULD exist for, the total less the exempt, and are NULL for a phase we do not read at all rather than 0% — a zero would read as a failure to try instead of a reading nobody can take. `unreadableBecause` is set only on such a phase and says why. `says` gives the four states in prose.
warningsNoAnything the server wants a caller to know about THIS answer before acting on it. Empty is the normal case and is not a guarantee.
cannotSeeYesWhat no figure here reaches, including who is in a queue as opposed to how much is in it.
measuredAtYesWhen these counts were taken. The readings behind them were taken earlier: each phase comes from a reader with its own cadence, so this says when they were COUNTED and never when the chain was read.
tvlTotalUsdNoCapital across them, in US dollars.
vaultsTotalYesOpen vaults, the widest denominator. Each phase states its own narrower one.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / phases / description
      Previous value: -"One per phase, in the order a depositor meets them: `key`, `label`, then `read`, `exempt`, `subjectRefuses` and `unread` each as {vaults, tvlUsd}. `byCountApplicable` and `byCapitalApplicable` divide by what the phase COULD exist for, the total less the exempt, and are NULL for a phase we do not read at all rather than 0% — a zero would read as a failure to try instead of a reading nobody can take. `unreadableBecause` is set only on such a phase and says why. `says` gives the four states in prose."New value: +"One per phase, in the order a depositor meets them: `key`, `label`, then `read`, `exempt`, `subjectRefuses` and `unread` each as {vaults, tvlUsd}. `readNoSizeRead` counts the vaults with the reading whose SIZE is unread, and where it equals `read.vaults` the capital share is NULL rather than 0 — the reading covers vaults we cannot weigh rather than vaults that are small, and a 0% would say the opposite; measured on the day this shipped, all 349 vaults whose filed requests we can read were in exactly that state. `byCountApplicable` and `byCapitalApplicable` divide by what the phase COULD exist for, the total less the exempt, and are NULL for a phase we do not read at all rather than 0% — a zero would read as a failure to try instead of a reading nobody can take. `unreadableBecause` is set only on such a phase and says why. `says` gives the four states in prose."
  2. Added

TDQS

A3.9/5.0
Behavior5/5

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

The description discloses critical behavioral limits beyond the annotations: the fourth phase cannot be read, a zero there would be misleading, and the four per-phase states are carefully distinguished. It explains why `exempt` and `subjectRefuses` are not the same as `unread`, which is exactly the kind of nuance an agent needs before interpreting the result.

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 purpose is front-loaded and every sentence contributes semantic content about phases and states. However, the heavy use of all-caps emphasis and dense long sentences makes it less scannable than it could be.

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 zero parameters, an output schema, and rich annotations, the description supplies the remaining conceptual scaffolding: four phases, three readable, four possible states per phase, and no single aggregate percentage. Nothing essential is missing for correct interpretation.

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?

The tool has zero parameters, so there is nothing for the description to clarify at the parameter level. The baseline score of 4 applies.

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 states a specific verb and resource: measuring how much of the exit lifecycle is visible, phase by phase, across every open vault. This is clearly distinct from listing actual exits, but it does not name a sibling tool to sharpen the boundary.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no mention of alternatives such as vault_exit_confidence or vault_exits, and no exclusion conditions. The only contextual cue is a note that the tool is free, which speaks to cost rather than invocation context.

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.

Resources