Skip to main content
Glama

ASPERN: counterparty checks for agents

Judge a vault decision before capital moves (paid)

evaluate_vault_decision
Idempotent

Call this before an agent moves capital into or out of a vault, with the decision it is about to make: the vault, the amount, the MANDATE it must stay inside and the CLAIMS the decision rests on. It is judged against our stored due-diligence snapshot of that vault, deterministically and without a model, and comes back with a verdict: supported, conditional, human_review_required, insufficient_evidence (the snapshot is older than your mandate accepts, or a claim states as known what the snapshot records as unread), not_approved (a mandate limit is broken or a claim is contradicted) or out_of_coverage (we hold no snapshot, nothing charged). Every finding cites the snapshot field it rests on as dd:<digest>#<json pointer>, so it can be checked and cannot be invented, and requiredNextSteps says what would change the verdict. A claim the snapshot contradicts is told the DIRECTION of its error, never the true figure: the figures are in the due-diligence report. PAID: $2 a judgement over x402, or inside a plan that reads due diligence. FREE with dryRun: true (can it be judged, how old is our snapshot, what would be checked; no verdict) and FREE in full on the two public sample vaults, ethereum-sentora-rlusd-main-6dc58a and ethereum-1337-usdc-94643e. A supported verdict means the decision is consistent with our evidence and its own mandate. It is not advice and not a guarantee about the vault. Keep the digest: anybody can confirm at /v1/reports/{digest} that we issued that judgement unchanged.

Input Schema

NameRequiredDescriptionDefault
passNoA decision pass from this vault’s due-diligence report (its X-ASPERN-Decision-Pass header): 24 hours of judgements on that vault without paying again.
vaultYesThe vault slug, or an address we can resolve to one. `list_vaults` or `find_vaults` find a slug.
actionNoWhat the decision does. Default allocate.
claimsNoWhat the decision assumes, at most 20, each `{ field, value }` where `field` is a JSON pointer into the due-diligence document, e.g. /capital/withdrawableUsd, /capital/totalUsd, /subject/chain or /dimensions/0/level.
dryRunNoTrue for the free preview: whether we can judge it and what would be checked, without a verdict.
mandateNoThe limits the decision must stay inside. Each is optional and a limit left out is not checked: `maxPositionUsd`, `maxShareOfVault` (0..1 of the vault’s capital), `maxShareOfWithdrawable` (0..1 of what the vault declares withdrawable now), `allowedChains` (list), `maxDimensionLevel` (the worst of low, moderate, elevated, high, severe that any of the six risk dimensions may read), `humanApprovalAboveUsd`, `maxEvidenceAgeHours` (default 48).
amountUsdYesThe amount the decision moves, in US dollars.
rationaleNoFree text, carried with the decision and not read.

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.
saysYesDry run only: the answer in one sentence.
priceYesDry run only: the price of a judgement and the vaults where it is free.
vaultYesThe vault slug the decision resolved to.
checksYesDry run only: the checks this decision would get.
digestNoSHA-256 of this judgement, recorded so it can be verified at /v1/reports/{digest}.
dryRunYesTrue on the free preview.
paidByNofree-sample, report-pass (a pass from this vault’s due-diligence report) or this-call. Absent on a dry run.
sampleNoTrue on the two free sample vaults, where findings quote values.
verifyNoThe path that verifies the digest.
verdictYessupported, conditional, human_review_required, insufficient_evidence, not_approved or out_of_coverage. Null on a dry run of a vault we can judge.
findingsNoEach check that said something: `kind`, `weight` (hard, evidence, soft, none), `evidence` (dd:<digest>#<pointer>, or null where it concerns the packet alone) and `says`.
snapshotYesThe snapshot judged against: `digest`, `readAt` and `ageHours`. Null where we hold none.
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.
judgeableYesDry run only: whether we hold a snapshot to judge it against.
limitationsYesWhat this judgement does not cover. Always present.
requiredNextStepsNoWhat would have to change for a better verdict, one line per finding.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / required
      Added value: +[
      +  "vault",
      +  "verdict",
      +  "snapshot",
      +  "limitations",
      +  "dryRun",
      +  "judgeable",
      +  "checks",
      +  "price",
      +  "says"
      +]
  2. Changed2 schema fields changed
    • addedInput schema / properties / pass
      Added value: +{
      +  "description": "A decision pass from this vault’s due-diligence report (its X-ASPERN-Decision-Pass header): 24 hours of judgements on that vault without paying again.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / paidBy
      Added value: +{
      +  "description": "free-sample, report-pass (a pass from this vault’s due-diligence report) or this-call. Absent on a dry run.",
      +  "type": "string"
      +}
  3. Added

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare openWorldHint, idempotentHint and non-destructive; the description adds substantial context beyond them — deterministic/no-model judging, $2 x402 pricing, no charge on out_of_coverage, free dryRun and sample vaults, and citation format dd:<digest>#<pointer>. However it never reconciles readOnlyHint=false with what actually changes server-side (payment, judgement record), and rate/plan-limit behaviour is only implied.

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?

Front-loaded with the triggering condition, then verdict semantics, then pricing — a sensible order with no filler. It is dense and long, leaning on capitalized emphasis (MANDATE, CLAIMS, DIRECTION), which costs readability but each clause still carries 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?

For a paid, deterministic, nested-object tool, the description covers what the agent needs: when to call, what is charged, what the verdict values mean, how findings are cited and verifiable, and how requiredNextSteps guide remediation. With an output schema present, no further return-value prose is owed.

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?

Schema coverage is 100%, so baseline is 3; the description earns above baseline by explaining the semantic role of mandate and claims — claims are checked against the snapshot, and a claim asserting as known what the snapshot records as unread produces insufficient_evidence. It also ties the vault parameter to list_vaults/find_vaults for slug resolution.

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?

States a specific verb and resource: it judges a proposed vault capital decision against a stored due-diligence snapshot and returns a verdict. The verdict taxonomy makes the output shape concrete. It does not, however, distinguish itself from adjacent siblings such as vault_check, vault_assessment, check_action or evaluate_action, so an agent must infer which judgment tool to pick.

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?

Gives a clear triggering condition ('call this before an agent moves capital into or out of a vault') and explains free paths (dryRun, sample vaults) versus the paid path. It stops short of naming alternative siblings or stating when a different tool (e.g. vault_assessment) is the better choice.

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