Skip to main content
Glama

What actually left a vault

vault_exits
Read-onlyIdempotent

Before putting capital somewhere, ask what has actually LEFT it. Every liquidity figure elsewhere is a level at an instant — how much could be withdrawn right now. This is the other half: withdrawals that SETTLED, over 7, 30 and 90 days, with the largest single exit we have ever recorded and the day it happened. Measured on the largest vault we read: $52.8M declared withdrawable against $265.8M actually withdrawn over thirty days, so a holder reading only the declared figure would badly underestimate what the vault has been able to pay. A LEVEL and a FLOW are never divided by one another and this returns no ratio between them. We see withdrawals that settled and NOT an attempt that reverted, a queue somebody waited in, or a gate that refused them. An empty register therefore has FOUR readings, not two: “nobody withdrew”, “nobody could”, “a reader asked and found nothing at all”, and “no reader has ever asked”. haveFlowHistory separates the first two from the last two and lastReadAt separates those — null there means nobody has ever looked, so the register is not a weak reading of the vault but the absence of one. haveFlowHistory separates the third from the first two, and where it is false every figure is NULL rather than zero. Every answer dates itself: capitalAsOf and declaredAsOf say when each level was read, flowsNewestAt how far our movement history reaches, and windowsEndAt the instant the windows count back from. For a capital decision the age of the record is part of the record. Free.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYesThe vault’s slug, or its contract address — either resolves. Until 2026-10-08 this route was the one of eight that took the slug only, so an agent holding an address got a 404 here and a 200 everywhere else.
exitAmountUsdNoA position to weigh the exit against, in US dollars, e.g. 500000. Turns "can we READ the withdrawable figure" into "could I get THIS much back out". The verdict is deliberately named for what was observed rather than for a promise: `covered-now` means the amount is inside what the vault declares withdrawable AT THE MOMENT WE READ IT, and the answer carries when that was and what it cannot see — queues, notice periods, failed attempts, other holders leaving at the same time.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
saysYesWhat actually left, against what the vault advertises as withdrawable, in one sentence.
slugYesThe vault this register is for, read back so an answer cannot be attached to the wrong vault.
readByNoWhich reader last asked, e.g. `vault-flows`, `morpho-flows`, `solana-flows`.
tvlUsdNoWhat the vault holds, for scale beside the withdrawals. A LEVEL, never to be divided into the flow figures in `windows`. Null means unread, not empty.
windowsYesFLOWS over 7, 30 and 90 days plus all time: count, total, largest single, most recent. Never a share of the level. Every figure is NULL where `haveFlowHistory` is false, because a zero would claim we looked. Each window carries `window` as well as `days`: `7d`, `30d`, `90d` or `allTime`. `days: 0` is the all-time one and reads as a zero-day window if you only look at the number, which is why the name is there.
cannotSeeYesWhat this register structurally cannot contain, so an empty one is never read as an easy exit.
lastReadAtNoWhen a reader last ASKED about this vault, found or not — which `flowsNewestAt` cannot tell you. Eighteen withdrawals with the newest eleven months ago is a vault that went quiet OR a vault we stopped reading, and only this separates them. NULL MEANS NO READER HAS EVER ASKED: the vault is outside what our flow readers cover, so an empty register is not a weak reading of it, it is the absence of one.
capitalAsOfNoWhen `tvlUsd` was read. Same name and same column as `vault_check` uses.
readToBlockNoHow far through the chain that pass actually got. Not the same as `lastReadAt`: a reader that ran a minute ago but is 400,000 blocks behind looked recently at an old part of the chain, and only this says so. Null where the reader has no block to report.
declaredAsOfNoWhen `declaredWithdrawableUsd` was read. NULL means we hold no stamp for it rather than that it is fresh — 180 of the 809 declared levels we hold come from a writer that does not stamp them.
exitCapacityNoPresent ONLY where you sent `exitAmountUsd`, and null otherwise. TWO READINGS, NEVER AVERAGED: `now` is `covered-now`, `above-declared` or `unknown` against what the vault declares withdrawable at this instant — THEIR figure, an instant and not a promise, and not a queue or a notice period; `everThisLarge` is whether a single withdrawal at least that size has ever been recorded here, and it is NULL rather than false where we hold no flow history, because never having seen one is not evidence it cannot happen. `shareOfDeclared` is the position as a share of that declared figure, null where there is nothing to divide by. `cannotSee` names what no withdrawable figure contains: queues, notice periods, failed attempts, and other holders leaving at the same moment as you.
windowsEndAtYesThe instant every window counts back from, so the 7-day and 30-day figures share an edge and either can be reproduced. It is a window boundary and NOT a freshness claim: the ages of the data are `capitalAsOf`, `declaredAsOf` and `flowsNewestAt`, and `meta.freshness` is computed from those.
flowsNewestAtNoThe newest movement of any kind we hold for this vault.
largestEverAtNoWhen `largestEverUsd` was taken out. An old date beside a large figure is the whole point: it says the exit was possible then, not now.
largestEverUsdNoSomebody actually got this much out, on `largestEverAt`. Evidence about the past, never a promise about now.
haveFlowHistoryYesWhether we hold ANY movement for this vault, of either direction. FALSE means the empty register is our silence and not the vault’s: it says nothing about whether anybody got out. Of 3,672 open vaults on 2026-10-10, 2,673 are in this state.
flowsNewestAnywhereAtNoThe newest movement we hold for ANY vault. Read beside the field above it tells a quiet vault from a stopped reader, which is what every zero here turns on.
declaredWithdrawableUsdNoA LEVEL at this instant. Null where we cannot read it, which is not zero.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / exitAmountUsd
      Added value: +{
      +  "description": "A position to weigh the exit against, in US dollars. Turns \"can we READ the withdrawable figure\" into \"could I get THIS much back out\", which the auditor who asked for it rightly called a different question.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / exitCapacity
      Added value: +{
      +  "description": "Present ONLY where you sent `exitAmountUsd`, and null otherwise. TWO READINGS, NEVER AVERAGED: `now` is `covered-now`, `above-declared` or `unknown` against what the vault declares withdrawable at this instant — THEIR figure, an instant and not a promise, and not a queue or a notice period; `everThisLarge` is whether a single withdrawal at least that size has ever been recorded here, and it is NULL rather than false where we hold no flow history, because never having seen one is not evidence it cannot happen. `shareOfDeclared` is the position as a share of that declared figure, null where there is nothing to divide by. `cannotSee` names what no withdrawable figure contains: queues, notice periods, failed attempts, and other holders leaving at the same moment as you.",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  2. Changed11 schema fields changed
    • addedOutput schema / properties / capitalAsOf
      Added value: +{
      +  "description": "When `tvlUsd` was read. Same name and same column as `vault_check` uses.",
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / declaredAsOf
      Added value: +{
      +  "description": "When `declaredWithdrawableUsd` was read. NULL means we hold no stamp for it rather than that it is fresh — 180 of the 809 declared levels we hold come from a writer that does not stamp them.",
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / flowsNewestAnywhereAt
      Added value: +{
      +  "description": "The newest movement we hold for ANY vault. Read beside the field above it tells a quiet vault from a stopped reader, which is what every zero here turns on.",
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / flowsNewestAt
      Added value: +{
      +  "description": "The newest movement of any kind we hold for this vault.",
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / haveFlowHistory
      Added value: +{
      +  "description": "Whether we hold ANY movement for this vault, of either direction. FALSE means the empty register is our silence and not the vault’s: it says nothing about whether anybody got out. Of 3,672 open vaults on 2026-10-10, 2,673 are in this state.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / lastReadAt
      Added value: +{
      +  "description": "When a reader last ASKED about this vault, found or not — which `flowsNewestAt` cannot tell you. Eighteen withdrawals with the newest eleven months ago is a vault that went quiet OR a vault we stopped reading, and only this separates them. NULL MEANS NO READER HAS EVER ASKED: the vault is outside what our flow readers cover, so an empty register is not a weak reading of it, it is the absence of one.",
      +  "format": "date-time",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / readBy
      Added value: +{
      +  "description": "Which reader last asked, e.g. `vault-flows`, `morpho-flows`, `solana-flows`.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / readToBlock
      Added value: +{
      +  "description": "How far through the chain that pass actually got. Not the same as `lastReadAt`: a reader that ran a minute ago but is 400,000 blocks behind looked recently at an old part of the chain, and only this says so. Null where the reader has no block to report.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / windows / description
      Previous value: -"FLOWS over 7, 30 and 90 days: count, total, largest single, most recent. Never a share of the level."New value: +"FLOWS over 7, 30 and 90 days plus all time: count, total, largest single, most recent. Never a share of the level. Every figure is NULL where `haveFlowHistory` is false, because a zero would claim we looked."
    • addedOutput schema / properties / windowsEndAt
      Added value: +{
      +  "description": "The instant every window counts back from, so the 7-day and 30-day figures share an edge and either can be reproduced. It is a window boundary and NOT a freshness claim: the ages of the data are `capitalAsOf`, `declaredAsOf` and `flowsNewestAt`, and `meta.freshness` is computed from those.",
      +  "format": "date-time",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "slug",
      -  "windows",
      -  "says",
      -  "cannotSee"
      -]New value: +[
      +  "slug",
      +  "windows",
      +  "says",
      +  "cannotSee",
      +  "windowsEndAt",
      +  "haveFlowHistory"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / slug / description
      Previous value: -"The vault slug, as list_vaults and find_vaults return it."New value: +"The vault’s slug, or its contract address — either resolves. Until 2026-10-08 this route was the one of eight that took the slug only, so an agent holding an address got a 404 here and a 200 everywhere else."
  4. Changed5 schema fields changed
    • addedOutput schema / properties / largestEverAt / description
      Added value: +"When `largestEverUsd` was taken out. An old date beside a large figure is the whole point: it says the exit was possible then, not now."
    • addedOutput schema / properties / largestEverAt / format
      Added value: +"date-time"
    • addedOutput schema / properties / says / description
      Added value: +"What actually left, against what the vault advertises as withdrawable, in one sentence."
    • addedOutput schema / properties / slug / description
      Added value: +"The vault this register is for, read back so an answer cannot be attached to the wrong vault."
    • addedOutput schema / properties / tvlUsd / description
      Added value: +"What the vault holds, for scale beside the withdrawals. A LEVEL, never to be divided into the flow figures in `windows`. Null means unread, not empty."
  5. Added

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources