Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Added "agent_business", "agent_dependencies", "check_action" and 1 more; changed the definition of "find_agents" and "vaults_earned" (20 tools before, 24 now)
⟨92 unchanged words⟩ is not the same as never having worked. EVERY ROW CARRIES `subject`, WHICH IS WHAT WE CAN POSITIVELY SAY IT IS, with the evidence under it. Measured over all 3,077 paid addresses: **1,377 agent, 38 marketplace, 1,662 unknown**. `agent` means we saw agent-protocol work (ACP, Olas mech, Masumi) or saw it HIRE as well as be hired. `marketplace` means many paid it and it paid many, both above a stated floor. `unknown` is the largest bucket and is a real answer, not a failure: it means the evidence does not separate an agent from something that merely sells. READ THIS BEFORE FILTERING: a catalogue listing does NOT make a subject an API service. Agents sell priced endpoints too — this platform sells four — so a listing says it sells over HTTP and nothing about which kind of seller. `api-service` is therefore in the vocabulary and is currently UNREACHABLE: separating it would need evidence that a subject does NOT do agent work, and that is an absence, since 86% of these addresses pay nobody on a rail we read and paying from a second wallet looks identical to buying nothing. Nothing is inferred from a zero and no self-description is read, so a listing calling itself an autonomous agent moves nothing.
⟨61 unchanged words⟩ ONE dimension asked for, never a composite score. Each row carries `subject`: { type, evidence[], alsoShows[], says }. `evidence` names each thing we SAW and, in `supports`, which type it is evidence for — or null where the observation is real and separates nothing, which is the case for a catalogue listing. So `unknown` WITH evidence is the normal shape here and means \"we saw these things and they do not settle it\", never \"we saw nothing\". `alsoShows` carries the types a subject also shows evidence for, because they are not exclusive and dropping one would make the label more confident than the evidence.","items":{"type":"object"}, ⟨6 unchanged words⟩
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 ⟨44 unchanged words⟩ less, at a median of thirty points short. 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 ⟨77 unchanged words⟩
{"properties":{"advertisedBand":{"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"},"comparable":{"description":"Vaults where the two sides can be set against each other at all. This is the population every share here is over.","type":"integer"},"items":{"description":"name, slug, venue,
Does this agent have a business (paid) — Does this agent have a BUSINESS, and can any of it be demonstrated? Six questions an investor, a marketplace or an operator actually asks, each answered separately: are the addresses paying it really independent customers; is revenue growing or shrinking; how much is repeat custom; how many of those payments can be shown to have bought anything; what does it cost to run and to whom; and if it has several addresses, can the link be DEMONSTRATED or is it an unconfirmed assumption. Measured on two live agents: one takes $2,388 a month from 4,772 payers of whom 97% are repeat, the other $932,414 …
What several agents rest on at once (paid) — If your firm relies on several external agents, what do they rest on AT ONCE? Give it two to twenty-five addresses and it finds the parties more than one of them pays. THE PRODUCT IS THE DISTINCTION, NOT THE JOIN: finding that three agents paid the same address tells you almost nothing — on our rails one address is paid by 71 agents across 4,100 payments and another by three agents once each, and calling both "shared" makes the second sound like the first. Four tests must ALL hold before the word dependency is used: repeated (more than one payment, because a single payment is an event), one-w…
One check before you sign (paid) — CALL THIS BEFORE YOUR AGENT SIGNS ANYTHING THAT MOVES MONEY. One request instead of five: it reads the counterparty record, decodes the calldata you are about to sign, looks up the seller’s own catalogue listing, runs an unpaid 402 handshake with the endpoint, and applies a published policy — and then, which is the point, compares them WITH EACH OTHER. The losses an agent actually suffers live between those readings and no single one of them can see them: the bytes paying an address you never checked, so a spotless counterparty record is about a party this transaction does not pay; an UNLIMIT…
Could you get your money back out (paid) — Before you put capital in, ask what evidence there is that you could get a PARTICULAR amount back out. Every other reading about a vault is about return or about risk of loss; this is about the practical question a holder has, and it is always about a size: "can I get out" has no answer, "can I get $2m out of a vault with $400k free and 25,941 settled withdrawals behind it" has several. Six readings, each with its own verdict and the question it answers in a holder’s own words: has anybody actually got money out, is there anything in it now, could YOUR amount leave, is somebody queued ahead o…
Changed the definition of "check_service_endpoint", "evaluate_action", "vault_check" and 1 more
⟨253 unchanged words⟩ our reading rather than absent from the world. For a CATALOGUED x402 resource that no agent registered, read `unpaidProbe`: our own unpaid 402 handshake, which is free for both sides and says whether the endpoint is still there and what it charges now against a catalogue entry that may be months old. Free.
⟨558 unchanged words⟩ service is down.","type":"string"},"unpaidProbe":{"description":"OUR OWN unpaid x402 handshake with this URL, which is the free availability test for an endpoint no agent registered. x402 requires a server to answer an unpaid request with 402 and its requirements BEFORE doing any work, so the first half of every real client’s handshake costs nothing and proves three things: the host is there, it still speaks x402, and what it asks for NOW. `outcome` is one of quoting, open, refusing, gone, error, unreachable — `open` means it answered 200 unpaid, so it is up and not charging on this path. `quoted.amount` is in the asset’s own smallest unit and is NOT scaled to dollars, because nothing in the requirements document says how many decimals the asset has. Read it beside `price`, which is what the catalogue recorded whenever that entry was written; a price that has moved is a finding neither one shows alone. Null means we have not run this probe here, which is not a finding about the endpoint.","type":["object","null"]}
Changed the definition of "check_service_endpoint", "counterparty_bulk", "counterparty_history" and 4 more
Call this before connecting to aservice, the way preflight_payment is called before sending money.service. Give it the http(s) URL of ⟨151 unchanged words⟩ than a guarantee anybody made. `manifest` and `changes`answercarry thequestion a registry cannotseries: a registration says what an agent offers now, andonly a series ofthe readingssayssay what it offered LAST WEEK. Store `manifest.hash` and ⟨66 unchanged words⟩
Changed the definition of "vault_exits"
{"properties":{"slug":{"description":"Thevaultvault’s slug,asorlist_vaultsits 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 andfind_vaultsareturn200it.everywhere else.","type":"string"}},"required": ⟨3 unchanged words⟩
Changed the definition of "agent_changes" and "vault_check"
⟨18 unchanged words⟩ ,"type":"boolean"},"count":{"description":"Rows IN THIS ANSWER, which is one per field that moved and not one per agent. Where `capped` is true it is the page size and not the total, so it is a floor on how much moved and never the whole of it.","type":"integer"},"from":{"description" ⟨80 unchanged words⟩
⟨46 unchanged words⟩ the risk band, the components that apply, who runs it, and `keys`: whorunscan
Added "agent_changes" and "vaults_earned"; changed the definition of "counterparty_bulk" and "counterparty_check" (18 tools before, 20 now)
Check up to fifty addresses in one call, each with its observations, AND what the set shares underneath:fortheanpartiesagentthat two oramoredeskofholdingthemapay.listThat
Changed the definition of "counterparty_check" and "find_agents"
⟨28 unchanged words⟩ pay back, how concentrated its custom is, WHAT IT ITSELF RESTS ON under `restsOn` (how many parties it pays and how much of its spending goes to the largest of them), how its ACP jobs ended, whether its advertised service answers, and when it was last paid. Free.TwoThree limits to repeat whenever quoting it: independent ⟨20 unchanged words⟩ fund many addresses that never pay each other;andan all-time record says nothing about whether the ⟨7 unchanged words⟩ ever paid have not been paid in 90days.days; and `restsOn` counts every party this address has PAID rather than purchases from identified sellers, so a recipient there has not been shown to supply anything, and `restsOn.suppliers` of zero means it has paid nobody on a rail we read, never that it depends on nobody. Takes an EVM address, a Cardano payment ⟨6 unchanged words⟩
Changed the definition of "check_service_endpoint", "counterparty_check", "counterparty_history" and 11 more
⟨142 unchanged words⟩ "object","null"]},"endpoint":{"description":"The URL as we read it back, so a typo is visible before anything is concluded from the answer.","type":"string"},"handshake":{"description" ⟨364 unchanged words⟩ ["object","null"]},"says":{"description":"The reading in one sentence. An endpoint we have never probed says so here: that is our gap, not evidence the service is down.","type":"string"}},"required":[" ⟨3 unchanged words⟩
⟨11 unchanged words⟩ ,"type":"object"},"address":{"description":"The address as we read it, normalised. Compare it with what you sent before acting on the answer.","
Added "inspect_payment", "monitor_subject" and "record_receipt" (15 tools before, 18 now)
Read the transaction you are about to sign — Call this with the CALLDATA you are about to sign, before you sign it. Every other check here asks whether an address is worth dealing with; this asks whether the transaction is the one you think it is, and the two catch different losses. No amount of reputation makes the recipient in the bytes match the recipient on your screen, and a spotless counterparty record says nothing about an UNLIMITED APPROVAL granted to it, which is not a payment at all but a standing permission that outlives the transaction. It reads three calls — transferWithAuthorization, approve, transfer — and REFUSES to gues…
Be told when the answer about an address changes — Ask to be told when the answer about an address CHANGES. The dimensions are the ones the counterparty check already answers, so this is that same reading on a schedule rather than a second opinion; what it adds is the comparison. The first run records a reading and reports nothing — there is nothing yet to compare against, and a first reading dressed up as news is the thing this avoids. Idempotent per subject: calling it again edits the watch rather than creating a second. An unknown dimension or policy is REFUSED rather than dropped, because a watch that quietly ignores half of what you aske…
Record what you did, so it can be checked later — Call this AFTER you have paid an address or called a tool, to put what you did on the record. Until now this platform answered "should I" and never heard what happened, which is the difference between a lookup and a control layer: a receipt lets the next question about this subject be asked against a record instead of a guess, and lets a verdict we gave be read back against what followed. `reference` is YOUR evidence, a transaction hash or the digest of a signed payload, and we store it WITHOUT verifying it. `outcome` comes back null and stays null until something actually reads what happened…
Added "evaluate_action", "evidence_for", "list_policies" and 1 more (11 tools before, 15 now)
Weigh one action against a named policy — Call this when you are about to DO something and need one answer you can act on: pay an address, connect to an MCP server, call a tool, or put capital into a vault. Unlike a reputation score, the answer depends on the AMOUNT, the ACTION, the POLICY you name and how much we actually read — so the same address can be `allow` for $5 and `abstain` for $5,000. Four decisions. `allow` means nothing we could check objects, up to `maxAmountUsd`, and is NOT a statement that the action is safe: nothing here sees what it is for or what you agreed. `review` means something we READ does not match, and `re…
Every edge we hold about one subject — Everything we hold about one subject, as edges, each carrying where it came from. Use it when you need to explain a decision rather than just make one, or to see what is MISSING before you act. Every edge has `source`, `observedAt` (when the world was in that state), `asOf` (when we read it — a fresh read of a stale fact is not a fresh fact), a `confidence` that names what it is confident IN, its own `coverage`, and the `method` that established it. Edges come in three kinds and are NEVER summed: `declared` is the subject speaking about itself, `observed` is our reading, `derived` is arithmet…
The policies a decision can be made under — The policies evaluate_action can be run under, in full: every rule, its id and the sentence it checks. Published deliberately, including to the agents being evaluated — a rule nobody can read is a rule nobody can correct. Free.
Changed the definition of "check_service_endpoint" and "preflight_payment"
⟨92 unchanged words⟩ has changed under the people relying on it. It also answers the three things a buyer wants BEFORE calling a paid endpoint, as separate fields and never folded into one number: `price` is the seller’s own published amount, asset, network and payee; `handshake` says whether it answered without credentials, which is the nearest observable thing to “can I try it”; and `measured` is how many of how many days answered and how slow it was, which is what we read rather than a guarantee anybody made. `manifest` and `changes` answer the question a registry cannot: a registration says what an agent offers, and only a series of readings says what it offered LAST WEEK. Store `manifest.hash` and compare it next time to detect an endpoint that changed under you. Two things this is NOT: an unreachable endpoint ⟨46 unchanged words⟩
{"properties":{"changes":{"description":"Every move we saw in what it offers, oldest first, each with `added`, `removed`, a protocol-version move where there was one, and the two hashes. `at` is the day we SAW the change, not the day it happened: we probe daily and cannot place it more precisely. An empty array where we read a list and it never moved; a tool list we could NOT read is skipped entirely rather than folded in as an empty one, which would invent a “removed everything” out of our own gap.","items":{"type":"object"},"type":"array"},"Added "find_vaults"; changed the definition of "counterparty_bulk", "counterparty_check", "counterparty_history" and 4 more (10 tools before, 11 now)
{"properties":{"paymentchecked":{"description":"What was paid and how it settled. Priced perHowcall,manynotaddressesperwereaddress.read.","type":"objectinteger"},"resultsitems":{"description":"One entry per address ⟨15 unchanged words⟩ type":"object"},"type":"array"}
Added "list_vaults", "operator_check" and "vault_check" (7 tools before, 10 now)
Find the vault you mean — The vaults we read, so a caller holding a name rather than a slug can find the one it means. Free. Absence from this list means we do not read that vault, never that it does not exist.
Who runs the money, and how much is theirs — The question that follows vault_check: who runs the money, and how much of it is their own. Free. Read `ownShare` with its limits, which travel inside it: the leader’s holding is readable on Hyperliquid and Drift only — 584 of 3,394 open vaults — so elsewhere it is ABSENT and not zero, the median describes the strategies we can read rather than the manager, and a large own-share is evidence of alignment and never proof, because the address running a vault can be a treasury or a custodian holding for other people. `cannotSee` names whatever of that applies here. Take the slug from vault_check’…
What the record shows about one vault — Before putting capital into a vault: what the record shows about it, rather than what the venue says about itself. The headline is what a holder ACTUALLY EARNED set against the advertised rate — the one figure a depositor cannot get from the venue — with the risk band, the components that apply, and who runs it. Free. Read `earned.comparability` before quoting the ratio: a realised rate drawn from too short or too sparse a window is not a comparison with the advertised one, and `cannotSee` lists everything we could not establish for this vault rather than leaving it as an absence you have to …
Changed the definition of "check_service_endpoint", "counterparty_bulk", "counterparty_check" and 4 more
before
—after
Check a service endpoint before connectingbefore
—after
{"properties":{"declaredBy":{"description":"Identities that declare this endpoint, and the tools each one claims. Their claim, not our verification.","items":{"type":"object"},"type":"array"},"drift":{"description":"Declared but not observed, and the reverse. Null where either side is unknown — subtracting silence would manufacture a finding.","type":["object","null"]},"endpoint":{"type":"string"},"history":{"description":"Up to fourteen readings. One bad day and a dead service look identical in a single reading.","items":{"type":"object"},"type":"array"},"latest":{"description":"The most recent probe: outcome, latency, and what it answered with.","type":["object","null"]},"outcomes":{"description":"What each outcome word means, so a caller never has to guess.","type":"object"},"says":{"type":"string"}},"required":["says"],"type":"object"}Certificate recorded, valid to 2026-12-21
Authorization not required
Added "check_service_endpoint" and "identify" (5 tools before, 7 now)
Call this before connecting to a service, the way preflight_payment is called before sending money. Give it the http(s) URL of an MCP or A2A endpoint and it says who declares it, whether our daily probe reached it, what it answered with, and how many of the last readings answered. It keeps three things apart and never merges them: what an identity DECLARES the endpoint offers, what a probe OBSERVED, and the readings behind that. Read `drift` where present — tools declared but not answering is the signal that an endpoint has changed under the people relying on it. Two things this is NOT: an un…
Call this FIRST whenever you hold something other than a wallet address. Give it a transaction hash, an http(s) URL, a hostname or an ERC-8004 registration number and it says which party that is, with the evidence for the link, so the other tools here can then be called with the address. It never picks between candidates: where a hostname or id matches several parties, `address` comes back null and every candidate is listed, because choosing one would be an identification the evidence does not support. A link through a hostname or a declared endpoint is the subject’s own claim, never proof th…
Unknown → Live
First tool surface recorded: 5 tools (server version 1.0.0)
https://aspern.org/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 20 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨180 unchanged words⟩ :"string"},"type":"array"},"notApplicable":{"description":"Rules this PROPOSAL does not raise, each with `why` and what to send to have it checked. Distinct from `missingEvidence`, which is a gap in our record: a payment naming no `resource` has no listing to be found in, so those rules do not apply and do not lower coverage. Send `resource` and two more checks run, both decisive.","items":{"type":"object"},"type":"array"},"policy":{"description":"The policy applied: ⟨129 unchanged words⟩
⟨277 unchanged words⟩ and each applying component in its own words. READ `bandRange` BEFORE ACTING ON `band`: the score renormalises over what read, so it is what the vault scores if the unread part behaves like the read part. `bandRange` fills the unread weight with its best and its worst and names the band at each end — on one vault, moderate at 27 but anywhere from low (15) to high (60) on the 45% we cannot read. It collapses onto the band itself when every applying component was read, so a narrow range is a fact and not a formality. Null on a record not yet rescored, which `measured` tells apart from fully measured.","type":"object"},"says":{ ⟨56 unchanged words⟩
⟨124 unchanged words⟩ waited in, or a gate that refusedthem — sothem.anAn empty registermeanstherefore has FOUR readings, not two: “nobody withdrew”OR, “nobody could”, “a reader asked and`cannotSee`foundsaysnothingso.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.
⟨22 unchanged words⟩ :"string"},"type":"array"},"capitalAsOf":{"description":"When `tvlUsd` was read. Same name and same column as `vault_check` uses.","format":"date-time","type":["string","null"]},"declaredAsOf":{"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"]},"declaredWithdrawableUsd":{"description":"A LEVEL at this ⟨11 unchanged words⟩ "type":["number","null"]},"flowsNewestAnywhereAt":{"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"]},"flowsNewestAt":{"description":"The newest movement of any kind we hold for this vault.","format":"date-time","type":["string","null"]},"haveFlowHistory":{"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"},"largestEverAt":{"description":"When `largestEverUsd` was taken ⟨45 unchanged words⟩ "type":["number","null"]},"lastReadAt":{"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"]},"readBy":{"description":"Which reader last asked, e.g. `vault-flows`, `morpho-flows`, `solana-flows`.","type":["string","null"]},"readToBlock":{"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"
⟨146 unchanged words⟩ finding about these addresses AND about our reach. WHY readOnlyHint IS false: this tool reads and writes nothing in our store, but calling it WITH an x402 payment authorisation transfers USDC from the caller to us and records a receipt, so the call is not free of consequence and an agent must not make it speculatively. Called without an authorisation it changes nothing and answers with the price.
⟨61 unchanged words⟩ we keep, not one the chain gives away. WHY readOnlyHint IS false: this tool reads and writes nothing in our store, but calling it WITH an x402 payment authorisation transfers USDC from the caller to us and records a receipt, so the call is not free of consequence and an agent must not make it speculatively. Called without an authorisation it changes nothing and answers with the price.
⟨27 unchanged words⟩ tool, or put capital into a vault.Unlike a reputation score, theThe answer depends on the AMOUNT, the ACTION, ⟨125 unchanged words⟩
⟨107 unchanged words⟩ is worse than no watch. Needs a key. WHY readOnlyHint IS false: this call writes a row in our store on behalf of the caller, so a second identical call is not free of consequence.
{"destructiveHint":falsetrue,"idempotentHint":true,"openWorldHint":false,"readOnlyHint" ⟨11 unchanged words⟩
⟨125 unchanged words⟩ readable only by the key that wrote it. WHY readOnlyHint IS false: this call writes a row in our store on behalf of the caller, so a second identical call is not free of consequence.
Before putting capital into a vault: what the record shows aboutit, rather than what the venue says about itself.it. The headline is what a holder ACTUALLY EARNED set against the advertised rate— the one figure a depositor cannot get from the venue —, with the risk band, the components that ⟨106 unchanged words⟩
⟨68 unchanged words⟩ "type":["object","null"]},"keys":{"description":"Who can move the money, read from the contract. `holds` is multisig, eoa, contract or timelock; `signaturesRequired` is how many a multisig needs; `actsAlone` is true where ONE party can act with no second signature, which covers a single key AND a multisig with a threshold of one — read that rather than the word multisig. `canBeHalted` is null where neither pause function answered, which may mean nobody can stop the vault or may mean its pause is behind a name we do not read — do not read a null as nobody. `notice.basis` is the field to check before trusting a delay: `measured` means we read one, `not-a-timelock` means the controller we read is not a timelock and we do not separately search for one behind it, `unread` means we did not ask. Null means we have not read this vault’s control at all, which is not the same as nobody controlling it.","type":["object","null"]},"name":{"description":"The vault’s name as ⟨108 unchanged words⟩
⟨57 unchanged words⟩ not per address.","type":"object"},"shared":{"description":"The parties two or more of the given addresses pay, most shared first, each with how many of yours pay it and which ones. `available: false` with a `capability` name where the plan does not carry it. An empty list means no party is paid by more than one of them on a rail we read, which is a finding about them and about our reach: a model, an endpoint or a host shared between them is a dependency no payment rail shows.","type":"object"}},"required":["items"],"type":"object"}
⟨28 unchanged words⟩ pay back, how concentrated its custom is, WHETHER THOSE INDEPENDENT PAYERS ARE INDEPENDENT OF EACH OTHER under `independence`, WHAT IT ITSELF RESTS ON under `restsOn` (how ⟨152 unchanged words⟩
⟨128 unchanged words⟩ never verification.","type":"object"},"independence":{"description":"payers, linked, viaParties, largestGroup: payers of this address that share an OBSCURE third party with another of its payers. This is the test of `dealings.independent`, which counts payers that never paid it back and has never been proof they are different parties. A party paid by two to ten addresses in all counts; a hub paid by more does not, because two agents both paying a hub have shown only that the hub is popular. EVIDENCE OF A LINK, NEVER PROOF OF ONE OPERATOR — two payers paying one small service are two customers of that service. `groups` names which payers and through what and needs the `independence.test` capability; where it is withheld, `capability` says so. A linked count of zero is not proof they are unrelated: one owner funding addresses that never touch each other again leaves nothing for this to find.","type":["object","null"]},"limits":{"description":"What this answer cannot ⟨268 unchanged words⟩
What moved in the agent record — What moved in the agent record, across every agent, since a date. The counterparty check answers what is true about one address NOW; this answers what changed, for all of them, which is the question anybody holding a list asks next. One row per FIELD that moved, not per address: an agent whose dealings and concentration both moved is two facts, and folding them would make you diff the answer to work out what was meant. Roughly one agent in five moves on an ordinary day, out of about 2,900 tracked. A day with no row for an address is a day it did not move, never a day nobody looked. The record…
What depositors kept, against what was advertised — What depositors actually KEPT, against what their vault advertised. 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. Measured today: of the vaults with a comparison, four in five gave their depositors less, at a median of thirty points short. 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…
⟨244 unchanged words⟩ "type":["object","null"]},"restsOn":{"description":"suppliers, payments, spentUsd, largestShare and recent.{suppliers90,largestShare90}: every party this address has PAID. NOT the mirror of `dealings` — a dealing is a sale and needs a seller on the other end, while a payment out counts whoever receives it, so a recipient here may be a relayer, a settlement route or a customer being paid back. `largestShare` is null below three suppliers, where it could only be a half or a whole. Zero suppliers means it has paid nobody on a rail we read, never that it depends on nobody: a model, an endpoint, a host and a key are dependencies no payment rail shows.","type":["object","null"]},"services":{"description":"Callable services it declares ⟨41 unchanged words⟩
⟨40 unchanged words⟩ whether it pays its own payers back, how spread its own SPENDING is (`spreadSuppliers`, the one filter here about what the agent rests on rather than who rests on it), and how recently it was paid. Free. An ⟨22 unchanged words⟩
⟨151 unchanged words⟩ dealings, usd, completion, recent, paidBack, largestShare, counterparties, serving, suppliers, largestSupplierShare orcounterparties.spent. The last three order by what an agent rests on rather than by who rests on it. There is no \"best\" — nothing here has earned the right to rank.","type":"string"},"spreadSuppliers":{"description":"Only agents where no single party takes more than half of what the agent itself SPENDS. The other direction from the concentration of its custom: an agent with forty payers and one supplier looks diversified on every other figure here and is one supplier away from stopping. An agent with too few suppliers to have a share passes, because too few to measure is not evidence of concentration.","type":"boolean"}},"type":"object"}
{"properties":{"address":{"description":"The address this history is for, normalised and read back.","type":"string"},"change":{"description" ⟨68 unchanged words⟩
⟨87 unchanged words⟩ ,"type":"object"},"limits":{"description":"What a decision here is and is not. `allow` means no rule objected under this policy at this coverage, which is not a statement that the action is safe.","type":"string"},"maxAmountUsd":{"description" ⟨159 unchanged words⟩ },"type":"array"},"says":{"description":"The decision in one sentence, naming the rules that drove it. Written to be shown to whoever authorises the action.","type":"string"}},"required":[" ⟨7 unchanged words⟩
⟨49 unchanged words⟩ ,"type":"object"},"limits":{"description":"What this graph cannot contain. Declared, observed and derived are different kinds of fact and are never added together; `counts` keeps them apart for the same reason.","type":"string"},"lookedForAndMissing":{"description" ⟨17 unchanged words⟩ ,"type":"array"},"says":{"description":"What the evidence amounts to, in one sentence. Never a verdict: this tool reports edges and leaves the conclusion to the caller.","type":"string"},"subject":{"description":"What was asked about, read back. Where we resolved it to something else, this is the resolved form.","type":"string"},"subjectKind":{"description":"What we took the subject to BE. `unknown` means we could not classify it, so the empty edge list below is our failure to look rather than a finding about the subject.","enum":["address","endpoint","vault" ⟨10 unchanged words⟩
{"properties":{"asOf":{"description":"When the record behind these rows was last rebuilt. Null means nothing in the answer carries a date, which is a gap in our reading rather than a fact about the agents.","format":"date-time","type":["string", ⟨39 unchanged words⟩
⟨60 unchanged words⟩ ,"type":"array"},"limits":{"description":"What decoding a payment establishes. It reads what the transaction SAYS it will do; it does not simulate it and cannot tell you the recipient is honest.","type":"string"},"recipient":{"description" ⟨14 unchanged words⟩ ["string","null"]},"selector":{"description":"The four-byte function selector the calldata begins with, where we could read one. Null means the payload is not a call we can decode, which is not evidence that it is bad.","type":["string","null"]}," ⟨67 unchanged words⟩
⟨18 unchanged words⟩ ,"type":"array"},"default":{"description":"The slug of the policy used when a call names none. Read it rather than assume: the default is an operator setting and can change without any tool changing.","type":"string"},"says":{"description":"What these policies are and are not. They are rules a decision is checked against, never a ranking of the agents evaluated under them.","type":"string"}},"required":[" ⟨3 unchanged words⟩
⟨44 unchanged words⟩ "string","null"]},"id":{"description":"The watch, for changing or ending it later.","type":"string"},"policy":{"description":"The policy its verdict is read against. Null where the watch names none and the default applies; read `says` for which that is.","type":["string","null"]},"says":{"description":"What this watch will and will not tell you. It reports a CHANGE in what we hold, which is not the same as a change in the world.","type":"string"},"subject":{"description":"The address being watched, read back so a watch cannot be set on the wrong one.","type":"string"}},"required":[" ⟨5 unchanged words⟩
{"properties":{"agentManaged":{"description":"How many of their open strategies we have reason to call agent-managed. A COUNT of strategies, never a share of the capital.","type":"integer"},"cannotSee":{"items" ⟨2 unchanged words⟩ ,"type":"array"},"capitalUsd":{"description":"Capital across every open strategy we read for this operator. Null where none of them can be priced.","type":["number","null"]},"name":{"description":"The operator’s name as published. Their words, not an identity we verified.","type":"string"},"ownShare":{"description" ⟨23 unchanged words⟩ ["object","null"]},"says":{"description":"The operator in one sentence, including what we cannot see about them — own-capital share is readable on two venues only.","type":"string"},"strategies":{"description ⟨17 unchanged words⟩
⟨86 unchanged words⟩ ,"type":"array"},"limits":{"description":"What this check cannot establish, in full. Quote it whenever you quote the verdict: a clean answer here is the absence of an objection, never a guarantee about the payment.","type":"string"},"listing":{"description" ⟨52 unchanged words⟩ ,"type":"array"},"proposal":{"description":"Your payment as we understood it: payee, amount, chain and resource. Null where too little was given to form one. Check it before reading the verdict, which is about THIS proposal and no other.","type":["object","null"]},"received ⟨12 unchanged words⟩ ","type":"object"},"says":{"description":"The verdict in one sentence, naming what did not match. Written to be shown to a person deciding whether to go ahead.","type":"string"},"verdict":{"description ⟨93 unchanged words⟩
⟨62 unchanged words⟩ ,"type":"string"},"subject":{"description":"The address the receipt is about, read back, so a receipt cannot be filed against the wrong party.","type":"string"}},"required":["id ⟨3 unchanged words⟩
⟨16 unchanged words⟩ ,"type":"array"},"capitalUsd":{"description":"What the vault holds, in US dollars, at `capitalAsOf`. Null where we cannot price the underlying — unread, never zero.","type":["number","null"]},"earned ⟨25 unchanged words⟩ "object","null"]},"name":{"description":"The vault’s name as the venue publishes it. Their words, and two venues may use the same one.","type":["string","null"]},"operator ⟨31 unchanged words⟩ ,"type":"object"},"says":{"description":"The finding in one sentence. Where we cannot say what a holder earned, it says that plainly rather than reporting the venue’s own figure as ours.","type":"string"},"slug":{"description":"The vault this answer is about, read back so it cannot be attached to the wrong one.","type":"string"}},"required":[" ⟨5 unchanged words⟩
⟨43 unchanged words⟩ "number","null"]},"largestEverAt":{"description":"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.","format":"date-time","type":["string","null"]},"largestEverUsd ⟨19 unchanged words⟩ "number","null"]},"says":{"description":"What actually left, against what the vault advertises as withdrawable, in one sentence.","type":"string"},"slug":{"description":"The vault this register is for, read back so an answer cannot be attached to the wrong vault.","type":"string"},"tvlUsd":{"description":"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.","type":["number","null"]}," ⟨33 unchanged words⟩
What actually left a vault — 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 …
⟨107 unchanged words⟩ you agreed. `look-first` means at least one thing we could READ does not match, and the findings saywhich.which; a check that could not run never produces it, it produces `cannot-say`. `cannot-say` means we did not read enough to ⟨42 unchanged words⟩
⟨12 unchanged words⟩ "null"]},"findings":{"description":"WhatEverydidchecknotthatmatchran, each with the record behindit.it and its own `tone` and `kind`. NOT only the ones that objected: a `tone` of `good` is a check that MATCHED, so reading this array’s length as a count of problems overstates them. Bucket on `kind` — `fact` and `signal` were established, and `unknown` means we could not see, which never counts as something standing against the payment.","items":{"type":"object"}, ⟨102 unchanged words⟩ too little was read to have an opinion, and must never be read as the first. It is also the answer when nothing contradicted the payment but a check could not run, because reporting our own gap as a clean result would be the worst of the three.","enum":["nothing-against-it","look-first"," ⟨25 unchanged words⟩
{"properties":{"acp":{"description":"How itsACPjobs ended, where it has any.","type":["object","null"]},"address":{"type":"string"},"dealingsalsoHere":{"description":"The same address on the capital side — a vault or an operator — with the check to call. A match on the address, never an identification of the party.","type":["integerobject","null"]},"independentdealings":{"description":"Counterpartiesrails,thatchains,paidcounterparties,itindependent,andlargestShare,werefirstPaid,neverlastPaid.paid`independent`back.means no payment BACK on the rails we read — NOT prooftheythe payers are different parties:, since one owner can fund many addresses.","type":"integerobject"},"largestShareformat":{"description":"HowWhatconcentratedkinditsofcustomaddress this is,0andtowhat1.we read for it.","type":["numberobject"},"nullidentity"]:{"description":"Registrations it holds. Claims, never verification.","type":"object"},"lastPaidlimits":{"description":"AnWhatall-timethisrecordanswersayscannotnothingtellaboutyou.whetherQuotetheitagentwithstilltheworks.numbers.","formattype":"date-timestring"},"masumi":{"type":["stringobject","null"]},"saysmech":{"type":"stringobject"},"servingobservations":{"description":"WhetherThe findings, each with itsadvertisedevidenceserviceclassansweredandouritsprobe.ownNullwords.whereRead these first.","items":{"type":"object"},"type":"array"},"paidFor":{"description":"What itadvertiseswasnone.paid for, in the subject’s own words.","type":["booleanobject","null"]},"services":{"description":"Callable services it declares, and how many answered our probe.","type":"object"},"x402":{"type":"object"}},"required":["address","saysformat","observations","limits"],"type":"object"}
{"properties":{"address":{"type":"string"},"change":{"description":"What moved across the window, and over which dates.","type":["object","null"]},"items":{"description":"One entry per day: dealings, independent payers, concentration, delivery.","items":{"type":"object"},"type":"array"},"keptSince":{"description":"The day we began ⟨24 unchanged words⟩ this call took money.","type":"object"},"series":{"description":"One entry per day: dealings, independent payers, concentration, delivery.","items":{"type":"object"},"type":"array"}},"required":["address"],"type":"object"}
{"properties":{"agentsasOf":{"descriptionformat":"Matching agents, ordered by the ONE dimension asked for, never a composite score.date-time","items":{"type":["objectstring"},"type":"arraynull"]},"saysfilters":{"description":"Whatthe filterwasdidapplied,andreadthatback,anincludingabsentwhataddressawasfloorneverexcluded.","type":"object"},"items":{"description":"Matchingpaidagents,onorderedabyrailtheweONEreaddimensionratheraskedthanfor, neverhavingaworked.composite score.","items":{"type":"stringobject"},"total":{"type":"integerarray"}},"required":["agentsitems"],"type":"object"}
⟨37 unchanged words⟩ :"object"},"type":"array"},"check":{"description":"The free check to call next with the address.","type":["string","null"]},"evidence":{"description":"Why each link is ⟨15 unchanged words⟩ :"object"},"type":"array"},"format":{"description":"What kind of address it is and what we read for it.","type":"object"},"given":{"description":"What you sent, as sent.","type":"string"},"kinds":{"description":"What each reading would have meant, so an unrecognised identifier is not a dead end.","type":"object"},"looksLike":{"description":"What the identifier was read as: address, transaction,urlendpoint,hostnamehost, agent-id orregistration.unrecognised.","type":"string"},"says":{ ⟨28 unchanged words⟩
{"properties":{"itemsdata":{"description":"Each with its slug, ⟨6 unchanged words⟩ type":"object"},"type":"array"},"fields":{"description":"Which fields this tool kept from the endpoint’s own rows, and where the rest are.","type":"string"}},"required":["data"],"type":"object"}
{"properties":{"checksRuncheck":{"description":"WhichThechecksfreeactuallycounterpartyran.checkAforfieldthisyouaddress.","type":["string","null"]},"findings":{"description":"Whatleftdidoutnotismatch,aeachcheckwiththatthedidrecordnot.behind it.","items":{"type":"stringobject"},"type":"array"},"findingslimits":{"type":"string"},"listing":{"description":"WhatThedidseller’snotownmatchcatalogue entry for the resource,eachwherewiththere is one. The sharpest check available.","type":["object","null"]},"observations":{"description":"Every check that ran, including therecordonesbehindthatit.could not: a field you left out appears here as a check that did not run, rather than as silence.","items":{"type":"object"},"type":"array"},"proposal":{"type":["object","null"]},"received":{"description":"What you told us, read back, so a typo is visible.","type":"object"},"says":{"type":"string"},"verdict" ⟨36 unchanged words⟩ look-first","cannot-say"],"type":"string"},"verdicts":{"description":"What each verdict word means, so a caller never has to guess.","type":"object"}},"required":["verdict","observations","says"],"type":"object"}
Find a vault by what it has done — Find a vault by what it has DONE rather than what it is called. Free. The filter worth knowing is `earned`: `short` returns the vaults where a holder earned LESS than the venue advertises — there are 18 — and `beating` the ones where they earned more. It matches only vaults whose realised return is COMPARABLE with an advertised one, 349 of 3,394 open vaults; a venue that quotes nothing or a share price that never moves is excluded rather than counted as in-line, so a short list here means few comparable and not few that performed. Call vault_check on a slug for the full answer.
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Check a service endpoint before connecting"}before
—after
Check up to fifty addresses in one call (paid)before
—after
{"properties":{"payment":{"description":"What was paid and how it settled. Priced per call, not per address.","type":"object"},"results":{"description":"One entry per address given, in the order given, each with its own observations and its own limits.","items":{"type":"object"},"type":"array"}},"required":["results"],"type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false,"title":"Check up to fifty addresses in one call (paid)"}before
—after
What the chain records about one addressbefore
—after
{"properties":{"acp":{"description":"How its ACP jobs ended, where it has any.","type":["object","null"]},"address":{"type":"string"},"dealings":{"type":"integer"},"independent":{"description":"Counterparties that paid it and were never paid back. NOT proof they are different parties: one owner can fund many addresses.","type":"integer"},"largestShare":{"description":"How concentrated its custom is, 0 to 1.","type":["number","null"]},"lastPaid":{"description":"An all-time record says nothing about whether the agent still works.","format":"date-time","type":["string","null"]},"says":{"type":"string"},"serving":{"description":"Whether its advertised service answered our probe. Null where it advertises none.","type":["boolean","null"]}},"required":["address","says"],"type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"What the chain records about one address"}before
—after
One agent’s record day by day (paid){"properties":{"address":{"description":"The agent whose record you want day by day. An EVM, Cardano or Solana address.","type":"string"},"days":{"description":"1 to 365, default 90. The history begins the day we started keeping it, so a longer window does not reach further back than that.","type":"number"}},"required": ⟨3 unchanged words⟩
before
—after
{"properties":{"address":{"type":"string"},"keptSince":{"description":"The day we began keeping this. Nothing before it exists, at any window.","format":"date","type":"string"},"payment":{"description":"What was paid and how it settled. Present because this call took money.","type":"object"},"series":{"description":"One entry per day: dealings, independent payers, concentration, delivery.","items":{"type":"object"},"type":"array"}},"required":["address"],"type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false,"title":"One agent’s record day by day (paid)"}before
—after
Find agents by what the record shows⟨30 unchanged words⟩ ,"type":"number"},"minDealings":{"description":"Fewest dealings on the rails we read, all time.","type":"number"},"minIndependent":{"description":"Fewest counterparties that paid it and were never paid back. The closest thing here to \"has real custom\".","type":"number"},"noTwoWay":{"description":"Exclude agents that also pay their own payers, which can be one owner moving money between their own addresses.","type":"boolean"},"rail":{"description" ⟨5 unchanged words⟩ ,"type":"string"},"registered":{"description":"Only agents holding a registration in a registry we read. A registration is a claim, never a verification.","type":"boolean"},"serving":{"description":"Only agents whose declared service answered our last probe. An agent that declares none is excluded, not failed.","type":"boolean"},"sort":{"description":"One named dimension: independent, dealings, usd, completion, recent, paidBack, largestShare or counterparties. There is no \"best\" — nothing here has earned the right to rank.","type":"string"}},"type":"object"}
before
—after
{"properties":{"agents":{"description":"Matching agents, ordered by the ONE dimension asked for, never a composite score.","items":{"type":"object"},"type":"array"},"says":{"description":"What the filter did, and that an absent address was never paid on a rail we read rather than never having worked.","type":"string"},"total":{"type":"integer"}},"required":["agents"],"type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Find agents by what the record shows"}before
—after
Identify the party behind an identifierbefore
—after
{"properties":{"address":{"description":"The party, or null where the evidence names more than one. Never a guess between candidates.","type":["string","null"]},"candidates":{"description":"Every party the identifier could be, where it is not one.","items":{"type":"object"},"type":"array"},"evidence":{"description":"Why each link is claimed, and whether it is the subject’s own claim or something we read.","items":{"type":"object"},"type":"array"},"kind":{"description":"What the identifier was read as: address, transaction, url, hostname or registration.","type":"string"},"says":{"description":"The answer in words, including the difference between \"no such thing\" and \"we do not read that chain\".","type":"string"}},"required":["says"],"type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Identify the party behind an identifier"}before
—after
Weigh one payment before sending itbefore
—after
{"properties":{"checksRun":{"description":"Which checks actually ran. A field you left out is a check that did not.","items":{"type":"string"},"type":"array"},"findings":{"description":"What did not match, each with the record behind it.","items":{"type":"object"},"type":"array"},"says":{"type":"string"},"verdict":{"description":"`nothing-against-it` means every check ran and none objected — NOT that the payment is safe. `cannot-say` means too little was read to have an opinion and must never be read as the first.","enum":["nothing-against-it","look-first","cannot-say"],"type":"string"}},"required":["verdict","says"],"type":"object"}before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Weigh one payment before sending it"}