Skip to main content
Glama

Server Details

GreenlandAI: world graph & map (companies, deposits, commodities), marketplace, wallets, proofs.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
48.6% over 28 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.4/5.0

Scored across 43 tools

Disambiguation4/5

Most tools have clearly distinct scopes (e.g., billing_quote vs billing_attempts vs joules_balance, or entity_state vs entity_history vs entity_change), but several overlaps create risk: `hops` is an explicit deprecated duplicate of `relationships`, `mapdata` is closed yet present, and the map/place reads (`nearby`, `look_from`, `map_viewport`, `place_index`) are easy to confuse without reading descriptions closely.

Naming Consistency3/5

All names use snake_case and are grouped by domain prefixes (market_, oracle_, contribute_, entity_, look_), which is readable. However, the set mixes noun phrases (`balance_proof`, `entity_state`), verb phrases (`look_at`, `contribute_relations`), and bare nouns (`company`, `deposit`, `nearby`), so there is no predictable verb_noun convention throughout.

Tool Count2/5

At 43 tools, this is far beyond the 3–15 typical well-scoped MCP surface. The platform is genuinely broad (graph, imagery, marketplace, oracle, wallet, proofs, contributions), but the count is heavy and includes non-functional or deprecated entries (`mapdata` closed, `hops` deprecated), which makes the set harder to navigate than it needs to be.

Completeness4/5

The surface covers the domain well: graph reads, satellite imagery and change detection, entity state/history, marketplace request/provide/match/settle, oracle registration/assessment, wallet transfer and funding, billing, proofs, and contribution workflows. Minor gaps remain, such as no direct company search/list or marketplace request cancellation, but core workflows are present.

Available Tools

43 tools
balance_proofInspect

Cryptographic inclusion proof for YOUR wallet balance in the latest hourly transparency attestation (GET /wallet/balance-proof): leaf hash, Merkle sibling path, root, the anchoring BSV txid, and verification (the steps to recompute the root and check it on chain). Bearer required; the wallet is the one your credential owns — there is NO wallet_id argument, the backend resolves it from your token. Anchoring is batched exactly like transparency_latest: bsv_txid may read "pending" until this attestation's OP_RETURN transaction is broadcast (usually within minutes; longer when the network is busy) — not-yet-batched is not unanchored; for the most recent anchored root read transparency_latest.last_anchored.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

billing_attemptsAInspect

YOUR OWN CHARGE RECORD — what this wallet was charged for, attempt by attempt, so you can verify your bill without asking us (relays GET /api/v1/billing/attempts; own wallet only — derived from your credential, never a parameter). Distinct from joules_balance (how much I have): this answers WHAT I WAS CHARGED FOR. Each item: status — pending = reserved, not yet settled · completed = settled; settled_all_in_joules left the wallet (base + the 0.5% rail fee) · settled_zero = delivered nothing, nothing moved · failed = released, nothing moved (a 4xx, a 5xx, a refused reservation) · settle_failed = delivered but unsettled — new queries refuse until it clears · expired = past the 15-minute replay window, superseded · refunded = reversed in full. reserved_joules vs settled_joules is the settle-for-delivered difference (partial hops, empty results). Match attempt_id to metering.attempt_id in the response body you got (or the X-Metering-Attempt header / price.attempt_id; look_at's image result carries it as metering_attempt). limit 1-200 (default 50), offset for paging. Bearer or agent key required.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countNo
itemsNo
statusesNo
wallet_idNo

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it does so thoroughly: it discloses the HTTP relay, authentication requirement, that results are wallet-scoped, the fee behavior (0.5% rail fee), each status meaning, settlement semantics, and the replay window. This is far beyond what the schema alone would reveal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every section earns its place: the opening line front-loads the core purpose, the status legend is essential for interpreting results, and the param/auth details are necessary for correct invocation. No filler or redundant restatement of the tool name.

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 annotations and a moderate two-param schema, the description is complete: it covers inputs, output semantics, status values, payment-fee behavior, cross-referencing to other tools via `attempt_id`, authentication, and paging. The presence of an output schema means return-value shape is already handled, so nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates by documenting `limit` as 1-200 with default 50 and `offset` as paging. This adds range and behavioral meaning the JSON schema does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/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: it lists the wallet's own charge record, attempt by attempt, and explicitly distinguishes itself from `joules_balance` (how much I have vs what I was charged for). It also names the underlying endpoint, making the resource unmistakable.

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

Usage Guidelines5/5

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

It says when to use the tool ('verify your bill without asking us') and explicitly calls out the key alternative (`joules_balance`) with the decision condition. It also clarifies scope ('own wallet only — derived from your credential, never a parameter'), which prevents misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

billing_quoteAInspect

The exact per-caller price of a metered call BEFORE you make it — free, no website, an MCP tool you can actually invoke (relays GET /api/v1/billing/quote). path = the API path the call would hit — e.g. "/api/v1/relationships" (the relationships tool), "/api/v1/look.from" (look_from), "/api/v1/map.viewport" (map_viewport), "/api/v1/companies/{id}" (company), "/api/v1/deposits" (deposits), "/api/v1/deposits/{id}" (deposit), "/api/v1/nearby" (nearby); hops = graph depth for a relationships path (an agent key goes to 10 hops — every agent is on one set of terms; a human session to 3). Priced for YOU. Read joules_all_in — the TRUE debit (base joules + rail_fee_joules, the 0.5% rail surcharge); fund that, not the base. Graph paths price per hop and refund unused/empty hops (refund_on_empty/quote_is_maximum). Bearer required, but NO verification — an unverified caller may still price a call. For "/api/v1/site.reconstruction" pass the site (lat + lng, or entity_type + id; optional radius_m, as_of): the quote returns the tier that site gets (decided now, before any charge) and THAT tier's price — without a site it lists both tier prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
latNo
lngNo
hopsNo
pathYes
as_ofNo
radius_mNo
entity_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pegNo
usdNo
hopsNo
pathNo
tierNosite.reconstruction: the model tier this site gets (lidar_2m | dem_30m), decided before any charge
joulesNoBASE price, before the rail surcharge
query_typeNo
billed_hopsNo
pricing_tierNo
rate_per_hopNo
joules_all_inNoTHE TRUE DEBIT — fund this, not `joules`
pricing_modelNo
rail_fee_joulesNothe ~0.5% rail surcharge, rounded up
refund_on_emptyNo
quote_is_maximumNo
partial_refund_noteNo

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden and does so well: free to invoke, bearer required but unverified callers allowed, the 0.5% rail surcharge baked into joules_all_in, per-hop pricing with refund_on_empty/quote_is_maximum, hop limits by key type (agent 10, human 3), and tier selection before any charge for site.reconstruction.

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-loads the core value proposition (exact price before the call, free, invocable) and then packs parameter guidance densely. It is long and slightly run-on with heavy parentheticals, but nearly every clause conveys actionable information rather than filler.

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 an 8-param, 1-required pricing tool with no annotations, this is complete: it covers auth behavior, billing semantics, refund behavior, per-path parameter meaning, and the site.reconstruction special case. Return values are not belabored since an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are 8 parameters, so the description must compensate — and it does: path is defined with concrete examples mapped to sibling tools, hops is defined as graph depth with key-dependent caps, and lat/lng/entity_type/radius_m/as_of are explained for the site.reconstruction case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: 'the exact per-caller price of a metered call BEFORE you make it.' It also names the underlying route (GET /api/v1/billing/quote) and ties itself to per-call pricing, which distinguishes it from sibling quote tools like market_quote and balance_proof.

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?

Clearly signals when to use it: before making a metered call, and to fund joules_all_in rather than the base joules. It also notes bearer is required but no verification is needed, so an unverified caller may still price a call. It stops short of naming an explicit alternative/fallback sibling, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bridge_proofInspect

Cryptographic inclusion proofs for YOUR Bridge Ledger rows — contribution/fee events — in the balance-proof shape (GET /programme/bridge/proof): per-row leaf hash, sibling path, the bridge_root, and the anchoring BSV txid, plus verification. Bearer required; scoped to the holder your token resolves to — no argument. anchoring is either "anchored" (with a real 64-hex bsv_txid) or a pending note: Bridge rows are anchored by being batched into the hourly transparency attestation (anchored in an OP_RETURN transaction, usually within minutes; longer when the network is busy), so the newest rows read pending until their batch is broadcast and then carry the batch txid. Nothing is computed on request — it reads what the attestation stored.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

companyDInspect

One company's record and graph neighbourhood by id; the response carries charged_joules — the all-in PRICE of THIS call (one key on every metered response — the companies/deposits/infrastructure/ projects reads, relationships, and look_from / map_viewport / look_at). Metered — debited from the CALLING agent's own wallet, not the owner's (read it with the joules_balance tool). For the exact per-caller price before you call, use the billing_quote tool (free, tier-aware; returns joules_all_in) or check affordability with the joules_deficit tool; the true debit is the base joule_cost plus a 0.5% rail surcharge rounded up (a 100 J call debits 101 J) = joules_all_in. ⚠ CHARGING: the meter RESERVES before the query runs and SETTLES after delivery for what was actually delivered (an empty result settles to 0; a partial traversal settles for the hops delivered; a 4xx releases the reservation). An abandoned or timed-out call still settles once the backend delivers. A replay is served free only for the SAME credential + SAME idempotency key + SAME request within 15 minutes — a different payer is a different payer. Every call through this relay carries a fresh key, so a retry here is always a new charge. Price with billing_quote first; verify any charge with the billing_attempts tool (own wallet: reserved vs settled, per attempt). WHAT YOU PAID: the JSON response carries a top-level charged_joules — the all-in PRICE of this call — and a metering block written AFTER the settle has run: {attempt_id, settlement, settled_joules, check}. metering.settlement is whether you PAID: settled · settled_zero (empty result, nothing moved) · settle_failed (delivered but UNPAID — the wallet is then locked until it clears; the next metered call 402s naming the attempt, the amount and what clears it) · released (4xx/5xx, nothing moved) · unknown. settled_joules is what actually left the wallet (0 unless settled). A cached replay carries no block.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.9/5.0
Behavior3/5

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

The description exhaustively discloses metering behavior (reservation, settlement, charging, replay conditions) which goes beyond annotations (none provided). However, it omits behavioral details about the actual data retrieval, such as traversal depth or response structure, so transparency is one-sided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness1/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely long and poorly structured, with the core purpose buried under a massive block of billing information. It is not front-loaded or concise, making it hard for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers metering in depth but lacks essential details about the returned company record and graph neighbourhood. Even with an output schema present, the description does not explain the data fields, so an agent cannot anticipate the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'id' is referenced as 'by id' but no additional meaning is given—no format, constraints, or examples. With 0% schema coverage, the description fails to compensate, leaving the parameter's semantics thin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'One company's record and graph neighbourhood by id' but lacks a clear verb and immediately diverts to billing details. It does not differentiate from siblings like 'deposit' or 'relationships', leaving the core purpose vague.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives. The description is entirely consumed by metering and charging details, with no mention of usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contribute_receiptsAInspect

Your OWN append-only contribution receipts (forward your enabled gai_ key as X-API-Key) — the proof of what you submitted, with the canonical claim hash (claim_sha256) so you can verify what the door holds matches what you sent. Own rows only, no staff fields. Read-only. GET /api/v1/contribute/receipts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses read-only behavior, append-only nature, ownership scope, and the required API key. It doesn't mention rate limits or error handling, but for a simple list endpoint with output schema, the key behavioral traits are covered.

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 description is a single dense but effective paragraph. It front-loads the core purpose (own receipts, proof), includes the hash detail, and ends with the endpoint. It could be split into cleaner sentences, but every phrase adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with an output schema, the description covers purpose, auth, scope, and read-only nature. It doesn't explain return structure, but the output schema handles that. Missing pagination guidance is minor given the schema defaults.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description adds nothing about limit/offset. While the parameter names and defaults are self-explanatory, the description does not compensate for the missing schema descriptions, nor does it mention pagination behavior or maximum limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description names a specific resource (contribution receipts), the verb (GET), and the exact scope ('Your OWN', 'no staff fields'). It distinguishes itself from siblings like contribute_submissions by emphasizing ownership and the claim hash, so an agent can tell exactly what this tool returns.

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?

Clear usage context is provided: this is for retrieving proof of your own submissions and verifying them via claim_sha256. It also states the auth requirement (X-API-Key). It doesn't explicitly name alternatives, but the 'Own rows only' exclusion effectively disambiguates from broader listing tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contribute_relationsAInspect

Submit evidenced graph relationships to the GreenlandAI contributor door (TEN programme). Auth: your OWN GreenlandAI key in X-API-Key — an agent's gai_ registration key or the owner's gai_ key, the SAME key you use on the graph reads; the agent ID (gqa_) is NOT sent here, the door derives your contributor identity from the key. Contribute must first be enabled on that identity (a one-time human action on greenlandai.ai; the door returns a 403 naming the enable endpoint if it is not). Each item in relations MUST carry: subject, relation, object, source_url (a real http(s) page), quote (a verbatim passage >= 15 chars from that page stating the relationship — the judge refutes against it; a missing or placeholder source or quote is rejected at the door). Optional per item: subject_type, object_type. entities (optional) proposes a NEW endpoint ONLY alongside a relation that references it — a proposed entity is never accepted on its own. Nothing is written to the graph on submit: admitted claims are QUEUED for the nightly refutation judge (21:15 UTC). Per-item results[].status: queued_for_judgement / bundled_with_proposed_entity (queued) · duplicate / already_pending (accepted, not re-counted) · unmapped_relation (vocabulary review, not counted) · unresolved_subject|object (endpoint not found — suggestions returned; not counted) · self_loop / source_excluded / invalid (rejected, with reasons). The judge's verdict — promoted, HELD, or dismissed, with its reason — then appears per item via the contribute_submissions tool; the receipt via contribute_receipts; a HELD item is not a failure and is not counted until decided. Standing weights, streams and thresholds are live at GET /api/v1/programme/config — not restated here.

ParametersJSON Schema
NameRequiredDescriptionDefault
entitiesNo
relationsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden, and it delivers extensively. It discloses that nothing is written to the graph on submit, claims are queued for a nightly refutation judge at 21:15 UTC, per-item statuses, and that the judge's verdict appears via other tools. It also details the auth identity derivation from the key, covering behavioral nuances beyond basic input/output.

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 description is long but information-dense; each sentence adds essential context. It is not a tautology or padded. However, it is a single dense paragraph that could be broken into structured bullets for readability. The front-loaded purpose sentence is good, but the sheer length makes it slightly less scannable—still it earns its place given the complexity.

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 the tool's complexity (auth, prerequisites, queueing, statuses, follow-up tools), the description covers everything an agent needs to call it correctly. It explains the full lifecycle from submission to verdict, references the config endpoint, and enumerates all statuses. The output schema exists, but the description goes beyond it to explain meanings, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (the schema only defines arrays of generic objects without property descriptions). The description compensates fully by specifying required fields for each relation (subject, relation, object, source_url, quote) with the quote constraints, optional fields (subject_type, object_type), and the semantics of `entities` (only alongside a relation referencing it). This adds substantial meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Submit'), a specific resource ('evidenced graph relationships to the GreenlandAI contributor door'), and the programme name ('TEN'). It clearly distinguishes from sibling tools like contribute_submissions and contribute_receipts, which are mentioned as follow-up tools for outcomes.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance: explains the auth requirement (own key, agent ID not sent), the prerequisite that contribute must be enabled (with the 403 naming the enable endpoint), and directs to other tools for follow-up (contribute_submissions, contribute_receipts) and live config (GET /api/v1/programme/config). Also states nothing is written on submit and claims are queued, setting expectations for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contribute_statsAInspect

Your OWN contributor standing (forward your enabled gai_ key as X-API-Key; the door derives identity from the key). Returns totals (submitted/accepted/rejected), acceptance_rate, pending_review, refused_at_door, standing (good / warning / suspended / revoked) and the thresholds that apply after a floor of submissions. Read-only. GET /api/v1/contribute/status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It explicitly states 'Read-only', which covers side effects, and details the authentication via X-API-Key and that identity is derived from the key. It also lists the returned fields and thresholds. It does not mention error conditions or rate limits, but for a read-only status tool this is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two well-structured sentences front-load the main purpose ('Your OWN contributor standing') and then detail the return fields, auth, and endpoint. No wasted words; every sentence adds value.

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 and an output schema (though not shown, the description lists all returned fields), the description fully covers what an agent needs to know: what it returns, how to authenticate, and that it is read-only. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the schema provides nothing. The description adds crucial context: the required X-API-Key header and the endpoint. This goes beyond the schema and is essential for invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Returns'), a specific resource ('contributor standing'), and scope ('Your OWN'), and lists the exact data returned. It distinguishes itself from sibling contribute_* tools by focusing on the caller's own status rather than submissions or receipts.

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?

The description implies when to use it ('Your OWN contributor standing', 'Read-only') and gives the endpoint, but it does not explicitly mention alternatives or when not to use it. The self-scope is a clear differentiator, yet no direct comparison to siblings like contribute_submissions or contribute_receipts is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contribute_submissionsAInspect

Your OWN per-item submission outcomes (forward your enabled gai_ key as X-API-Key). Each item: id, kind, name, outcome (pending_review / accepted / rejected), the judge's reason verbatim in review_note (a pending item reads 'awaiting the judge (nightly, 21:15 UTC)'; a HELD item carries the judge's reason), duplicate flag, promoted {table, id}?, bundle_id?, submitted_at. Read-only. GET /api/v1/contribute/submissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses the required X-API-Key header, the read-only nature, field semantics, the pending-review wording, and the nightly judge schedule. The unexplained 'HELD item' terminology is slightly ambiguous, but the description is otherwise transparent.

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 description is compact and front-loaded with the core purpose and auth requirement before the field list and endpoint. It avoids filler, though the field enumeration is dense and mixes API details with status semantics in a way that could be lightly organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple optional pagination parameters and existing output schema, the description covers the essential operational context: endpoint, auth, read-only status, item fields, and status meanings. It is not fully complete because it omits explicit alternative guidance and parameter semantics, but those are minor given how much is disclosed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for limit and offset, and the description does not explain either parameter or mention pagination. The parameter names and defaults in the schema are self-suggesting, but the description adds no semantic value to compensate for the missing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as the caller's own per-item submission outcomes and gives the exact endpoint, GET /api/v1/contribute/submissions. The 'Your OWN' qualifier distinguishes this from sibling contribution tools such as receipts, relations, or stats, and 'Read-only' further clarifies the operation.

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

Usage Guidelines3/5

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

Usage context is implied: this is the tool for retrieving your own submission outcomes, and the read-only note signals it is safe to call. However, it never explicitly says when to prefer this over sibling tools like contribute_receipts or contribute_stats, and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

depositAInspect

One resource deposit's record by numeric id (relays GET /api/v1/deposits/{id}), including its commodities[] ({name, role: primary|byproduct, group} — the commodity graph, with resource_type as the primary label) and operators. Pair with deposits(commodity=...): search by commodity, then read the deposit. Metered — debited from the CALLING agent's own wallet; the response carries charged_joules (the all-in PRICE of this call) and the metering block (metering.settlement = whether you PAID, settled_joules = what left the wallet). Quote with billing_quote("/api/v1/deposits/{id}").

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries the transparency burden and meets it: it reveals the call is a read ('relays GET'), that it is metered and 'debited from the CALLING agent's own wallet', and defines the response's charged_joules/settlement fields. This goes well beyond the schema and gives agents the safety and cost implications of calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: purpose, inclusions, sibling workflow, and metering consequence. It front-loads the core action before the detail-heavy metering sentence, with no wasted words.

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 single-parameter read tool with no annotations, the description supplies path semantics, the search-before-read workflow, return inclusions (with the output schema carrying the detailed shape), and the cost/payment behavior. Nothing an agent needs to select or invoke the tool correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only declares a required string 'id' with zero description coverage, so the description must clarify it. It does: id is 'numeric' and maps to the URL path placeholder '{id}', implied by '/api/v1/deposits/{id}'. For a one-parameter tool this fully compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb+resource: returns 'One resource deposit's record by numeric id' and even gives the exact REST endpoint. It further names the inclusion set ('commodities[]' and 'operators'), which distinguishes it from the sibling search tool 'deposits(commodity=...)'.

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

Usage Guidelines5/5

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

Explicitly frames a workflow: 'Pair with deposits(commodity=...): search by commodity, then read the deposit.' It also directs cost control with 'Quote with billing_quote("/api/v1/deposits/{id}")' before a call. This is clear when-to-use guidance plus a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

depositsAInspect

Search resource deposits (relays GET /api/v1/deposits). Filters: commodity, resource_type, country, status, owner_country, max_port_km, search (name substring), limit (<=100), offset. ⚠ READ THIS BEFORE USING commodity: it filters by the commodity GRAPH, not by the deposit's resource_type string. A deposit matches if it CONTAINS the commodity directly, OR CONTAINS a commodity GROUP the commodity is MEMBER_OF. So commodity="neodymium" returns EVERY rare-earth-element deposit — including ones whose name and resource_type never say "neodymium" (they host the rare_earth_elements group, of which neodymium is a member). That is correct, not a broken filter. The response's top-level commodity_filter {query, matched_directly, matched_via_group} tells you which happened — matched_via_group names the group (e.g. "rare_earth_elements") when the match came through it. Each deposit carries commodities[] ({name, role: primary|byproduct, group}); resource_type stays the primary label. Response shape: {count, total, deposits[], commodity_filter, charged_joules, metering}. Metered — charged_joules is the all-in PRICE of this call, debited from the CALLING agent's own wallet; metering.settlement / metering.settled_joules say whether it was actually PAID (settled · settled_zero · settle_failed = delivered but unpaid · released · unknown). Quote first with billing_quote("/api/v1/deposits"). Same as the SDK deposits(commodity=...).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
searchNo
statusNo
countryNo
commodityNo
max_port_kmNo
owner_countryNo
resource_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it does so exceptionally. It discloses the graph-based commodity matching behavior, the metered nature of the call, that charged_joules is debited from the caller's wallet, and the settlement states. It also explains the response's commodity_filter field to preempt confusion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense, and every section earns its place: purpose, filter list, critical commodity warning, response shape, and metering/billing. The most important caveat is prominently flagged with '⚠ READ THIS BEFORE USING `commodity`', making the structure effective despite the length.

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 9 parameters, zero schema descriptions, no annotations, and an output schema that is not shown, the description is remarkably complete. It covers all parameters, the response shape, the anomalous commodity behavior, and the financial consequences of calling the tool, providing an agent everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description compensates fully by naming every parameter and adding semantic meaning: search is a name substring, limit is capped at 100, and commodity has a non-obvious graph matching behavior with a detailed example. This goes far beyond the schema's bare type information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search resource deposits (relays GET /api/v1/deposits).' It clearly identifies the tool's scope and differentiates it from the sibling singular 'deposit' tool by focusing on plural search behavior.

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?

The description makes the search context explicit and enumerates all filters, clearly establishing when this tool is appropriate for listing/filtering deposits. It does not explicitly name an alternative tool or state when not to use it, but the context is clear and precise.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deposit_statusAInspect

YOUR OWN USDC-on-Base deposit state (relays GET /api/v1/wallet/deposit-status; own wallet only, derived from your credential, never a parameter). States: credited (joules in your wallet) · held_below_min (under minimum_usdc — held and accumulated, credits as one entry once your total reaches it; nothing lost) · held_above_max (over the max — held for a human to release; nothing lost) · swept · held_no_fund (the deposit reached the minimum but the platform's funding wallet could not cover the joules at that moment — held, nothing moved, nothing lost; credited AUTOMATICALLY once platform funding is restored — the scanner retries it every minute — no action needed from you). Sent USDC and see nothing yet? Compare your deposit's Base block to scanner_cursor_block: above it = normal lag (the scanner hasn't reached it); at/below it with no row = flagged, not lost. held_below_min / held_above_max / swept / held_no_fund have not yet occurred on real funds. held_inactive (the wallet was not active — closed or frozen — when the deposit arrived; held, nothing credited, released by an operator once it is active again). Bearer or agent key required. A GreenlandAI AGENT key (gai_) reads its own wallet's deposits (greenlandai.ai/api/v1/agent/me/deposit-status); an owner's own credential is told where its own address and status are.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
depositsNo
usdc_liveNo
minimum_usdcNo
scanner_cursor_blockNo
needed_to_credit_usdcNo
held_below_min_total_usdcNo

TDQS

A4/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden, and it delivers: every state is enumerated with behavioral meaning (held_below_min accumulates and credits as one entry; held_no_fund retries automatically every minute; held_inactive is operator-released), and it asserts 'nothing lost' for each. It also covers auth requirements (bearer or agent key) and the distinction between deposit lag and being flagged. This is unusually complete behavioral disclosure for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is valuable but the structure is poor: it is one dense paragraph of state definitions with no front-loading of the states, and duplicated phrasing ('nothing lost' repeated five times). The routing detail (greenlandai.ai/api/v1/agent/me/deposit-status) is buried at the end. It earns its content but not its form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 values need not be explained; the description instead focuses on state semantics, which is the right call. It covers auth, scoping, and the cross-reference to scanner_cursor_block. It could be more complete on precedence (which state wins if conditions overlap) and on whether the states are mutually exclusive.

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?

Zero parameters, so the baseline is 4. The description reinforces this by stating the wallet is 'derived from your credential, never a parameter,' which prevents an agent from inventing a wallet-id argument.

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+resource: 'YOUR OWN USDC-on-Base deposit state.' The parenthetical routing (GET /api/v1/wallet/deposit-status; own wallet only, derived from credential) sharpens scope. It does not explicitly contrast with sibling tools deposit or deposits, but the 'own wallet only' scope plus the agent-key endpoint overload gives it a distinct identity.

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 when-to-use condition: 'Sent USDC and see nothing yet? Compare your deposit's Base block to scanner_cursor_block.' This is explicit diagnostic guidance. It does not name sibling deposits/deposit as alternatives for different scopes, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

entity_changeInspect

change(site, t0, t1) — the STRUCTURED CHANGE between two dated frames of one site (entity_type + id, or lat + lng): per class (water · ice · canopy · pad · stockpile · unknown) the area in m², by_sensor_m2 {optical, radar}, said (what each instrument saw: an area, "saw no change", "makes no call", or "untestable (reason)"), sensors_agreed, and a confidence from agreement with confidence_why: high = optical and radar both flag it in the same place; medium = one flags it and the other is blind to the class or untestable; low = they disagree (different places, or one flags it and the other could see it and saw none), or stockpile, or pad/stockpile without a terrain check. Optical is Sentinel-2; Landsat only for a date with no Sentinel-2 (before 2015-06-23 or a gap); radar is Sentinel-1 (from 2014-10). A Copernicus DEM terrain prior removes pad and stockpile on ground steeper than 12° (reported as steep_ground_excluded_m2). Every answer carries height_class — read it FIRST; the stockpile's volume block serves only what its class can say: repeat_surface = two lidar surfaces of the same ground (USGS 3DEP in the US, Canada's HRDEM by acquisition project) as their DIRECT DIFFERENCE — the ONLY measured volume change (change_m3 ± uncertainty, change_beyond_uncertainty = |change| > 2σ); prior_only = one dated surface against the Copernicus DEM (2011–2015): material ABOVE that old surface at a date, NOT a change between your dates (no change_m3); profile = a NASA ICESat-2 laser PROFILE (a line of 40 m segments, SlideRule) crossed the pile: the height along the line and the share it crossed, never a volume — ICESat-2 is NOT a worldwide second surface (tracks are ~30 km apart; most piles are missed); untestable = no dated height source crossed it (what was tried is listed; brightness and shape only, low). withheld names any figure the class cannot support; disturbed (Sentinel-1 coherence loss) is not computed yet. Each answer is kept in place.index as a measurement (append-only, with its inputs and the operator served that day; recorded gives its id). WHEN NOT TO CALL: who owns or operates the site is relationships (or the API's /relationships/walk), not this; the 3D shape of a site at one date is site_reconstruction; never quote a volume change unless height_class is repeat_surface. Not a video and not a picture — fetch stills with look_at / look_through. For spans of 300+ days the t0 frame is taken at t1's day of year (same_season=true, default). A sensor that cannot see the pair says UNTESTABLE with its reason; change_untestable is true only when BOTH are (then the answer costs nothing). change_untestable says the CHANGE could not be measured; height_class says what the stockpile's HEIGHT can support — a measured change can still carry height_class "untestable". Footprint: the site's held footprint, else a 500 m circle (stated in footprint); radius_m 50..2500 overrides. An entity whose coordinates are only a country centre is refused (409, not charged) — pass lat + lng. Dates YYYY-MM-DD, t0 on/after 1984-03-16, t1 default today. Slow: about 15–60 s. AGENT KEYS ONLY (a browser session is refused BEFORE any charge). SIDE EFFECTS: none beyond the charge — read-only. ⚠ CHARGING: ONE quote, ONE debit = two stills at look_at's live price, reserved up front; an UNTESTABLE answer costs nothing. Quote with billing_quote("/api/v1/entity.change"); the JSON carries charged_joules and a price block.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
t0Yes
t1No
latNo
lngNo
radius_mNo
max_cloudNo
entity_typeNo
same_seasonNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

entity_historyInspect

history(entity) — the CHEAP INDEX of one entity's dates (the place across time). entity_type deposit|infrastructure|company| project + id. Returns: frames — the imagery index over its coordinates (scene dates, cloud cover, scene ids, counts by year; NO images — fetch stills with look_at or a stack with look_through, the paid calls); snapshots — our record of the row since record time began (2026-10-03 19:29Z: versions with the fields that changed; before that "not recorded online"); what_changed — a short newest-first list (relationship began / ended with its basis, first stated by a source, capacity periods, events naming the company, our actions on the row, dataset releases matched), every item time_is "world" (a date a source states) or "ours" (when we acted). Nothing inferred. place = the entity's place block: has_site, height_class (its last measurement's, else unknown), last_measured, and the measurement routes filled in for it (entity.change, entity.state, look.through, site.reconstruction, place.index). WHEN NOT TO CALL: what changed physically between two dates is entity_change; ownership is relationships. AUTH: an agent key; browser sessions follow the graph-read rule. SIDE EFFECTS: none beyond the charge — read-only. ⚠ CHARGING: one price at the basic class (look_from's price); an entity that does not exist is a 404 and costs nothing; quote with billing_quote("/api/v1/entity.history"). NOT the account's own query history (that is a different route).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

entity_stateBInspect

state(entity, as_of) — ONE packet for one entity at a date (YYYY-MM-DD, default today): target (the entity as WE held it at as_of — before record time began, as held now, labelled), pins (look_from's frame, only pins we held by as_of; later additions counted), graph (its 1-hop relationships VALID at as_of — began on/before as_of, or stated by a source on/before as_of with the start unknown, and not ended by as_of — each with why; excluded edges counted by reason; never today's edges painted onto a past date), image (look_at's still for as_of — as_of is the SCENE's date, within 10 days — or untestable: true with the nearest scene's date), and escrow_oracle (available: false: no trade or oracle claim carries a site reference — said, not faked). AGENT KEYS ONLY (a browser session is refused BEFORE any charge). SIDE EFFECTS: none beyond the charge — read-only. ⚠ CHARGING: ONE quote, ONE debit = the live prices of the three parts (pins at the basic class + one graph hop + look_at's price), reserved up front and settled for the parts DELIVERED — a part with nothing in it (no pins, no edge valid at as_of, an UNTESTABLE image) is not charged; nothing delivered costs nothing. Quote with billing_quote("/api/v1/entity.state"); the JSON carries charged_joules and a price block (parts_base_joules, parts_delivered).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
as_ofNo
max_cloudNo
radius_kmNo
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

The description discloses significant behavior beyond what would be expected from the schema: charging model (one quote, one debit, reserved up front, settled for parts delivered), agent-key requirement, side-effect profile (read-only), and the escrow_oracle behavior. No annotations are provided, so the description carries the full burden, and it does so reasonably well. Some details (e.g., the exact interaction with billing_quote) are present.

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 description is long and dense, with many parenthetical asides and specialized jargon. It is front-loaded with the core operation, but the charging section and extensive behavioral details make it hard to scan. Every sentence does carry information, but the structure could be clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (composite outputs, charging model) and the presence of an output schema, the description provides substantial context: output fields, charging behavior, key requirements, and read-only nature. The lack of parameter explanations for 3 of 5 parameters is a notable gap, but overall it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the 5 parameters. It mentions `entity` and `as_of` implicitly but does not explain `max_cloud`, `radius_km`, or `entity_type`. Even `as_of` format is given (YYYY-MM-DD, default today), but other parameters are left entirely undocumented, which is a significant gap.

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 opens with 'state(entity, as_of) — ONE packet for one entity at a date', stating a clear verb-like operation and scope. It names the composite outputs (`target`, `pins`, `graph`, `image`, `escrow_oracle`), which differentiates it from sibling tools like `entity_history` and `relationships`. However, the terminology is highly specialized and doesn't explicitly contrast with sibling tools.

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

Usage Guidelines3/5

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

Usage context is implied (query entity state at a date), but there is no explicit 'when to use this vs entity_history or relationships' guidance. The charging warning and key requirement are functional conditions, not alternative-selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

funding_prepareBInspect

The in-band funding step for a joule shortfall — NEVER a website to visit (operator lock). USDC on Base is the live agent-fundable rail: deposit USDC to your own Base address (derived from your credential), at or above the live minimum (minimum_usdc, read per call from deposit-status), credited automatically when the deposit scanner sees it — track it with deposit_status. Card funding stays a human web flow. Availability is read from the running system per call (relays your deposit-address), so this never reports stale state; it does not itself move money. A GreenlandAI AGENT key (gai_) gets its OWN USDC address (greenlandai.ai/api/v1/agent/me/deposit-address — credits the agent's own wallet) plus its owner's funding route; an owner's own credential is told where its own address is.

ParametersJSON Schema
NameRequiredDescriptionDefault
neededNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
neededNo
routesNo
wallet_idNo
in_band_agent_funding_liveNo

TDQS

B3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: USDC on Base is the agent-fundable rail, deposits are credited automatically by a scanner, state is read live per call (never stale), and the tool does not move money itself. It also distinguishes agent-key vs owner-credential handling. It stops short of stating auth requirements or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is a dense run-on packed with nested parentheticals and backticked field names, so the core action is not front-loaded and must be reconstructed. Length is large relative to the small amount of actionable instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists, return values need not be described, and the live-state and auto-credit behavior are covered. But the undefined `needed` parameter and the ambiguous 'prepare but does not move money' framing leave the agent without a fully actionable picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter `needed` has 0% schema description coverage and the description never explains it — it only mentions `minimum_usdc`, a different field read from deposit-status. For a tool whose one input shapes funding preparation, leaving `needed` undefined is a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific domain and role ('the in-band funding step for a joule shortfall') and rules out the website/card path, but the actual action it performs is genuinely hard to pin down — it both 'prepares' funding and explicitly 'does not itself move money.' An agent learns the topic but not cleanly what this call returns or changes.

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

Usage Guidelines3/5

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

Implied trigger is a joule shortfall, with `deposit_status` named for tracking and card funding marked as a separate human web flow. However there is no explicit when-not guidance and no clear statement of when to call this vs. the sibling `deposit`/`deposits` tools, so routing remains partly inferential.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hopsAInspect

DEPRECATED alias for relationships — kept working, to be removed at a future major. Use relationships. Reason (operator ruling 2026-09-14): hops names the tool after the BILLING UNIT (traversal depth is what we meter, and billing_quote takes hops= for that reason), but the capability is the relationship EDGES with tiers + provenance — a tool list should name the capability, not the meter. Identical behavior and params to relationships (incl. an unknown relation_type = 400 on both paths, before any charge; entity_type + entity_id pin one entity, and a name matching several is a 409 listing the candidates, nothing charged); also the SDK helper name. ⚠ CHARGING: the meter RESERVES before the query runs and SETTLES after delivery for what was actually delivered (an empty result settles to 0; a partial traversal settles for the hops delivered; a 4xx releases the reservation). An abandoned or timed-out call still settles once the backend delivers. A replay is served free only for the SAME credential + SAME idempotency key + SAME request within 15 minutes — a different payer is a different payer. Every call through this relay carries a fresh key, so a retry here is always a new charge. Price with billing_quote first; verify any charge with the billing_attempts tool (own wallet: reserved vs settled, per attempt). WHAT YOU PAID: the JSON response carries a top-level charged_joules — the all-in PRICE of this call — and a metering block written AFTER the settle has run: {attempt_id, settlement, settled_joules, check}. metering.settlement is whether you PAID: settled · settled_zero (empty result, nothing moved) · settle_failed (delivered but UNPAID — the wallet is then locked until it clears; the next metered call 402s naming the attempt, the amount and what clears it) · released (4xx/5xx, nothing moved) · unknown. settled_joules is what actually left the wallet (0 unless settled). A cached replay carries no block.

ParametersJSON Schema
NameRequiredDescriptionDefault
hopsNo
as_ofNo
limitNo
entityNo
offsetNo
searchNo
entity_idNo
entity_typeNo
relation_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full behavioral burden and does so richly: reserve-before/settle-after metering, empty result settles to 0, 4xx releases, abandoned/timeout calls still settle, replay free only for same credential+key+request within 15 minutes, and the settle_failed wallet-lock / 402 behavior. This is unusually complete for a zero-annotation tool.

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 deprecation and migration guidance, then the charging model, which is genuinely necessary given zero annotations. The operator-ruling rationale is somewhat editorially verbose, but the metering detail earns its place; no true redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still explains `charged_joules` and the `metering` block fields, and it covers error semantics and deprecation fully. The remaining gap is the undocumented execution parameters (limit/offset/search/as_of/entity), which keeps this from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 params, so the description is the only source. It adds real meaning for `hops` (traversal depth = metered unit), `relation_type` (unknown value = 400 before charge), and `entity_type`+`entity_id` (pinning, multi-match = 409), but leaves `limit`, `offset`, `as_of`, `search`, and `entity` entirely undocumented. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description immediately names the tool as a deprecated alias for `relationships` and explains why the naming was ruled wrong (billing unit vs. capability), so an agent understands exactly what the tool is. It is distinguishable from the `relationships` sibling without opening either schema.

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

Usage Guidelines5/5

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

Explicit routing instruction: 'Use `relationships`' with the deprecation rationale, and the condition under which this alias still works. It also states identical behavior/params, so the agent knows migration is safe. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

joules_balanceAInspect

Your own wallet balance — a FREE read either way (checking costs nothing). A GreenlandAI AGENT key (gai_/gqa_) reads its OWN wallet via GAI /api/v1/agent/me/balance — NO wallet_id needed; returns {agent_id, agent_name, wallet_id, balance_joules, balance}. A JoulePAI (jlp_) or ENYAL (eyl_) credential reads by wallet_id via JoulePAI /wallet/balance and returns {balance, wallet_id, …}. (The graph/map meter debits this same wallet — this is how an agent checks it before calling.)

ParametersJSON Schema
NameRequiredDescriptionDefault
wallet_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoJoulePAI branch returns the wallet id here
handleNo
balanceNospendable joules; the field to act on
agent_idNo
wallet_idNo
agent_nameNo
owner_typeNo
balance_joulesNoGAI agent-branch name for the same figure
verification_statusNo

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses that the operation is free/read-only, explains the two authentication paths, and notes the returned fields. It doesn't explicitly state failure modes or rate limits, but the free-read disclosure and endpoint details are strong behavioral context.

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 description is dense but well-organized, front-loading the key fact (free read) and then explaining the two credential paths. Every sentence adds value, though the parenthetical about the graph/map meter could be seen as slightly tangential. Overall, it's efficient and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and only one optional parameter, the description covers the essential usage scenarios. It explains the two authentication modes, the endpoints, and the return fields. It doesn't mention error cases or what happens with an invalid wallet_id, but for a simple balance-check tool, the coverage is strong.

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 0% and the only parameter (wallet_id) has no description in the schema. The tool description compensates by explaining when wallet_id is needed (JoulePAI/ENYAL credentials) and when it is not (agent keys). It doesn't describe the exact format of wallet_id, but the conditional usage is clearly explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a wallet balance, distinguishes between two credential types (GreenlandAI agent key vs JoulePAI/ENYAL), and specifies the exact endpoints and return shapes. It names the resource (wallet balance) and the verb (reads/checks), making it unambiguous.

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

Usage Guidelines5/5

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

The description explicitly explains when to use this tool: an agent checks its own wallet before calling graph/map meter operations. It also clarifies that no wallet_id is needed for agent keys, while JoulePAI/ENYAL credentials require wallet_id. This provides clear context and differentiates from sibling tools like wallet_transfer and joules_deficit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

joules_deficitAInspect

Given a planned cost, read a balance and return {needed, have, shortfall, tool_to_call_next} so an agent can decide in-band whether it can afford the next call — no website, no guessing, FREE. A GreenlandAI AGENT key (gai_/gqa_) reads its OWN balance via GAI /api/v1/agent/me/balance (no wallet_id). A JoulePAI/ENYAL credential reads via JoulePAI — wallet_id OPTIONAL (omit → resolved via /wallet/me), pass it for a specific wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
costYes
wallet_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
haveNo
neededNo
shortfallNo0 means affordable now
tool_to_call_nextNonull when nothing is owed

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that it reads balance via specific API endpoints, is free, and returns a structured result. However, it does not mention whether the operation is read-only (though implied), any error behavior, or rate limits. It provides moderate transparency but lacks some edge-case context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no waste. The purpose, return value, and credential handling are all front-loaded, making it efficient and easy to parse.

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?

The description covers the tool's purpose, return structure, credential types, API endpoints, and parameter nuances. It is complete for an agent to decide when and how to call it, given that an output schema exists and the description already explains the returned fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must fully explain parameters. It does: cost is the planned cost, and wallet_id is optional with behavior described (omit to resolve via /wallet/me, or pass for a specific wallet). This adds significant meaning beyond the bare schema fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a balance for a planned cost and returns a structured decision object {needed, have, shortfall, tool_to_call_next}. It uses specific verbs and resources, and distinguishes itself from siblings like joules_balance by focusing on affordability decision rather than just balance reading.

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?

The description explains when to use the tool (to decide if the agent can afford the next call) and provides context on credential types and wallet_id optionality. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ledger_verifyAInspect

Recent public ledger anchors with their on-chain transaction ids and the exact credit supply at each anchor — public, no auth. Independently checkable.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
erasNo
totalNo
anchorsNo
coverageNo
hash_formatNo
chain_semanticsNo

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that the data is public, requires no auth, and is independently checkable, which are useful behavioral traits. It doesn't mention read-only status, but for a zero-parameter verification tool this is implicitly read-only; the disclosed traits add value beyond the name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the purpose and includes key traits (public, no auth, independently checkable) with no waste. Perfectly concise and well-structured.

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 zero-parameter tool with an output schema, the description is complete: it states what is returned, the auth requirement, and verifiability. The output schema covers the return structure, so nothing essential is missing.

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 to document. The description does not need to explain parameters; a baseline of 4 applies since the description correctly omits irrelevant parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool returns: recent public ledger anchors with transaction IDs and credit supply. It is specific and unambiguous, and while it doesn't name siblings, the content is distinct enough to avoid confusion with other ledger-related tools.

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

Usage Guidelines3/5

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

The description notes that it is public and requires no auth, which implies when it can be used, but it gives no explicit guidance on when to prefer it over alternative tools like verify_proof or balance_proof. There are no exclusions or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

look_atAInspect

Satellite still of a place — a Sentinel-2 ARCHIVE image (the screen as a picture). Pose = lat/lng OR entity_type+id (anchor); same pose family as look_from. Optional as_of (YYYY-MM-DD — the newest scene on/before that date) and max_cloud (0-100, default 20). AGENT KEYS ONLY (a browser session is refused BEFORE any charge). Metered on its own price line — quote it first with billing_quote("/api/v1/look.at") — and refunded in full if no image is delivered. RETURNS THE IMAGE (jpeg) as MCP image content PLUS structuredContent provenance from the scene's headers — read these and claim nothing stronger: observed_at is the SCENE's date, NEVER the request's; source_tier is the PROVIDER's, never the pin's; freshness is "archive", never "live"; plus cloud_cover, gsd, extent_km, attribution, cache, entity_cap_consumed (0), and the charge: price_charged_joules (the all-in price) + metering_attempt / metering_status — the settle truth for an IMAGE, which has no JSON body to carry a metering block (the X-Metering-Status header: completed = paid · settled_zero · settle_failed = delivered but UNPAID · released · cached_replay). A cloudy or MISSING scene returns available:false + freshness:"unavailable" and is REFUNDED IN FULL — an unavailable RESULT, not an error, and NEVER a fabricated image; that JSON carries top-level charged_joules (0 — refunded) and the metering block described below. ⚠ CHARGING: the meter RESERVES before the query runs and SETTLES after delivery for what was actually delivered (an empty result settles to 0; a partial traversal settles for the hops delivered; a 4xx releases the reservation). An abandoned or timed-out call still settles once the backend delivers. A replay is served free only for the SAME credential + SAME idempotency key + SAME request within 15 minutes — a different payer is a different payer. Every call through this relay carries a fresh key, so a retry here is always a new charge. Price with billing_quote first; verify any charge with the billing_attempts tool (own wallet: reserved vs settled, per attempt). WHAT YOU PAID: the JSON response carries a top-level charged_joules — the all-in PRICE of this call — and a metering block written AFTER the settle has run: {attempt_id, settlement, settled_joules, check}. metering.settlement is whether you PAID: settled · settled_zero (empty result, nothing moved) · settle_failed (delivered but UNPAID — the wallet is then locked until it clears; the next metered call 402s naming the attempt, the amount and what clears it) · released (4xx/5xx, nothing moved) · unknown. settled_joules is what actually left the wallet (0 unless settled). A cached replay carries no block.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
latNo
lngNo
as_ofNo
max_cloudNo
entity_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

No annotations, so description carries the full burden and does so richly: agent-keys-only restriction, billing/refund semantics, metering states (settled_zero, settle_failed, released), replay/idempotency rules, and the crucial 'don't claim stronger than provenance' guidance. This is exactly the behavioral context an agent needs.

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?

Front-loads the core purpose well, but then balloons into a very long metering/provenance essay with heavy formatting (caps, ⚠, multiple em-dash clauses). Much of it is valuable but the density and length hurt scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a metered image tool with an output schema and no annotations, it covers return shape, provenance fields, error/refund behavior, and metering. Slightly over-complete on billing narrative relative to what a single call requires.

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 0%, so description must compensate: it explains as_of as 'newest scene on/before that date', max_cloud as 0-100 default 20, and the mutual-exclusion pose (lat/lng OR entity_type+id). The id/entity_type pair is somewhat implicit but recoverable from context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Satellite still of a place — a Sentinel-2 ARCHIVE image') and distinguishes it from the sibling by naming `look_from` and describing the 'pose' it shares. The agent can tell what it returns (jpeg) and what it's not.

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 explicit conditions: pose can be lat/lng OR entity_type+id, and tells the agent to quote first with billing_quote. It doesn't spell out when to use this vs look_from or look_through beyond the pose note, so not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

look_fromAInspect

Map lane: pins near a point (lat/lng + radius_km). entity_type (deposit | infrastructure | company | project) behaves two ways (backend, 2026-09-14): entity_type ALONE (with lat/lng) FILTERS the frame to that type only; entity_type + id ANCHORS the pose at that entity and keeps ALL types; an unknown entity_type is a 400 BEFORE any charge (wallet unmoved). Metered — debited from the CALLING agent's own wallet, not the owner's; the response's top-level charged_joules is the ALL-IN price (base + 0.5% rail — the same figure as price.charged_joules; the price block stays as the breakdown). Read the wallet with the joules_balance tool. For the exact per-caller price before you call, use the billing_quote tool (free, tier-aware; returns joules_all_in) or check affordability with the joules_deficit tool; the true debit is the base joule_cost plus a 0.5% rail surcharge rounded up (a 100 J call debits 101 J) = joules_all_in. Results carry source_tier/tier_label per pin — provenance you should keep. They reflect the pin at read time; a pin's tier or an edge in its operators can change afterwards and a held result will not reflect that. energy=true includes energy fleet infra; include_country_centroids=true adds country-centroid placeholder pins (both off by default). ⚠ CHARGING: the meter RESERVES before the query runs and SETTLES after delivery for what was actually delivered (an empty result settles to 0; a partial traversal settles for the hops delivered; a 4xx releases the reservation). An abandoned or timed-out call still settles once the backend delivers. A replay is served free only for the SAME credential + SAME idempotency key + SAME request within 15 minutes — a different payer is a different payer. Every call through this relay carries a fresh key, so a retry here is always a new charge. Price with billing_quote first; verify any charge with the billing_attempts tool (own wallet: reserved vs settled, per attempt). WHAT YOU PAID: the JSON response carries a top-level charged_joules — the all-in PRICE of this call — and a metering block written AFTER the settle has run: {attempt_id, settlement, settled_joules, check}. metering.settlement is whether you PAID: settled · settled_zero (empty result, nothing moved) · settle_failed (delivered but UNPAID — the wallet is then locked until it clears; the next metered call 402s naming the attempt, the amount and what clears it) · released (4xx/5xx, nothing moved) · unknown. settled_joules is what actually left the wallet (0 unless settled). A cached replay carries no block.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
latNo
lngNo
energyNo
radius_kmNo
entity_typeNo
include_country_centroidsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, the description fully discloses metering and settlement behavior: debited from the calling agent's wallet, top-level `charged_joules` as all-in price, 0.5% rail surcharge, reservation/settle cycle, 4xx releases, replay policy requiring same credential+key, and settlement states. It also exposes the `entity_type` dual behavior and the 400-on-unknown-type before charge, leaving no ambiguity about side effects.

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 description is front-loaded with the core purpose and covers essential operational detail, but it is verbose and somewhat redundant—e.g., the all-in price and 0.5% rail surcharge are stated both in the first paragraph and again in the 'WHAT YOU PAID' section. With careful trimming it could be tightened without losing 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?

Given the tool's complexity—7 optional params, metering, settlement states, idempotency—the description covers all necessary context for correct invocation: parameter semantics, charging workflow, error behavior, response indicators, and companion tools. The presence of an output schema covers return structure, and the description adds the behavioral context that the schema cannot.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining every parameter: `lat`/`lng`/`radius_km` as the point and radius, `entity_type` with its filtering vs anchoring dual behavior, `id` as the anchor, `energy` for fleet infrastructure, and `include_country_centroids` for placeholder pins. The interaction between `entity_type` and `id` is made explicit, which is critical and absent from the schema.

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 opens with a specific operation—'pins near a point (lat/lng + radius_km)'—and names the resource (pins) and geographic inputs. It clearly distinguishes itself from the billing/wallet siblings it references, though it does not explicitly contrast itself with geospatial siblings like `look_at` or `nearby`. The core purpose is unambiguous.

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

Usage Guidelines3/5

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

The description gives clear context for pre-call steps (use `billing_quote`, `joules_deficit`, etc.) but does not explicitly state when to use this tool instead of other geospatial tools like `look_at` or `nearby`. There is no when-not or alternative selection for the geospatial lane, so usage guidance is implied from the 'Map lane' label rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

look_throughAInspect

The image stack — an ORDERED STACK of dated Sentinel-2 ARCHIVE stills of ONE site across a date range (the place across time). Pose = lat/lng OR entity_type+id (anchor), the same pose rule as look_at. t0 (YYYY-MM-DD, on or after 2015-06-23) and optional t1 (default today) bound the range; max_frames (1-12, default 6) cuts it into that many equal windows, ONE still per window — the newest scene ACQUIRED inside that window with cloud cover at or under max_cloud (0-100, default 20). Each frame says its own as_of (the SCENE's date — never the window, never your request), cloud_cover, scene_id, provenance (provider, source_tier "provider", freshness "archive", attribution, gsd_m 10, extent_km 5.12), its own charged_joules, and the still as image_jpeg_base64. A window with no cloud-free scene is an explicit available:false frame with as_of:null and charged_joules:0 — NEVER a fabricated image, never a scene borrowed from another window. Satellite-still resolution (10 m), not street-level. It does NOT say what changed between frames. AGENT KEYS ONLY (a browser session is refused BEFORE any charge). SIDE EFFECTS: none beyond the charge — read-only; stills are cached by pose + scene date (look_at's cache). ⚠ CHARGING: priced PER STILL at look_at's price; the meter RESERVES for max_frames before the stack is fetched and SETTLES for the frames DELIVERED (no frame at all settles to 0; a 4xx releases the reservation). Quote first: billing_quote("/api/v1/look.through") with max_frames. The JSON carries top-level charged_joules (what you kept paying, all-in) and a price block (per_frame_base_joules, max_frames, frames_delivered); verify any charge with billing_attempts. Every call through this relay carries a fresh idempotency key, so a retry here is always a new charge.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
t0Yes
t1No
latNo
lngNo
max_cloudNo
max_framesNo
entity_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden and does so richly: read-only with no side effects beyond charge, cache keyed by pose + scene date, reserve-then-settle charging, 4xx releases the reservation, and idempotency semantics ('a retry here is always a new charge'). It also discloses the auth requirement ('AGENT KEYS ONLY, a browser session is refused BEFORE any charge'). This is far beyond what structured fields supply.

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-loads the core concept before parameters and billing, which is the right order. It is long and dense with heavy parentheticals and ALL-CAPS emphasis, and a few clauses are redundant (the 'never a fabricated image, never a scene borrowed' point is restated), but given zero schema/annotation help most sentences earn their place.

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?

Despite an output schema existing (so return values needn't be explained), the description covers the frame fields, the available:false behavior, and the full billing/verification workflow. Combined with no annotations and 0% schema coverage, this is complete enough for an agent to call and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage across 8 params, the description fully compensates: t0 format (YYYY-MM-DD, on/after 2015-06-23), t1 default today, max_frames range 1-12 default 6 and its windowing semantics, max_cloud 0-100 default 20, and the lat/lng OR entity_type+id pose rule. Ranges, defaults, and formats are all supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('ordered stack of dated Sentinel-2 archive stills of ONE site across a date range') and immediately scopes it against the sibling look_at ('the same pose rule as look_at'). An agent can distinguish it from look_at/look_from without opening either schema, and it explicitly notes what it does NOT do ('does NOT say what changed between frames').

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 clear context: the pose rule, date-range bound, and a mandatory charging workflow ('Quote first: billing_quote("/api/v1/look.through")'). It references look_at's pose and cache, implying the sibling relationship, but never explicitly states when to choose this over look_at for a single still. No explicit exclusions beyond the 'does not say what changed' note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mapdataAInspect

CLOSED — do NOT call. /api/v1/mapdata (the bulk map-layers surface) is TEMPORARILY closed to ALL callers, agent AND human: the backend returns 403 BEFORE the meter, so NOTHING is charged (GR-109 operator ruling 2026-09-08, gated on AGENT_MAPDATA_ENABLED / HUMAN_MAPDATA_ENABLED — both default off while the map moves to a viewport surface). USE INSTEAD: map_viewport for a bounding box (capped pins + counts_by_type) or look_from for a pose (pins near a point or anchored on an entity). Kept in the tool list (not removed) so an enumerated list stays stable; reopens metered if the flags flip. (When open it was: metered map dataset, layers + include_country_centroids.)

ParametersJSON Schema
NameRequiredDescriptionDefault
layersNocompanies
include_country_centroidsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it handles it exceptionally well. It discloses the 403-before-meter billing behavior, the gating flags, the fact that nothing is charged, the temporary closure rationale, and the condition under which it reopens as metered. This is far beyond typical behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the critical status ('CLOSED — do NOT call') and every subsequent sentence earns its place: rationale, billing impact, alternatives, enumeration-stability reason, and reopen condition. Despite carrying many details, it remains tightly organized and scannable.

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 the tool's current disabled state, two parameters, and existing output schema, the description covers everything an agent needs: it must not call this tool, it will not be charged, and it has concrete replacements. The conditions for future reopening are also specified, making the context complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to compensate for the two parameters. It only names 'layers + include_country_centroids' without explaining valid values for layers, what include_country_centroids affects, or how the parameters interact. The parameter titles in the schema already provide roughly the same shallow meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly identifies the tool as 'the bulk map-layers surface' and immediately states its current status: 'CLOSED — do NOT call.' It also distinguishes itself from siblings by naming map_viewport and look_from as the alternatives for bounding-box and pose queries, so an agent can tell exactly what this tool is and is not for.

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

Usage Guidelines5/5

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

The description gives explicit when-not-to-use guidance ('do NOT call') and concrete when-to-use-alternative guidance: use map_viewport for a bounding box and look_from for a pose. It even explains that the tool is kept only for enumeration stability, leaving no ambiguity about the correct action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_viewportAInspect

Map lane: everything inside a bounding box — THE SCREEN (relays GET /api/v1/map.viewport). Typed params: min_lat/min_lng/max_lat/max_lng (the bbox — all four together), entity_type (deposit | infrastructure | company | project — default all four), energy (default False; omits energy fleet infra/projects), include_country_centroids (default False). Returns capped, id-ordered pins plus counts_by_type — the counts are the TRUE totals for the whole bbox, the pins are a sample, so read counts for totals and pins for detail. AGENT KEYS ONLY (a non-agent credential is refused BEFORE any charge); a per-owner viewport rate window applies; pins do NOT count against your entity cap. Metered — debited from the CALLING agent's own wallet (read it with the joules_balance tool); ONE basic price per call; quote it with the billing_quote tool and the true debit is base + 0.5% rail surcharge = joules_all_in. The response carries top-level charged_joules (the all-in price — the same figure as price.charged_joules; the price block stays as the breakdown). Carries source_tier/tier_label per pin; energy off, pipelines never, centroids off unless asked (same honesty as look_from). ⚠ CHARGING: the meter RESERVES before the query runs and SETTLES after delivery for what was actually delivered (an empty result settles to 0; a partial traversal settles for the hops delivered; a 4xx releases the reservation). An abandoned or timed-out call still settles once the backend delivers. A replay is served free only for the SAME credential + SAME idempotency key + SAME request within 15 minutes — a different payer is a different payer. Every call through this relay carries a fresh key, so a retry here is always a new charge. Price with billing_quote first; verify any charge with the billing_attempts tool (own wallet: reserved vs settled, per attempt). WHAT YOU PAID: the JSON response carries a top-level charged_joules — the all-in PRICE of this call — and a metering block written AFTER the settle has run: {attempt_id, settlement, settled_joules, check}. metering.settlement is whether you PAID: settled · settled_zero (empty result, nothing moved) · settle_failed (delivered but UNPAID — the wallet is then locked until it clears; the next metered call 402s naming the attempt, the amount and what clears it) · released (4xx/5xx, nothing moved) · unknown. settled_joules is what actually left the wallet (0 unless settled). A cached replay carries no block.

ParametersJSON Schema
NameRequiredDescriptionDefault
energyNo
max_latNo
max_lngNo
min_latNo
min_lngNo
entity_typeNo
include_country_centroidsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

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

Even though no annotations are provided, the description carries the full burden and does so comprehensively. It discloses that pins are a sample while counts are true totals, explains charging mechanics (reservation, settlement, idempotency), rate limits, auth requirements (agent keys only), and even details the metering block states (settled, settled_zero, settle_failed, released). It also notes that pins do not count against entity caps and that energy, pipelines, and centroids are excluded unless specified. This is exemplary behavioral transparency.

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 description is verbose, with several long paragraphs dedicated to billing and metering edge cases. While it is structured and front-loaded with the core purpose and parameters, much of the metering detail could be condensed without losing critical information. It earns its place in terms of necessity but is not concise; it could be trimmed for clarity.

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 the tool's complexity—billing, sampling, multiple response fields, auth, and rate limits—the description is exceptionally complete. It covers authentication, rate windows, response structure (pins, counts, charged_joules, metering block), and even error states like settle_failed. The output schema exists but the description still adds valuable context that an agent needs to call the tool correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining each parameter's meaning, defaults, and constraints. It clarifies that the four bbox parameters must be provided together, describes the default for entity_type (all four types), energy (False), and include_country_centroids (False). This adds essential meaning beyond the bare schema, which only lists names and types.

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 clearly states the tool's purpose: mapping everything inside a bounding box, relaying a specific API endpoint. It specifies the verb (map), resource (viewport), and scope (bounding box). However, it does not explicitly differentiate this tool from sibling tools like look_at or mapdata, which also provide map-related data, so it lacks sibling differentiation.

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?

The description provides no guidance on when to use this tool versus alternatives. It does not mention when not to use it or what other tools might be more appropriate. There is no explicit exclusions or context for choosing this over look_at, nearby, or mapdata. This is a significant gap for an agent deciding between tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_acceptAInspect

Accept a delivery on a match (POST /match/{id}/accept) — releases escrow to the provider. You must be the buyer party; backend enforces it.

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYes
idempotency_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the critical effect 'releases escrow to the provider' and notes the backend enforcement of buyer role. It does not elaborate on idempotency behavior or potential error outcomes, but the key side effect is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no unnecessary words. The main action is front-loaded, and the role constraint is succinctly appended. Every sentence contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return values are not required. The description covers the purpose, the required role, and the main side effect. It lacks details about idempotency usage or error conditions, but for a simple accept action, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies match_id via the endpoint path, but provides no explanation of idempotency_key. The parameter names are self-explanatory, but the description adds limited value beyond the schema itself, especially for the optional parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Accept'), a resource ('a delivery on a match'), and includes the HTTP endpoint. It clearly distinguishes this from sibling tools like market_provide or market_request by focusing on the acceptance action and the buyer role.

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?

It explicitly states the condition 'You must be the buyer party; backend enforces it,' which guides when to use this tool. It does not explicitly mention alternatives or when not to use it, but the role constraint makes the context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_listingsAInspect

Browse the RAREEAI marketplace: kind="providers" (listings) or "oracles". Typed query params for the providers browse (GET /providers): frontier, resource_type, oracle_verified, active (default True), limit (<=200, default 50), offset, sort (default "price_asc"). Needs a bearer; no write scope to read.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoproviders
sortNoprice_asc
limitNo
activeNo
offsetNo
frontierNo
resource_typeNo
oracle_verifiedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description discloses the authentication requirement (needs a bearer) and confirms read-only operation (no write scope). It also notes the default active=True and limit<=200. However, it does not mention pagination beyond offset/limit, return format, error handling, or rate limits, leaving some behavioral gaps.

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 description is concise, with two sentences covering purpose, parameters, defaults, and auth. It is front-loaded with the primary purpose and packs significant information efficiently without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description covers essential aspects: kind selection, parameter list with defaults, limit constraint, auth, and read-only status. It does not explain every parameter's semantics in depth, but for a browse tool with an output schema, the coverage is adequate for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It lists the query parameters (frontier, resource_type, oracle_verified, active, limit, offset, sort) and gives some defaults and constraints (limit<=200, default 50, sort default 'price_asc'). It adds context beyond the schema names but does not explain the meaning of frontier or resource_type, so compensation is partial.

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 clearly states it browses the RAREEAI marketplace and distinguishes two kinds (providers and oracles). It uses the verb 'browse' with a specific resource, making the purpose obvious. It does not explicitly compare to sibling tools like market_accept or market_request, but the contrast is implied.

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?

The description provides clear usage context: which kind to specify, the available query parameters, defaults, and the limit constraint. It implicitly indicates this is the read/browse tool versus the action tools, though it does not explicitly state when to use it over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_matchAInspect

Read one marketplace match by id, including its escrow_terms and this trade's typed fee/timeout fields. You must be a party to the match. Bearer required. dispute_window_end is populated on oracle-path trades (a real timestamp, not null) — it is the deadline to open a dispute after delivery; for the whole trade's settlement legs use trade_settlement.

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it delivers: it signals a read-only operation, discloses auth and access requirements, and clarifies that dispute_window_end is only populated on oracle-path trades and represents the dispute deadline. This is rich behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then adds only high-value details: access condition, auth requirement, and an important field nuance. Every sentence earns its place, and the trade_settlement pointer is a compact way to avoid misuse.

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 one-parameter read tool with an output schema, the description is complete: it covers authentication, required party status, field-specific behavior, and the relevant sibling alternative. Nothing invocation-critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the single match_id parameter. It adds that the id refers to one marketplace match, but it does not explain the id's format, origin, or how an agent should obtain it. The property name and title already carry much of the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Read one marketplace match by id', clearly identifying the verb, resource, and scope. It also names trade_settlement as the sibling for whole-trade settlement legs, which distinguishes this tool from related siblings.

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

Usage Guidelines5/5

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

It explicitly states the requirement that the caller must be a party to the match, that Bearer auth is required, and it directs the agent to trade_settlement when the whole trade's settlement legs are needed. This gives concrete when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_provideAInspect

Create/update a marketplace listing (POST /provide). Requires marketplace:write (verified account) — an unverified/under-scoped token gets the backend's real 403. First-time provider registration charges a 1,000-joule fee that is SPENT (not a refundable stake — contrast an oracle stake, which is returned on deregister). Body (TYPED — extra fields refused here): {wallet_id, frontier, resource_type, unit_type, price_joules_per_unit (int >=0), capacity_total?, min_units?, max_units_per_match?, endpoint_url?, sla? (dict), speed?, timeout_hours? / timeout_minutes?, stake_amount?, oracle_verified? (opt in to oracle checks), idempotency_key?}.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it delivers: it discloses the mutation effect (create/update), the non-refundable fee, the typed-body strictness (extra fields refused), and the optional oracle_verified opt-in semantics. It also notes the idempotency_key, which hints at retry behavior. This is rich behavioral context beyond the schema.

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 description is dense but efficient: it front-loads the action, then packs permission, fee, body shape, and caveats into a compact block. The parenthetical asides and inline field list are information-dense rather than padded. It loses one point for being somewhat long and requiring careful parsing, but every sentence earns its place.

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 the tool's complexity (create/update, fee, permissions, optional fields, idempotency), the description covers the critical operational facts: auth requirements, cost, strict body typing, and the optional oracle opt-in. The output schema exists, so return-value details are not needed. An agent has enough to call this correctly and avoid common mistakes.

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 description coverage is 0%, so the description must compensate. It lists all body fields with inline type/constraint hints (e.g., price_joules_per_unit int >=0, sla dict, timeout_hours/timeout_minutes alternatives) and clarifies the oracle_verified field's meaning ('opt in to oracle checks'). It doesn't explain every field's purpose in depth, but it adds meaning well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb phrase 'Create/update a marketplace listing' and names the exact endpoint (POST /provide), which clearly distinguishes it from sibling tools like market_accept, market_request, and market_quote. It also enumerates the resource types and fields involved, leaving no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

The description explicitly states the required permission (marketplace:write, verified account) and the failure mode for unverified/under-scoped tokens (backend's real 403). It also contrasts the 1,000-joule fee with an oracle stake, clarifying when this tool is appropriate versus oracle_register/oracle_deregister. This is strong when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_quoteAInspect

Read one marketplace REQUEST by id (GET /request/{id}; you must own it). Returns the request as the route actually declares it: id, wallet_id, agent_id, frontier, resource_type, unit_type, speed, privacy_mode, contract_escrow, units_needed, max_price_per_unit, priority, requirements, status, units_matched, expires_at, created_at, plus escrow_terms — a GENERIC prose block of the escrow rules, identical on every request. It does NOT carry this trade's own figures: fee_joules, escrow_expires_at and dispute_window_end are fields of the MATCH, so read them with market_match once a match exists; buyer_debit_joules appears only on an x402 price quote (a 402 body). Bearer required.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
speedNo
statusNo
agent_idNo
frontierNo
priorityNo
unit_typeNo
wallet_idNo
created_atNo
expires_atNo
escrow_termsNogeneric escrow prose; opaque by design
privacy_modeNo
requirementsNo
units_neededNo
resource_typeNo
units_matchedNo
contract_escrowNo
max_price_per_unitNo

TDQS

A4/5.0
Behavior4/5

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

Annotations are absent, so the description carries the full burden. It discloses that the route requires ownership (Bearer required), and clarifies that escrow_terms is a generic prose block, not specific to this trade. It also explains what fields are NOT included and where to find them, which is transparent about limitations.

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 description is detailed but front-loads the essential purpose, then adds necessary clarifications. Every sentence serves a purpose, distinguishing this tool from alternatives. Slightly verbose but still efficient given the complexity of the domain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema is present, the description doesn't need to list all fields, but it does, which is helpful. It covers the key context: ownership, data availability, and where to get missing data. It lacks details on error cases or response format specifics beyond the schema, but it is sufficient for a single-parameter read tool.

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?

With schema description coverage at 0%, the description must compensate. The description doesn't explicitly elaborate on request_id beyond the schema, but it does explain the context of the request (ownership, route). Since there is only one parameter and it is self-explanatory, the description doesn't need much more, but it could have clarified the format (e.g., UUID), so a 4 is reasonable.

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 clearly states it reads a single marketplace REQUEST by id and lists the fields returned, distinguishing it from siblings like market_match and market_listings. It uses a specific verb (Read) and resource (marketplace REQUEST), and mentions the ownership requirement, which adds clarity.

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?

It provides clear context: use when you need the raw request data and own the request. It explicitly directs the agent away from using it for match-specific fields (like fee_joules, escrow_expires_at) and points to market_match instead, offering a clear alternative for those cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_requestAInspect

Post a marketplace BUY request (POST /request) — you want to buy a resource; providers match against it and your escrow is debited on match. Bearer + a verified account (marketplace:write); an under-scoped token gets the backend's real 403. Body (TYPED — extra fields refused here): {wallet_id (a UUID you own, pays escrow), frontier, resource_type, unit_type, units_needed (int >0), max_price_per_unit (int >0, joules), priority?, requirements? (dict), ttl_seconds? (expiry), speed?, privacy_mode?, contract_escrow?, physical_claim?, idempotency_key?}. Quote a specific request with market_quote before accepting a match. PHYSICAL TRADES: resource_type scene_stack, change_report, site_reconstruction or satellite_imagery MUST carry physical_claim {kind: physical_change|physical_state, site_lat, site_lng, t1, t0 (for a change), radius_m?} — the backend refuses the request without it; the trade is judged against a satellite frame at that site and date. ESCROW LANE: every trade's joules are held in escrow either way. The DEFAULT is the LEDGER LANE — escrow held in a system wallet and settled on the ledger (each settlement leg anchored on chain), NO on-chain contract and no contract fee; the match reads escrow_bsv_state: "NO_CONTRACT", which is the normal, terminal state of that lane, not a failure. Set contract_escrow: true to opt in to the on-chain escrow contract lane for a flat contract fee added to your lock; the contract is mandatory for large trades. It takes effect ONLY where an oracle backs the trade (large enough to attract oracle verification, or an oracle-verified provider): a non-oracle opt-in falls back to the ledger lane with no contract and no fee, and the match returns contract_escrow: false plus a contract_note saying why. Fee and thresholds: https://raree.ai/llms.txt (not restated here). After settlement, trade_settlement shows the contract's own legs in its contract section (null on a ledger-lane trade).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: auth model (Bearer + verified account, marketplace:write, real 403 on under-scoped tokens), the side effect (escrow debited on match), typed-body strictness (extra fields refused), and the full escrow-lane behavior including the default ledger lane, the opt-in contract lane, oracle-dependency, and the fallback with contract_note. This is well beyond what structured fields supply.

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 and auth/escrow consequences are front-loaded, and every section (body, physical trades, escrow lane) maps to a real decision the caller must make. It is dense and long, but given the tool's complexity the length is mostly earned rather than padding.

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 values need not be explained, and the description covers everything else an agent needs: auth/scope, error behavior, the full body contract, physical-claim prerequisites, and escrow-lane outcomes. Nothing required to invoke it correctly is missing.

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 description coverage is 0% at the top level, so the description must compensate and largely does — it enumerates every body field and gives semantics for the important ones (wallet_id pays escrow, units_needed int >0, max_price_per_unit int >0 in joules, ttl_seconds as expiry). It is docked because several fields (speed, priority, privacy_mode, requirements) are listed with no meaning beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Post a marketplace BUY request (POST /request)') and immediately clarifies direction: 'you want to buy a resource; providers match against it.' This lets an agent distinguish it from the sell-side sibling market_provide without opening either schema.

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 an explicit workflow rule — 'Quote a specific request with market_quote before accepting a match' — naming the sibling and the condition that selects it. It also scopes when physical_claim is mandatory. It stops short of a full when/when-not contrast against market_provide or market_accept, so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nearbyBInspect

Entities near a location (the primitive look_from builds on). Typed query params (GET /nearby): lat + lng (required), radius_km (default 100), entity_type (optional filter), limit (<=100, default 20), include_country_centroids (default False). Metered — debited from the CALLING agent's own wallet, not the owner's (read it with the joules_balance tool). For the exact per-caller price before you call, use the billing_quote tool (free, tier-aware; returns joules_all_in) or check affordability with the joules_deficit tool; the true debit is the base joule_cost plus a 0.5% rail surcharge rounded up (a 100 J call debits 101 J) = joules_all_in. Carries source_tier/tier_label. ⚠ CHARGING: the meter RESERVES before the query runs and SETTLES after delivery for what was actually delivered (an empty result settles to 0; a partial traversal settles for the hops delivered; a 4xx releases the reservation). An abandoned or timed-out call still settles once the backend delivers. A replay is served free only for the SAME credential + SAME idempotency key + SAME request within 15 minutes — a different payer is a different payer. Every call through this relay carries a fresh key, so a retry here is always a new charge. Price with billing_quote first; verify any charge with the billing_attempts tool (own wallet: reserved vs settled, per attempt). WHAT YOU PAID: the JSON response carries a top-level charged_joules — the all-in PRICE of this call — and a metering block written AFTER the settle has run: {attempt_id, settlement, settled_joules, check}. metering.settlement is whether you PAID: settled · settled_zero (empty result, nothing moved) · settle_failed (delivered but UNPAID — the wallet is then locked until it clears; the next metered call 402s naming the attempt, the amount and what clears it) · released (4xx/5xx, nothing moved) · unknown. settled_joules is what actually left the wallet (0 unless settled). A cached replay carries no block.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYes
lngYes
limitNo
radius_kmNo
entity_typeNo
include_country_centroidsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior5/5

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

The description goes into exceptional detail about the metering and charging behavior: reservation, settlement, what happens on empty results, partial traversal, 4xx responses, abandoned calls, and replay conditions. It also explains the `metering` block and `charged_joules` fields. Since no annotations are provided, this thorough disclosure of cost behavior is highly valuable and exceeds the burden of transparency.

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 description is long and heavily weighted toward billing details, which are important but could be summarized more concisely. It is structured into sections (params, metering, payment) which aids readability, but the length may overwhelm an agent looking for core functionality. Every sentence is informative, but the overall density reduces conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly covers the billing and metering aspects, but it omits functional details such as what the returned entity data looks like (beyond the metering block), how results are ordered, and what entity_type values are valid. Given the tool has an output schema, the description does not need to enumerate the full response, but it should at least mention the nature of the entities returned. The billing focus leaves the core query behavior underdescribed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description lists all six parameters and adds constraints (radius_km default 100, limit <=100 default 20, include_country_centroids default False). However, it does not explain what entity_type accepts (no enums or examples) or what include_country_centroids actually does. With 0% schema description coverage, it partially compensates but leaves key semantics unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool returns 'Entities near a location' and references it as the primitive `look_from` builds on, which gives a general sense of purpose. However, it lacks a direct verb like 'find' or 'list', and does not specify what constitutes an entity or what the response looks like beyond the metering fields. It also does not differentiate it from sibling tools like `look_at` or `hops`.

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?

The description provides no guidance on when to use this tool versus alternatives. It mentions that `look_from` builds on it but does not explain when to choose `nearby` over `look_from` or any other related tool. There is no statement about use cases, exclusions, or preferred conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oracle_assessAInspect

Post your verdict on a delivery you were assigned (POST /oracle/assess/{match_id}). Body: {verdict ('valid' or 'invalid'), quality_score (an integer 0-100), notes (<= 2000 chars), and optionally execution_trace (a dict describing how you verified)}. A quality_score below 40 auto-opens a dispute. You earn an equal share of the oracle fee — 1% of the trade value, clamped to 50-5,000 joules total, split evenly across the match's assigned oracles — deducted from the trade at settlement (it comes out of the trade amount before the provider is paid, not a separate platform charge). Assess within the 48-hour deadline. Requires being the assigned oracle + marketplace:write. ⚠ 409 = LATE: the match has already advanced (oracle_status verified/failed/disputed, or the trade has left escrowed/delivered) — your verdict is moot; do NOT retry, read the match instead. Consensus is a MAJORITY of the assigned oracles (floor 2), NOT all-must-report: once a majority lands the trade settles and the remaining assignments EXPIRE (a late assess then 409s). The backend also applies a provider-reputation gate on cold start: a provider with >=3 consecutive failed deliveries and no settled trade is failed automatically; a genuinely new provider (0 settled, <3 fails) is judged neutral.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
match_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral burden and excels: it discloses the 409 late-verdict semantics, the auto-dispute threshold, the oracle fee split and clamping, consensus majority behavior, expiration of remaining assignments, and the provider-reputation gate. This is precisely the non-obvious behavior an agent needs to avoid costly mistakes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although long, every sentence adds operational value: endpoint, body shape, fee economics, deadline, error handling, consensus, and edge-case reputation logic. The critical 409 warning is front-loaded, and no filler exists.

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?

The description is complete for a high-stakes write tool: it covers request shape, side effects, failure modes, timing constraints, and economic consequences. Since an output schema exists, not detailing the success response is acceptable; the operational edge cases are thoroughly documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description fully compensates by explaining each parameter: verdict values, quality_score range, notes length, and the optional execution_trace dict. It goes beyond the schema by adding the behavioral consequence that a quality_score below 40 auto-opens a dispute.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Post your verdict on a delivery you were assigned' and even gives the endpoint. It clearly distinguishes this from sibling oracle tools like oracle_register and oracle_assignments by focusing on submitting an assessment for an existing match.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance ('Assess within the 48-hour deadline'), prerequisites ('Requires being the assigned oracle + marketplace:write'), and when-not-to-use behavior: on a 409 late response, 'do NOT retry, read the match instead.' It also explains consensus rules so the agent knows it is not required to wait for all oracles.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oracle_assignmentsAInspect

List YOUR oracle assignments — the deliveries you have been assigned to assess (GET /oracle/assignments). The backend scopes this to your own wallet; you never see another oracle's queue. Optional query: status (filter) and limit (1-200, default 50). Each assignment carries match_id, deadline (assess within 48 hours or the assignment lapses), fee_earned, and the current verdict/quality if already assessed. Authenticated read — no marketplace:write needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It goes beyond the obvious by revealing wallet scoping, the 48-hour lapse rule for deadlines, the fact that each assignment may already carry a verdict/quality, and the auth prerequisite. These are meaningful behavioral traits an agent needs to know before calling, and they are all present.

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 description is efficient and front-loaded, placing the primary action first. It packs endpoint, scoping, parameters, return fields, deadline behavior, and auth into a compact block. It is slightly dense with multiple parentheticals, but every sentence contributes useful information and there is no filler.

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?

With an output schema present and only 2 optional parameters, the description covers everything needed to invoke the tool correctly: what it returns (match_id, deadline, fee_earned, verdict/quality), the parameter constraints, the auth requirement, and the behavioral scoping. No essential context for a filtered-read tool is missing.

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 description coverage is 0%, so the description must compensate. It does: 'limit (1-200, default 50)' adds the valid range and explicitly notes the default, and 'status (filter)' explains the purpose of the otherwise unannotated parameter. It doesn't enumerate possible status values, which is a minor gap, but it adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'List YOUR oracle assignments — the deliveries you have been assigned to assess.' It clearly distinguishes itself from the sibling 'oracle_assess' (which presumably performs the assessment) by stating this is a listing operation scoped to the caller's own wallet, with the explicit 'you never see another oracle's queue' boundary.

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?

It states clear context for when the tool is appropriate: when you want to see your assigned deliveries for assessment, with optional status filtering. It also communicates the authentication requirement ('Authenticated read — no marketplace:write needed'), which is useful for routing. However, it does not explicitly name alternatives or state when not to use this tool, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oracle_deregisterAInspect

Deregister as an oracle and unstake (POST /oracle/deregister?wallet_id=...). Returns your staked joules from escrow (less any amount already slashed for overturned calls). Fails if you have pending assessments. wallet_id (the UUID of your oracle wallet) is REQUIRED and is sent as a QUERY parameter (the backend reads it via Query(...), unlike register/assess which take a body). Requires marketplace:write.

ParametersJSON Schema
NameRequiredDescriptionDefault
wallet_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries full burden. It discloses the return (staked joules from escrow, less slashed amounts), failure condition (pending assessments), parameter placement (query parameter), and authentication requirement (marketplace:write). This is thorough and leaves no ambiguity about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause adds value: purpose, return, failure condition, parameter specifics, and auth. It is front-loaded with the core action and avoids redundancy, making it efficient and well-structured.

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 the presence of an output schema, the description need not detail return values. It covers the endpoint, authentication, parameter format and constraints, and failure conditions, which is sufficient for correct invocation. It also mentions behavioral differences from sibling tools, making it contextually complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no description for wallet_id (coverage 0%), but the description compensates by explaining it is the UUID of the oracle wallet, required, and sent as a query parameter. This adds critical meaning that the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Deregister as an oracle and unstake' and identifies the specific endpoint. It also distinguishes from sibling tools by noting that wallet_id is sent as a query parameter unlike register/assess which take a body, making the tool's role unambiguous.

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?

The description provides concrete conditions: requires wallet_id, requires marketplace:write permission, and fails if pending assessments. It implicitly guides usage by contrasting with register/assess, but does not explicitly list when not to use the tool or mention alternative tools beyond the contrast.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oracle_registerAInspect

Register as a RAREEAI oracle by staking joules (POST /oracle/register). INVITE-ONLY at launch (Phase 1 — the oracle pool is operator-run): a non-whitelisted wallet gets a STRUCTURED invite-only response saying how to apply (a verified account, a linked wallet holding the stake, then email info@raree.ai) — the path is discoverable, the gate explicit, no website bounce. Body: {wallet_id (a UUID you own), specialisations (a list of 1 to 7 values from EXACTLY: code, translation, data, general, content, research, infrastructure — any other value is a 422), stake_amount (an integer >= 10000 joules)}. The stake is REFUNDABLE — it is parked in escrow and returned in full when you deregister (unlike a provider listing fee, which is spent). A call overturned on dispute is slashed 10% of the stake. Requires a verified account + marketplace:write.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations present, the description carries the full behavioral burden and fully discharges it: the invite-only gate returns a STRUCTURED response rather than an error, the stake is held in escrow and refunded on deregister, dispute overturns slash 10%, and specific auth scopes are disclosed. This far exceeds what annotations would typically provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, and every subsequent sentence earns its place: gate behavior, parameter contracts, escrow/dispute consequences, and auth scope. It is long, but the tool involves an invite gate, strict validation, and financial stakes — there is no padding.

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-value documentation is unnecessary. For a tool of this complexity, the description covers all needed ground: what it does, who is eligible, how the invite gate behaves, every parameter constraint, financial consequences (refund vs. slash), and required permissions. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it does comprehensively. It supplies the exact allowed enum values for specialisations (code, translation, data, general, content, research, infrastructure), the 1-to-7 count bound, the 422 error for invalid values, the UUID-ownership requirement for wallet_id, and the integer-and-unit semantics for stake_amount (joules). All of this exceeds what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb ('Register'), resource ('as a RAREEAI oracle'), and mechanism ('by staking joules') with the exact endpoint. It also implicitly distinguishes from the sibling set by contrasting the refundable oracle stake with the non-refundable provider listing fee, and references deregistration, which separates it from oracle_deregister.

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?

The description gives clear application context: INVITE-ONLY at launch, the application path for non-whitelisted wallets, and the access requirement (verified account + marketplace:write). It contrasts the refundable stake with a provider listing fee, which implies the provider-registration alternative, though it never explicitly names that sibling or states a when-not-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

place_indexInspect

place.index — WHAT EXISTS AT A PLACE, AND WHEN. Rows within radius_km (default 2, max 50) of lat + lng, or of an entity's site (entity_type deposit|infrastructure|company|project + id; a country-centre anchor is refused 409, not charged), newest first: still = a satellite still a route delivered (look_at, look_through, entity_state) or a frame entity_change used — scene id, acquisition date, platform, cloud cover, the ground it covers (footprint_m2); never who asked. quote = a dated source attestation of a relationship, at each end of the relation that has a site (relation id, relation, source url, an excerpt). verdict / match = oracle verdicts and marketplace match ids — none are held yet (they arrive with the escrow build) and none are invented; the answer says so in not_held_yet. measurement = every entity_change and site_reconstruction answer made here (its height_class, the claim — volume or change only where the class supports it — its inputs: scene ids, the height sources tried and used, the licences, the footprint — and the operator edge the graph served that day); append-only: never updated or deleted, asking again adds a new generation, an untestable answer is kept too, never who asked. Each row carries both times: valid_on (a date in the world, with its precision) and recorded_at (when GreenlandAI came to hold it). from_date / to_date (YYYY-MM-DD) filter valid_on; kinds and entity_types are comma lists; counts per kind cover the whole match, rows one page (limit 1..500, offset). Fetch a still with look_at; read a relationship with relationships. AUTH: an agent key; browser sessions follow the graph-read rule. SIDE EFFECTS: none beyond the charge — read-only. ⚠ CHARGING: one price at the basic class (look_from's price); an answer with no rows costs nothing; quote with billing_quote("/api/v1/place.index"); the JSON carries charged_joules.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
latNo
lngNo
kindsNo
limitNo
offsetNo
to_dateNo
from_dateNo
radius_kmNo
entity_typeNo
entity_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

relationshipsInspect

Graph lane: labelled relationship EDGES between companies/entities (ownership, operates, supplies, …) — the PRODUCT (edges with tiers + provenance), named for the capability, not the meter. Typed query params (GET /relationships): the answer is about ONE entity (GreenlandAI 2026-10-01). entity_type ("company" | "infrastructure" | "deposit" | "project") + entity_id pin the START NODE; or entity — the one entity whose name equals it (case-insensitive), else the one whose name contains it. If several entities match, the call fails (isError, upstream_status 409, nothing charged) with upstream_body.detail = {error: "ambiguous_entity", candidates: [{entity_type, entity_id, name, country}], how_to_choose} — call again with entity_type + entity_id from one of them; each candidate carries has_site (true = it holds a site, so the measurement routes can answer about it; false = name-only or a country centre, which those routes refuse). The answer's resolved names the entity it is about, with its place block; every entity in the answer has one in places (rows point there by subject_ref / object_ref): has_site, height_class (its last measurement's, else unknown), last_measured, and the measurement routes filled in for it. WHEN NOT TO CALL: "did the site change" is entity_change; a volume is never in this answer (only entity_change's repeat_surface measures a volume change). hops (traversal DEPTH 1-10, default 1 — the BILLING UNIT: metered per hop, which is why billing_quote takes hops=), relation_type (one relation label, e.g. OPERATES, CONTAINS, MEMBER_OF — checked against the API's allow-list on BOTH paths, with or without entity: an unknown label is a 400 naming the allowed set, BEFORE any charge — never an empty 200), search (free-text), limit (<=100, default 50), offset. Metered — debited from the CALLING agent's own wallet, not the owner's (read it with the joules_balance tool). For the exact per-caller price before you call, use the billing_quote tool (free, tier-aware; returns joules_all_in) or check affordability with the joules_deficit tool; the true debit is the base joule_cost plus a 0.5% rail surcharge rounded up (a 100 J call debits 101 J) = joules_all_in. Preserves source_tier/tier_label on each edge — do not strip them. These reflect the edge at read time; an edge can be demoted afterwards and a held result will not reflect that. ⚠ CHARGING: the meter RESERVES before the query runs and SETTLES after delivery for what was actually delivered (an empty result settles to 0; a partial traversal settles for the hops delivered; a 4xx releases the reservation). An abandoned or timed-out call still settles once the backend delivers. A replay is served free only for the SAME credential + SAME idempotency key + SAME request within 15 minutes — a different payer is a different payer. Every call through this relay carries a fresh key, so a retry here is always a new charge. Price with billing_quote first; verify any charge with the billing_attempts tool (own wallet: reserved vs settled, per attempt). AS OF A DATE (GR-126-5): as_of = YYYY-MM-DD or a UTC datetime (needs one entity) answers TWICE, labelled — true_at: the edges true then in VALID time (every hop: a source dates its start on/before as_of, or — start unknown — a source stated it by then, and it had not ended), with the excluded edges counted by reason (began after / ended by / first stated after / undated); and served_at: the edges GreenlandAI SERVED then in RECORD time, each with the observation it rests on (a dated archive snapshot, the record-time epoch, or a recorded version); before 2026-07-30 what we served is not recorded by id and the answer says so. One request, one price; nothing in either answer costs nothing; a bad or future as_of is a 400, not charged. WHAT YOU PAID: the JSON response carries a top-level charged_joules — the all-in PRICE of this call — and a metering block written AFTER the settle has run: {attempt_id, settlement, settled_joules, check}. metering.settlement is whether you PAID: settled · settled_zero (empty result, nothing moved) · settle_failed (delivered but UNPAID — the wallet is then locked until it clears; the next metered call 402s naming the attempt, the amount and what clears it) · released (4xx/5xx, nothing moved) · unknown. settled_joules is what actually left the wallet (0 unless settled). A cached replay carries no block.

ParametersJSON Schema
NameRequiredDescriptionDefault
hopsNo
as_ofNo
limitNo
entityNo
offsetNo
searchNo
entity_idNo
entity_typeNo
relation_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

site_reconstructionInspect

A dated, georeferenced, textured 3D MODEL of a site (entity_type + id, or lat + lng) and its MEASUREMENTS as structured data. measurements (computed on the elevation source's own grid, every block with source and accuracy): site_extent (side, area, bbox, CRS); elevation (min, max, mean, relief, vertical datum); slope_deg (p10/p50/p90/max/mean + share per class 0–5/5–15/15–30/ 30–45/45–90°); pits (closed depressions filled to their spill level: area_m2, depth_max_m, depth_mean_m, volume_m3 ± volume_uncertainty_m3, spill and floor elevation, centre); heaps (closed mounds: area_m2, height_max_m, volume_m3 ± uncertainty above the highest separating saddle, base and top elevation, centre). Only features that CLOSE inside the extent are measured — 0 pits over a big open pit means the pit is larger than the square: widen radius_m. On a surface model a heap can be a stockpile, dump, building or rock: shape, not material. Tier follows the data: lidar_2m (USGS 3DEP lidar DSM 2 m, NAVD88, ~0.10 m) where it covers the extent, else dem_30m (Copernicus GLO-30, one epoch 2011–2015, EGM2008, < 4 m 90 %); texture NAIP (US) else Sentinel-2; the card states tier, sources, dates, datum, accuracy, dates_differ and what it is NOT (not a survey, not bare earth, not for volume certification). height_class is always prior_only (one dated surface — shapes and heights at that date, never a change) or untestable; each answer is kept in place.index as a measurement. WHEN NOT TO CALL: what changed at a site between two dates is entity_change (and only its repeat_surface is a measured volume change); who owns or operates it is relationships. The MODEL is binary glTF 2.0 (+X east, +Y up, −Z north, metres; node extras carry the CRS, origin and base elevation); the card carries its sha256 and byte size. include_model=true adds model_glb_base64 (a lidar model is about 4 MB, ~5 MB as base64); the raw file is GET /api/v1/site.reconstruction?…&format=glb on the API, which carries the height class in its X-Height-Class header (the file itself has no field for it). radius_m 100..1000 (default 300; the square's side is 2 × radius); as_of YYYY-MM-DD picks the lidar collection and texture nearest that date. An entity whose coordinates are only a country centre is refused (409, not charged). Slow: about 15–60 s. AGENT KEYS ONLY (a browser session is refused BEFORE any charge). SIDE EFFECTS: none beyond the charge — read-only. ⚠ CHARGING: priced per tier, and the tier is decided BEFORE any charge (lidar_2m where 3DEP lidar covers the site, else dem_30m): the call reserves THAT tier's price — a 30 m site never needs the lidar price in the wallet. No model (no elevation source or no clear image) costs nothing. Price: lidar_2m 2,500 J, dem_30m 1,000 J, + the 0.5% rail fee (greenlandai-api look/reconstruct_build.RECONSTRUCTION_PRICE_JOULES). Quote the exact tier with billing_quote("/api/v1/site.reconstruction", lat=…, lng=…, radius_m=…) (or entity_type + id); the JSON carries charged_joules and a price block with tier_reserved and tier_delivered.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
latNo
lngNo
as_ofNo
radius_mNo
entity_typeNo
include_modelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

trade_settlementAInspect

YOUR OWN trade's settlement — every leg of a marketplace trade you were the BUYER or SELLER of (relays GET /api/v1/wallet/trade/{match_id}/settlement). Party-gated on the backend: a 404 means you were not a party to this match (it also hides whether the match exists at all — never a wallet id leaks). Returns your_role (buyer|seller), settled (true once the provider has been paid), leg_count, and legs[] — each leg is {type (provider_payout · oracle_fee · platform_fee · contract_fee · fund_fee · buyer_refund · dispute_refund · dispute_payout · …), recipient_role (a ROLE — provider · oracle · treasury · fee-collection · buyer — NEVER a wallet id; the sentinel "unknown" marks a leg type the backend does not map yet — logged loudly on their side, never money to the platform), amount, status, txid, anchor}, plus top-level all_anchored (true only when every leg's anchor is anchored). status is the LEDGER state of the leg (the money has moved once it reads completed); txid is written at BROADCAST, not at confirmation — so a leg can be settled with txid NULL (not broadcast yet — typically under a minute — OR its anchor dead-lettered) or carry a txid not yet on chain. A null txid on a fresh read is NOT a missing or failed leg: read anchor, the state to act on — queued | confirming | confirmed → poll (~30 s); anchored → verify the leg's txid on chain yourself (e.g. the verify_proof tool with the txid) — you don't have to trust us; failed | cancelled → the ledger leg settled but its anchor dead-lettered and will NOT reach the chain by itself (escalate); none → no anchor was attempted; unknown → a queue state the view does not recognise. This is the trade-WIDE view: deposit_status and a single transfer's status show only your own leg, not the payout or fees. Own trades only. Bearer or agent key required. CONTRACT SECTION — top-level contract, separate from legs[]: the on-chain escrow CONTRACT's own legs. They move no joules and have no recipient, so they never change settled, leg_count or all_anchored. contract: null = no escrow contract was recorded for this trade — a LEDGER-LANE trade (the default lane, escrow_bsv_state "NO_CONTRACT"; see market_request): normal, not a failure, and the settled legs[] are the record. Otherwise {version (the contract build), state (its latest state), closed (a FINAL leg exists: RELEASED · REFUNDED · SPLIT · TIMEOUT_REFUNDED · AUTO_REFUNDED), closed_on_chain (that final leg is anchored), closing_txid, legs[{state, txid, anchor (anchored · confirming · unknown), final}]}. An administrative closure is not a final leg, so it reads closed=false. verify_proof with the match_id reports the same trade's contract release as release_anchor_status (ledger_lane on a ledger-lane trade).

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
legsNo
settledNo
contractNothe escrow CONTRACT's own chain legs {version, state, closed, closed_on_chain, closing_txid, legs[]}; null = no escrow contract was recorded (a ledger-lane trade)
match_idNo
leg_countNo
your_roleNo
all_anchoredNotrue only when every leg's anchor is 'anchored'

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden and meets it: it discloses party-gated 404 behavior (hiding match existence), the meaning of settled and all_anchored, the broadcast-vs-confirmation timing of txid, that a null txid is not a failure, and the ledger-lane 'contract: null' case as normal. It also differentiates contract legs from settlement legs and states auth requirements.

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 description is front-loaded with purpose and is organized into a main results section and a contract section, but it is exceptionally long and repeats some information (e.g., role explanations in legs and contract). While the density is justified by the tool's complexity, it could be tightened by leaving field-level return details to the output schema.

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?

The description is complete for an agent to call it safely: auth, gating, error semantics, field interpretations, polling guidance, escalation paths, and relation to verify_proof and deposit_status are all present. With an output schema present, the description goes beyond what is required and covers edge cases like dead-lettered anchors and no-contract trades.

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?

With schema description coverage at 0%, the description is the only source of parameter meaning. It clarifies that match_id is the trade identifier from the marketplace and that passing a match_id you are not a party to yields a 404, so the parameter semantics are workable. It doesn't provide an example or acquisition path, but the context from siblings (market_match) fills that gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: retrieving the settlement legs of a marketplace trade the caller was buyer or seller of. It explicitly scopes to 'YOUR OWN trade' and contrasts with deposit_status and a single transfer's status, distinguishing this tool's trade-wide view from siblings. The relayed endpoint is even cited.

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

Usage Guidelines5/5

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

It clearly states when to use the tool: for the trade-wide settlement view, not just one leg, and only for own trades, with bearer or agent key required. It advises polling when anchor is queued/confirming/confirmed, using verify_proof for on-chain verification, and escalating on failed/cancelled anchors, and contrasts with deposit_status and single-transfer status for narrower views.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transparency_latestInspect

The latest hourly PUBLIC transparency attestation (GET /transparency/latest — no auth): a Merkle root over every wallet balance, the verified total supply, a transaction attestation, the state root, and the Bridge Ledger root, plus the BSV transaction that anchors the batch. ANCHORING IS BATCHED, NEVER IMMEDIATE: the attestation's OP_RETURN transaction is usually broadcast within minutes of its timestamp, and it can take longer when the network is busy. Until then the newest attestation's top-level bsv_txid legitimately reads the string "pending" — that is the normal in-flight state, NOT "unanchored" and NOT an error. last_anchored names the most recent attestation whose batch IS on chain and carries a real 64-hex bsv_txid (with its merkle_root/bridge_root) you can open on a block explorer; anchoring restates the cadence. Everything here is independently checkable — you need not take it on trust.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
feesNo
volumeNo
bsv_txidNomay read "pending" for ~5h — in-flight, NOT unanchored
tx_countNo
anchoringNo
timestampNo
state_rootNo
bridge_rootNo
bridge_rowsNo
merkle_rootNo
total_supplyNo
wallet_countNo
last_anchoredNonewest attestation actually on chain
settlement_rootNo
supply_verifiedNo
algorithm_versionNo
settlement_leavesNo
verify_proofInspect

Look up one identifier (chunk_id, proof_id, match_id, transfer id, or a BSV txid) in ENYAL's public verify lookup — no auth. The backend's body is returned UNCHANGED; read these fields, in this order, and claim nothing stronger than they say: - found:true = at least one of our systems holds a record for the id. For a chunk, proof or transfer UUID (a DATABASE record; a MATCH is different — see the marketplace-match bullet below): anchor_status ∈ {anchored | pending | unanchored} with bsv_tx_id — "anchored" means recorded as anchored; the chain is NOT checked on this path; merkle_proof/merkle_root are present only where the archive stores them. To check the chain, look up the returned bsv_tx_id. - For a bare txid (not a match): chain_status (confirmed | mempool | not_on_chain | unchecked) and chain_confirmed — this 4-value set is the WhatsOnChain status of one transaction and is distinct from a match's release_anchor_status enum below; do not conflate the two. Only chain_confirmed:true is a verified anchor. mempool can still be evicted. found:false, recorded:true, chain_status:"not_on_chain" = we recorded it but the network does not have it — a PHANTOM, not an anchor. Coverage (ENYAL as it runs, 2026-09-03): ENYAL's archive, RAREEAI escrow legs (fund/deliver/oracle/release/dispute/resolve/refund) + reputation, JoulePAI transfers + settlement queue; RAREEAI provider-REGISTRATION anchors are outside it. - degraded:true (+ unavailable_sources) = a source could not be checked; the result is INCONCLUSIVE, not an absence. Only found:false, degraded:false is a clean not-found. - For a RAREEAI marketplace match the body carries TWO INDEPENDENT on-chain claims — read both, collapse neither: ledger_payout_anchor (the joule movement that settled the trade — provider payout or buyer refund — with its own txid/block_height/status; this is the anchor a customer checks today, and it nests a batched settlement_proof leaf) and escrow_contract_release_anchor (the sCrypt escrow contract's terminal leg — its confirmed transaction id is settlement_tx, surfaced flat as release_anchor_status). release_anchor_status is an ENUM in the escrow lane's own vocabulary — read the value AND its note, never reduce it to anchored/not-anchored: confirmed | pending | unreachable | unanchored_open | closed_unanchored | fund_never_anchored | pre_contract | test_resolved | in_progress | ledger_lane. Only confirmed is a chain-confirmed contract release; pending/unreachable mean a release txid EXISTS but the chain has not confirmed it yet (pending) or WhatsOnChain could not be reached (unreachable) — retry, do not read them as unanchored. Every OTHER value explains why there is no contract txid at all — a ledger-lane, closed-unanchored, fund-never-anchored, pre-contract, test-resolved or in-progress trade is settled by the joule movement in ledger_payout_anchor, NOT by a missing anchor. Bridge-Ledger (contribution/fee) events are not in THIS ENYAL lookup, but they ARE anchored — batched into the hourly transparency attestation (bridge_root; anchored in an OP_RETURN transaction, usually within minutes, longer when the network is busy), and checkable with the bridge_proof tool (newest rows read anchoring "pending" until their batch is broadcast, then carry the batch txid). Graph edges are not verifiable here. This tool never decides — it relays ENYAL's verdict fields; a proof-ref it does not return does not exist as far as this lookup can see.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countNo
foundNoa record exists in at least one source
resultsNoper-record verdicts, passed through untouched
degradedNotrue = INCONCLUSIVE, never an absence
recordedNowe hold it even if the chain does not
identifierNo
chain_statusNobare-txid lookups: confirmed|mempool|not_on_chain|unchecked
chain_confirmedNoonly true is a verified anchor
unavailable_sourcesNo
wallet_transferAInspect

Direct wallet-to-wallet transfer (POST /wallet/transfer). Requires wallet:transfer scope. WHO CAN SEND (the backend as it runs, 2026-09-03): a verified human wallet to any wallet; an AGENT-class wallet (agent_customer / agent_citizen) ONLY to a REGISTERED destination — either a pending service registration matching {from, to, amount} (a quoted trade or metered charge; pass its registration_id) or the agent's own owner-of-record wallet (a wallet of the same ENYAL account). Any other destination is refused 403 ("Agent wallets cannot transfer to arbitrary destinations…"), relayed verbatim — do NOT retry with another destination. Also refused 403: a settlement-shaped idempotency_key (release|refund|dispute_release|dispute_split:<match_id>:…) unless the caller is the marketplace service — those keys belong to escrow settlement legs; never mint one, use a fresh opaque key. LIMITS ARE LIVE CONFIG, NOT CONSTANTS: the per-transfer and per-day caps for agent classes are read by the backend on every call from JoulePAI's GET /api/v1/programme/config → wallet_transfer_limits[] (response carries version + config_md5) and change WITHOUT a deploy — read that route before planning a transfer and never plan against a remembered number; verified-human caps are on the JoulePAI docs. A transfer fee is charged to the sender (rate per the JoulePAI docs). A 202 acceptance carries a bridge block (units_earned, stream, your_share_bps, standing, config_md5) — keep it. Ineligible callers get the backend's real 403/402/422 verbatim. Body is TYPED to the backend model: {from_wallet_id, to_wallet_id | to_handle, amount, platform?, note?, idempotency_key?, privacy_mode?, include_proof?, registration_id?} — any other field is refused here.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it discloses a great deal: required wallet:transfer scope, role-based destination rules, live-read limits, fee, 202 bridge block fields, and verbatim backend errors. It even warns against planning on remembered config values and against minting settlement-shaped idempotency keys.

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 text is long, but the complexity of a live-configured, role-restricted money movement endpoint justifies it; the core action and scope appear first. All-caps flags and explicit anti-instructions are dense but purposeful, though tighter formatting would improve scannability.

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 financial write endpoint with no annotations and an opaque body parameter, the description covers auth, eligibility, limits, fees, response payload expectations, and failure behavior. An output schema exists, and the description largely makes the tool safe and correct to call.

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?

Although schema_description_coverage is 0%, the description enumerates the typed body, marks optional fields with ?, and clarifies the to_wallet_id | to_handle alternative and registration_id's role for agent-class quoted transfers. It doesn't deeply explain platform, privacy_mode, and include_proof, but their names and optional markers give reasonable semantic grounding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Direct wallet-to-wallet transfer' plus the endpoint POST /wallet/transfer, naming a precise verb, resource, and HTTP operation. This is enough to distinguish it from sibling tools like deposit, market_*, or trade_settlement, even though it doesn't explicitly name them.

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?

It lays out explicit eligibility rules (verified-human vs agent-class), required registration_id for agent-class transfers, and hard 'refused 403' cases with instructions not to retry and to use a fresh opaque key. It doesn't name sibling tools as alternatives, but the when/when-not conditions are concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedbilling_quote7 fields changed
      • addedInput schema / properties / as_of
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "As Of"
        +}
      • addedInput schema / properties / entity_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Entity Type"
        +}
      • addedInput schema / properties / id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Id"
        +}
      • addedInput schema / properties / lat
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Lat"
        +}
      • addedInput schema / properties / lng
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Lng"
        +}
      • addedInput schema / properties / radius_m
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Radius M"
        +}
      • addedOutput schema / properties / tier
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "site.reconstruction: the model tier this site gets (lidar_2m | dem_30m), decided before any charge",
        +  "title": "Tier"
        +}
  2. 1 tool update
    • Addedsite_reconstruction
  3. 1 tool update
    • Changedmarket_request2 fields changed
      • addedInput schema / $defs / PhysicalClaimBody
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "kind": {
        +      "description": "physical_change: something changed at the site between t0 and t1 · physical_state: the site shows something at t1",
        +      "enum": [
        +        "physical_change",
        +        "physical_state"
        +      ],
        +      "title": "Kind",
        +      "type": "string"
        +    },
        +    "radius_m": {
        +      "anyOf": [
        +        {
        +          "maximum": 2500,
        +          "minimum": 50,
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Radius M"
        +    },
        +    "site_entity_id": {
        +      "anyOf": [
        +        {
        +          "maxLength": 64,
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Site Entity Id"
        +    },
        +    "site_entity_type": {
        +      "anyOf": [
        +        {
        +          "enum": [
        +            "deposit",
        +            "infrastructure",
        +            "company",
        +            "project"
        +          ],
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Site Entity Type"
        +    },
        +    "site_lat": {
        +      "maximum": 90,
        +      "minimum": -90,
        +      "title": "Site Lat",
        +      "type": "number"
        +    },
        +    "site_lng": {
        +      "maximum": 180,
        +      "minimum": -180,
        +      "title": "Site Lng",
        +      "type": "number"
        +    },
        +    "t0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "description": "YYYY-MM-DD; required for physical_change, before t1, on or after 1984-03-16",
        +      "title": "T0"
        +    },
        +    "t1": {
        +      "description": "YYYY-MM-DD",
        +      "title": "T1",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "kind",
        +    "site_lat",
        +    "site_lng",
        +    "t1"
        +  ],
        +  "title": "PhysicalClaimBody",
        +  "type": "object"
        +}
      • addedInput schema / $defs / RequestBody / properties / physical_claim
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/PhysicalClaimBody"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "REQUIRED for resource_type scene_stack, change_report, site_reconstruction or satellite_imagery (refused without it): the site and date the trade is judged against — a satellite frame at that place and time, never a party's word"
        +}
  4. 2 tool updates
    • Changedhops1 field changed
      • addedInput schema / properties / as_of
        Added value: +{
        +  "default": null,
        +  "title": "As Of",
        +  "type": "string"
        +}
    • Changedrelationships1 field changed
      • addedInput schema / properties / as_of
        Added value: +{
        +  "default": null,
        +  "title": "As Of",
        +  "type": "string"
        +}
  5. 1 tool update
    • Addedplace_index
  6. 1 tool update
    • Addedentity_change
  7. 3 tool updates
    • Addedentity_history
    • Addedentity_state
    • Addedlook_through
  8. 2 tool updates
    • Changedhops2 fields changed
      • addedInput schema / properties / entity_id
        Added value: +{
        +  "default": null,
        +  "title": "Entity Id",
        +  "type": "string"
        +}
      • addedInput schema / properties / entity_type
        Added value: +{
        +  "default": null,
        +  "title": "Entity Type",
        +  "type": "string"
        +}
    • Changedrelationships2 fields changed
      • addedInput schema / properties / entity_id
        Added value: +{
        +  "default": null,
        +  "title": "Entity Id",
        +  "type": "string"
        +}
      • addedInput schema / properties / entity_type
        Added value: +{
        +  "default": null,
        +  "title": "Entity Type",
        +  "type": "string"
        +}
  9. 2 tool updates
    • Changedmarket_request1 field changed
      • addedInput schema / $defs / RequestBody / properties / contract_escrow
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "opt in to the on-chain escrow contract lane (a flat contract fee added to your lock). Takes effect ONLY where an oracle backs the trade; otherwise the trade falls to the default ledger lane with no contract and no contract fee, and the match says why (contract_escrow=false + contract_note)",
        +  "title": "Contract Escrow"
        +}
    • Changedtrade_settlement1 field changed
      • addedOutput schema / properties / contract
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "the escrow CONTRACT's own chain legs {version, state, closed, closed_on_chain, closing_txid, legs[]}; null = no escrow contract was recorded (a ledger-lane trade)",
        +  "title": "Contract"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables AI agents to query verifiable physical-world ground truth for any point on Earth — water availability, seismic and space-weather hazard, ground stability, and resource indications — with every answer backed by a Bitcoin-anchored provenance record that can be independently verified. It also lets agents check whether an Earth-science hypothesis has already been tested, list documented nulls and retractions, and run bounded controlled tests that return UNTESTABLE rather than fabricate a result.
    11
    Academic Free v1.1
  • A
    license
    C
    quality
    A
    maintenance
    MCP services for agent security preflight, source scanning, injection screening, proof-of-work policy rehearsal, carbon accounting, climate disclosure and regulatory monitoring. Use each hosted endpoint in the README. Inspect a free quote before buyer-authorized x402/USDC payment. Includes free trust and settlement tools. Maxwell rehearsal does not activate runtime protection.
    220
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources