Skip to main content
Glama

ASPERN: counterparty checks for agents

What depositors kept, against what was advertised

vaults_earned
Read-onlyIdempotent

What depositors actually KEPT, against what their vault advertised. READ population BEFORE QUOTING ANY SHARE FROM THIS. The comparison covers only the vaults where we hold BOTH an advertised rate and a realised one, which is a narrow and lopsided set, usually dominated by one venue: population.largestVenue names it and population.concentration says how much of the set it is. A share from here is a statement about those vaults, never about DeFi and never about this whole site. Not the vault’s return, which is what a unit held throughout would have earned: this is read from the depositor register, per vault, and set against the venue’s own quote scaled to how long those depositors have held. How many gave their depositors less, and by how much, is in each answer’s population, counted when it is served; quote it from there, never from this description. ADVERTISED RATES ARE DECIMAL FRACTIONS and some are in the hundreds of per cent: 0.042 is 4.2% and 4.2 is 420%. Those survive a stated band of -1 to 5 (-100% to 500%); advertisedBand.refused says how many readings the band threw out, and advertisedIsHigh marks each row above 100% so a remarkable figure cannot be mistaken for a misplaced decimal. TWO THINGS TO REPEAT WHENEVER QUOTING IT. A depositor who withdrew everything is not in the register and the ones who left after losing are exactly the ones a return figure most needs, so this reads BETTER than the truth rather than worse; and gapPoints is percentage POINTS, not per cent, because a depositor cannot lose more than they put in. The aggregate and the widest gaps are free; the rest of the list needs the earned.detail capability and withheld says how many are missing.

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.
itemsYesname, slug, venue, advertised, advertisedIsHigh, kept, gapPoints, medianDaysHeld. Widest gap first.
limitsYesWhat this cannot tell you, including the survivorship inside the register. Quote it with the numbers.
byVenueNoFREE whatever tier you hold: coverage per protocol, largest basis first, each with `vaults`, `depositorsMeasured`, `basisUsd` and `comparable`. The population here is concentrated on the venues that publish a per-depositor profit, and reading the headline without this is reading a number about those venues as though it were about the market.
returnedNoRows in this answer.
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.
withheldNoRows the plan does not carry. Zero with earned.detail.
comparableYesVaults where the two sides can be set against each other at all. This is the population every share here is over.
populationNoWho the comparison is actually about: listed, comparable, byVenue, largestVenue, concentration and isOneVenue. `listed` is how many survived the advertised band and are in `byVenue`; `comparable` is the job own count. They are different counts and must never be divided into one another. Where isOneVenue is true the figure is a reading about that one venue in a market-wide sentence.
losingShareNoMeasured depositors who are down, as a decimal fraction.
alsoMeasuredNoTHE OTHER YIELD MEASURE, named so you do not quote one as the other. This tool answers what the depositors STILL IN a vault kept, read from the depositor register, which needs a per-depositor profit and so covers one venue. `performance.realised` on a vault answers what a unit held THROUGHOUT would have earned, read from the share price, and covers far more. A vault can deliver its advertised rate to a unit held all year while the people actually in it are down, because they arrived at different times.
survivorshipNoFREE. Every figure comes from depositors STILL IN the vault: `basis` is `current-holders-only`, `exitedDepositorsIncluded` is false, and `direction` is `reads-better-than-the-truth`, the likely direction and not a guarantee (`directionCertain` is false): some depositors leave after a gain. Somebody who withdrew everything is not in the register, and the ones who left after losing money are exactly the ones a return figure most needs. No size is published for the bias, because an unmeasured correction presented as a figure would be worse than the bias itself.
advertisedBandNominDecimal, maxDecimal, refused and means. Advertised rates are decimal fractions, so a value above 1 is above 100%; readings outside the band are refused rather than counted as zero.
shortOfAdvertisedNoOf those, how many gave their depositors less.
shortOfAdvertisedShareNoThe headline share, as a decimal fraction. Never quote it without `population` beside it.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / survivorship / description
      Previous value: -"FREE. Every figure comes from depositors STILL IN the vault: `basis` is `current-holders-only`, `exitedDepositorsIncluded` is false, and `direction` is `reads-better-than-the-truth`. Somebody who withdrew everything is not in the register, and the ones who left after losing money are exactly the ones a return figure most needs. No size is published for the bias, because an unmeasured correction presented as a figure would be worse than the bias itself."New value: +"FREE. Every figure comes from depositors STILL IN the vault: `basis` is `current-holders-only`, `exitedDepositorsIncluded` is false, and `direction` is `reads-better-than-the-truth`, the likely direction and not a guarantee (`directionCertain` is false): some depositors leave after a gain. Somebody who withdrew everything is not in the register, and the ones who left after losing money are exactly the ones a return figure most needs. No size is published for the bias, because an unmeasured correction presented as a figure would be worse than the bias itself."
  2. Changed5 schema fields changed
    • addedOutput schema / properties / alsoMeasured
      Added value: +{
      +  "description": "THE OTHER YIELD MEASURE, named so you do not quote one as the other. This tool answers what the depositors STILL IN a vault kept, read from the depositor register, which needs a per-depositor profit and so covers one venue. `performance.realised` on a vault answers what a unit held THROUGHOUT would have earned, read from the share price, and covers far more. A vault can deliver its advertised rate to a unit held all year while the people actually in it are down, because they arrived at different times.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / byVenue
      Added value: +{
      +  "description": "FREE whatever tier you hold: coverage per protocol, largest basis first, each with `vaults`, `depositorsMeasured`, `basisUsd` and `comparable`. The population here is concentrated on the venues that publish a per-depositor profit, and reading the headline without this is reading a number about those venues as though it were about the market.",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / meta
      Added value: +{
      +  "description": "How 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.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / survivorship
      Added value: +{
      +  "description": "FREE. Every figure comes from depositors STILL IN the vault: `basis` is `current-holders-only`, `exitedDepositorsIncluded` is false, and `direction` is `reads-better-than-the-truth`. Somebody who withdrew everything is not in the register, and the ones who left after losing money are exactly the ones a return figure most needs. No size is published for the bias, because an unmeasured correction presented as a figure would be worse than the bias itself.",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / warnings
      Added value: +{
      +  "description": "Anything the server wants a caller to know about THIS answer before acting on it. Empty is the normal case and is not a guarantee.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  3. Changed5 schema fields changed
    • addedOutput schema / properties / advertisedBand
      Added value: +{
      +  "description": "minDecimal, maxDecimal, refused and means. Advertised rates are decimal fractions, so a value above 1 is above 100%; readings outside the band are refused rather than counted as zero.",
      +  "type": "object"
      +}
    • changedOutput schema / properties / comparable / description
      Previous value: -"Vaults where the two sides can be set against each other at all."New value: +"Vaults where the two sides can be set against each other at all. This is the population every share here is over."
    • changedOutput schema / properties / items / description
      Previous value: -"name, slug, advertised, kept, gapPoints, medianDaysHeld. Widest gap first."New value: +"name, slug, venue, advertised, advertisedIsHigh, kept, gapPoints, medianDaysHeld. Widest gap first."
    • addedOutput schema / properties / population
      Added value: +{
      +  "description": "Who the comparison is actually about: listed, comparable, byVenue, largestVenue, concentration and isOneVenue. `listed` is how many survived the advertised band and are in `byVenue`; `comparable` is the job own count. They are different counts and must never be divided into one another. Where isOneVenue is true the figure is a reading about that one venue in a market-wide sentence.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / shortOfAdvertisedShare
      Added value: +{
      +  "description": "The headline share, as a decimal fraction. Never quote it without `population` beside it.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
  4. Added

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses the capability gate and withheld count, the survivorship bias (depositors who withdrew are absent and the ones who left after losses are exactly the ones a return figure needs, so the figure reads BETTER than truth), the -1 to 5 advertised-rate band with `advertisedBand.refused` and `advertisedIsHigh`, and that `gapPoints` is percentage points rather than per cent. This is exactly the kind of caveat an agent cannot infer from structured fields.

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 most consequential warning (read `population` first) is correctly front-loaded, and the survivorship-bias and unit caveats earn their place. But roughly 350 words for a zero-parameter tool, with repeated meta-instructions ('TWO THINGS TO REPEAT WHENEVER QUOTING IT', 'quote it from there, never from this description') and shouty all-caps, means several sentences restate the same scoping point instead of adding information.

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?

An output schema exists, so return shape need not be described, and everything else an agent needs is present: gating, the refused/band mechanics, the denominator bias, the units of `gapPoints`, and the concentration warning. For a 0-param, read-only, open-world tool this is complete.

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 takes zero parameters, so baseline 4 applies; there is nothing to disambiguate on input. The description instead spends its effort on output-field semantics (`population`, `advertisedBand.refused`, `advertisedIsHigh`, `gapPoints`, `withheld`), which is beyond this dimension's remit but reinforces correct quoting.

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 opening states the resource and comparison precisely: depositor-realised outcomes against advertised rates, per vault. It explicitly contrasts itself with the vault's own return ('what a unit held throughout would have earned'), which is what a sibling like vault_assessment would report, so an agent can discriminate. It loses a point because the verb is buried in an all-caps headline and subsequent sentences are warnings rather than a crisp statement of what is returned.

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

Usage Guidelines4/5

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

Strong operational guidance: read `population` before quoting, treat any share as scoped to `population.largestVenue`/`concentration` and never to DeFi or the site, and know that the aggregate and widest gaps are free while the rest needs the earned.detail capability with `withheld` reporting the shortfall. The alternative tool is only implied ('Not the vault's return...') rather than named, so it falls short of an explicit when-to-use-this-vs-that routing rule.

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