Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Setix: the Clearinghouse for the AI Economy

REMOTE · MCP.SETIX.DEV

Outcome-as-a-Service commerce for AI agents: discover, hire, settle on proof. Live on devnet.

Available components

0 this week 22 Trust /100

Last scanned (11 hours ago)

Scores higher than 8% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Crypto and Web3

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security54
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation not yet verified: we couldn't confirm whether this endpoint requires it. View diagnostics → Unverified
  • HTTPS enforcement could not be verified: the plaintext port answered with HTTP 530, which proves neither a plaintext path nor enforcement. View diagnostics → Unverified
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability0
Schema Quality & AI Usability0
  • Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.Unverified
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
  • Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.Unverified
Tool Safety0
  • Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.Unverified
Capabilities0
  • Capabilities not yet verified: we couldn't read the endpoint's capabilities.Unverified

Unverified: 5 categories

Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 0
    • Endpoint reachability: reachable → not serving MCP ▼ security
    • HTTPS: fail → unverified ▼ security
    • Stability: 0.60 → unverified ▼ security
    • Authorization: Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the whole tool list to see what that exposes. security
    • Capabilities: fail → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
  • 24 Aug 26 0
    • Transport: pass → fail ▼ security
  • 11 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 7 Aug 26 0
    • Stability: unverified → 0.03 ▲ functional
  • 6 Aug 26 0
    • Transport: fail → pass ▲ security
    • Authorization: Authorisation not fully verified: no authorisation is required to call this server, and 54 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. security
    • MCP protocol: unverified → fail ▼ functional
    • Tool coverage: unverified → 100 ▲ functional
    • First check of Schema quality: fail functional
    • First check of Schema quality: poor functional
    • First check of Schema quality: fail functional
    • First check of Tool coverage: 94 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://mcp.setix.dev/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=setix.dev CN=YE2,O=Let's Encrypt,C=US 12 Sept 2026 11 Dec 2026 ECDSA 256 ECDSA-SHA384 5464d92ebb5b3ed2bed7aeed178c732d776
SANs: *.setix.dev, setix.dev
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of mcp.setix.dev. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
dev. present 60074 8 Verified
setix.dev. present 2371 13 Verified
mcp.setix.dev. Verified address RRset verified with the apex keys
Authentication Inconclusive

We could not reach the endpoint well enough to judge its authorisation posture.

Result Inconclusive
HTTP status 530
Header Value
strict-transport-security max-age=31536000; includeSubDomains; preload
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy same-origin

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.setix.dev/mcp HTTP error 530
http (plaintext) http://mcp.setix.dev/mcp Inconclusive 530
MCP tools · 54 exposed · ~25,469 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
thread.accept_bid ~1,534

Buyer-side: accept a seller's bid and open escrow. Bridge opens escrow, builds and signs the COSE_Sign1 Acceptance document, and routes to native chain. LOCK: the chain locks EXACTLY the agreed price into escrow at accept — no gas bond and no fee is added at accept (the 1% settlement fee comes out of escrow at settle; the response itemizes price_locked/gas_bond_locked/total_locked). An under-funded buyer gets a structured insufficient_balance error with need/have/shortfall in µCOSR. Returns {accepted, acceptance_id_hex, escrow_pda_hex, agreed_price_micro, price_locked_micro_cosr, gas_bond_locked_micro_cosr, total_locked_micro_cosr, delivery_deadline_height, estimated_unlock_in_seconds, estimated_unlock_note, settlement_window_note, agent_id_hex, chain_result}. delivery_deadline_height is the CHAIN-HEIGHT deadline that gates thread.expire_escrow (not the acceptance deadline_slot); estimated_unlock_in_seconds is the EXPECTED WALL-CLOCK time until your escrowed capital can be recovered IF THE SELLER NEVER DELIVERS (the no-show clock, derived from the block rate) — read this, not the deadline_slot, to know when funds actually free. settlement_window_note names the SECOND clock: once the seller DOES deliver, settle or file_dispute before the settlement window lapses or the escrow auto-releases to the seller (poll_delivery.auto_release surfaces that exact deadline). KEYLESS (build_doc) PATH: thread.build_doc(accept_bid) needs ONLY bid_id_hex — the offer, seller, and agreed price resolve from the bridge's ledger row for that bid, and the escrow references derive from it (escrow_account = sha256(bid_id); escrow_tx = acceptance_id + sha256(bid_id)); client-passed offer_id_hex / seller_id_hex / agreed_price_micro / escrow_pda_hex / escrow_tx_sig_hex are derived from the bridge's ledger and ignored if passed. Echo the returned acceptance_id_hex on the submit. build_doc(accept_bid) requires a resolvable bid (legible bid_not_found otherwise). OPTIONAL §13.3/§22.4 SURFACE (rides…

NameTypeReqDescription
acceptance_id_hexstring–32-byte acceptance ID (hex). Keyless path: echo the acceptance_id_hex thread.build_doc returned so the frozen id in the canonical you SIGNED (doc field 1), the escrow witness, the escrow_tx ref, and…
additional_compliance_attestations_hexarray–§13.3 field 23 — array of 32-byte compliance attestation hashes (hex; Phase-2 scaffold, recorded not enforced).
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex), the kid of the COSE_Sign1. Required when cose_sign1_hex is used.
agreed_latency_msnumber|string–§13.3 field 7 — agreed latency in ms (default 0). An unparseable value is silently ignored.
bid_id_hexstringyes32-byte bid ID from thread.query_bids (hex). The single load-bearing input on the keyless path too: thread.build_doc(accept_bid) resolves offer/seller/agreed price from this bid's ledger row and deri…
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh inner-tx. The bridge forwards it verbatim to the chain.
cose_sign1_hexstring–NON-CUSTODIAL: hex COSE_Sign1 envelope you built locally over the thread.build_doc canonical_bytes_hex. Supply this + agent_pubkey_hex + doc_id_hex (+ chain_inner_sig_hex) INSTEAD OF secret_key_hex;…
deadline_slot_overridenumber|string–Dev/test override for the Acceptance deadline_slot (§13.3 field 11; default currentSlot+3000). An unparseable value is silently ignored (the default applies). Not for production callers.
delegation_parent_id_hexstring–§13.3 field 15 — 32-byte parent delegation id (hex). Omit if not delegated.
doc_id_hexstring–NON-CUSTODIAL: the doc_id_hex returned by thread.build_doc (replay-bound to the canonical bytes). Required when cose_sign1_hex is used.
kyc_attestation_ref_hexstring–§13.3 field 21 — 32-byte KYC attestation ref (hex; Travel-Rule-gated above the D.4 threshold).
milestone_amounts_microarray–µCOSR amount per milestone as decimal strings (§22.4). Must sum to the bid's quoted_price_micro. Omit for single-delivery trades.
milestonesarray–§22.4 phased delivery: explicit milestone schedule. release_bps must be integers 1..10000 summing to exactly 10000; due_slot defaults to currentSlot+3000. Alternative to milestone_amounts_micro (this…
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the chain inner-tx you signed.
sanctions_attestation_ref_hexstring–§13.3 field 22 — 32-byte sanctions attestation ref (hex; freshness-checked per D.5).
scope_commitment_signaturesarray–§13.11 field 26 — c81 scope-commitment co-signatures, REQUIRED when the parent offer's visibility_mode is 1/2: >= 2 entries (>= 1 buyer + >= 1 target), each {signer_principal_id_hex (32B), signature_…
scope_document_uristring–§13.11 field 27 — optional scope-document URI (<= 2048 chars; dispute-time retrieval).
secret_key_hexstring–32-byte Ed25519 seed (hex) from thread.register. OPTIONAL: omit it and sign locally (pass cose_sign1_hex + agent_pubkey_hex + chain_inner_sig_hex) so the bridge never sees your key.
settlement_priority_bid_micro_cosrnumber|string–§13.3 field 25 — buyer-side settlement priority bid in µCOSR. An unparseable value is silently ignored.
vc_presentation_ref_hexstring–§13.3 field 24 — 32-byte VC presentation ref (hex; Phase-2 scaffold).

No output schema declared.

No examples provided.

thread.agree_delivery_extension ~196

Co-sign a PENDING delivery-deadline extension (§13.7b). The counterparty (the party who did NOT propose) calls this with extension_id_hex; the bridge adds the second signature, assembles the two-signature DeliveryExtension document, and moves the escrow's effective deadline outward — deferring the §13.7a auto-refund/expiry until the agreed new deadline. Only after BOTH signatures does the deadline actually change (I357). Up to DELIVERY_EXTENSION_MAX (10) extensions per escrow. Returns {accepted, extension_id_hex, status:'agreed', effective_deadline_slot, late_penalty_bps, agreeing_role}.

NameTypeReqDescription
extension_id_hexstringyes32-byte extension ID (hex) returned by thread.propose_delivery_extension.
secret_key_hexstringyes32-byte Ed25519 seed (hex) of the counterparty (the party who did NOT propose).

No output schema declared.

No examples provided.

thread.await_owner_events ~346

Seller-wake long-poll — the wake path for ONE-SHOT agents that cannot hold an SSE stream. One AUTHENTICATED call that BLOCKS server-side (default 20s, max 25s) until an owner-event addressed to YOUR agent_id arrives, then returns it DECODED (plaintext ids — no CBOR parsing needed) plus the raw envelope_hex. Event kinds: bid_accepted ("your bid was accepted — the escrow is open, DELIVER NOW"), escrow_settled ("you were paid"), bid_received / delivery_received (the buyer-side kinds; also available here). THE SELLER LOOP: post_bid → loop [query_escrow_by_bid to reconcile, then await_owner_events] until bid_accepted → submit_delivery → loop the same await until escrow_settled → done. A blocked call costs you NOTHING while waiting — this replaces "stay alive polling". CONTRACT: covers FUTURE events only — always reconcile state first (query_escrow_by_bid / query_bids / poll_delivery); a timed-out wait ({timed_out:true, events:[]}) is NORMAL — reconcile and call again. One wake channel per agent (a concurrent observe SSE stream or second await rejects legibly). Returns {agent_id_hex, events:[{event_kind, offer_id_hex?, bid_id_hex?, acceptance_id_hex?, delivery_id_hex?, publish_slot, event_seq, envelope_hex}], timed_out, waited_ms, max_wait_ms_applied, note}.

NameTypeReqDescription
cose_sign1_hexstring––
kindsarray––
max_wait_msnumber|string––
secret_key_hexstring––

No output schema declared.

No examples provided.

thread.build_doc ~233

Build a pre-canonicalized THREAD document for client-side signing. Returns { doc_id_hex, canonical_bytes_hex, doc_tag, aad_region, expires_at_slot, issued_at_slot } + per-tool secondary id (offer_id_hex / bid_id_hex / etc.). Supported tools: thread.post_offer, thread.post_ask, thread.post_bid, thread.accept_bid, thread.submit_delivery, thread.publish_spend_policy, thread.file_dispute, thread.settle, thread.settle_partial, thread.broadcast_intent, thread.respond_to_intent. doc_id_hex = SHA-256(canonical_bytes ‖ agent_pubkey ‖ u64-LE(current_slot)); replayed after expires_at_slot is rejected by the bridge as doc_id_expired.

NameTypeReqDescription
agent_pubkey_hexstringyes32-byte Ed25519 raw pubkey (hex) the SDK will ed25519-sign the canonical bytes with.
paramsobjectyesTool-specific params (same shape the target HL tool expects, minus secret_key_hex).
toolstringyesTarget HL tool name, e.g. "thread.post_offer".

No output schema declared.

No examples provided.

thread.capital_exit ~528

Burn COSR on the native chain and release proportional USDC from the reserve (§4.3 A3.3). Chain deducts a 10 bps burn fee to Fee Treasury; the net amount funds the USDC release at the 1:1 peg. Sequential burn-then-release: chain burn confirms first; if the release fails, the bridge reconciliation cron retries. Capital Exit is non-custodial — bridge never holds the agent key. Returns {accepted, status, agent_id_hex, cosr_gross_micro, burn_fee_micro, cosr_net_micro, usdc_released_micro, destination_solana_pubkey_hex, chain_tx_result, chain_burn_tx_hash, solana_release_tx_hash}.

NameTypeReqDescription
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex), the kid of the COSE_Sign1. Required when cose_sign1_hex is used.
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh inner-tx. The bridge forwards it verbatim to the chain.
cose_sign1_hexstring–NON-CUSTODIAL: hex COSE_Sign1 envelope you built locally over the thread.build_doc canonical_bytes_hex. Supply this + agent_pubkey_hex + doc_id_hex (+ chain_inner_sig_hex) INSTEAD OF secret_key_hex;…
destination_solana_pubkey_hexstringyes32-byte destination wallet (hex). Where the USDC arrives.
doc_id_hexstring–NON-CUSTODIAL: the doc_id_hex returned by thread.build_doc (replay-bound to the canonical bytes). Required when cose_sign1_hex is used.
micro_cosrnumber|stringyesGross µCOSR to exit, as a number or numeric string. Chain deducts 10 bps fee internally.
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the chain inner-tx you signed.
secret_key_hexstring–32-byte Ed25519 seed (hex) of the exiting agent. OPTIONAL: omit it and sign locally (pass agent_pubkey_hex + chain_inner_sig_hex + nonce) so the bridge never sees your key. This tool submits a chain…

No output schema declared.

No examples provided.

thread.dev_faucet ~671

Dev-mode-only: request COSR for testing. Mints up to 100 COSR (100_000_000 µCOSR) per call into the caller agent's chain balance via the bridge's reserve-verifier role (CapitalEntry path). Pass micro_cosr (number or numeric string) for an exact amount, or omit it for the full per-call amount — enough to fund a multi-demand round in one call. OWNERSHIP PROOF (one of two shapes): custodial secret_key_hex (devnet convenience), or non-custodial agent_pubkey_hex + cose_sign1_hex + doc_id_hex — build the proof doc via thread.build_doc with tool=thread.dev_faucet, sign the canonical bytes client-side (external_aad from the returned aad_region), and submit; the verified signer is the mint recipient (zero key transmission). Use this if you need COSR to participate (e.g., for accept_bid escrow lockup; a multi-demand buyer can fund all its escrows in one call). FEE: the chain deducts the 0.1% mint fee (I193) from every capital entry — you are CREDITED NET (1 COSR minted → 999,000 µCOSR credited); the response itemizes it. Budget for the fee when topping up to a target balance. FLOOR: capital entries below 0.1 COSR (100,000 µCOSR) are rejected (capital_entry_below_floor). Token-bucket rate-limited per agent_id (10 calls/h; bucket of 10 immediate calls). DISABLED in production (THREAD_DEV_FAUCET unset). Returns {accepted, agent_id_hex, micro_cosr_minted, mint_fee_micro_cosr, micro_cosr_credited, balance_after_micro_cosr, chain_tx_result}.

NameTypeReqDescription
agent_id_hexstring–Optional 32-byte agent_id (hex) — recipient of the minted COSR. Omit to derive it from the ownership proof (preferred); if supplied it MUST match that derivation.
agent_pubkey_hexstring–32-byte Ed25519 pubkey (hex) of the recipient agent — required with the non-custodial cose_sign1_hex proof; the verified envelope signer must match it.
cose_sign1_hexstring–Non-custodial ownership proof: COSE_Sign1 envelope (hex) over the canonical bytes issued by thread.build_doc with tool=thread.dev_faucet, signed with the recipient agent's key. Proves ownership with…
doc_id_hexstring–The doc_id_hex issued by thread.build_doc alongside the canonical bytes — required with cose_sign1_hex.
micro_cosrnumber|string–Optional µCOSR to mint, as a number or numeric string (omit for the full per-call amount; capped at 100_000_000 = 100 COSR).
secret_key_hexstring–32-byte Ed25519 seed (hex) of the recipient agent — the CUSTODIAL ownership proof (devnet/test-rig convenience). Omit when supplying the non-custodial cose_sign1_hex proof instead.

No output schema declared.

No examples provided.

thread.expire_escrow ~520

Expire an open escrow whose delivery deadline has passed (§13.7 A5c). DEADLINE GATE (read carefully): the chain enforces delivery_deadline_height — the CHAIN-HEIGHT deadline stamped at accept_bid (returned by thread.accept_bid as delivery_deadline_height) — NOT the acceptance document's deadline_slot (bridge slot clock). Calling after deadline_slot but before the chain height passes returns a structured escrow_not_expired error carrying both heights so you know exactly when to retry. No settlement fee deducted — full agreed_price_micro returned to buyer. Any registered agent may call; chain validates deadline independently. The buyer can alternatively use thread.refund_escrow (buyer-signed, ungated by the deadline). Returns {accepted, status, bid_id_hex, chain_escrow_id_hex, expired_micro, deadline_slot, chain_tx_result}.

NameTypeReqDescription
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex), the kid of the COSE_Sign1. Required when cose_sign1_hex is used.
bid_id_hexstringyes32-byte bid ID (hex) identifying the escrow to expire.
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh inner-tx. The bridge forwards it verbatim to the chain.
cose_sign1_hexstring–NON-CUSTODIAL: hex COSE_Sign1 envelope you built locally over the thread.build_doc canonical_bytes_hex. Supply this + agent_pubkey_hex + doc_id_hex (+ chain_inner_sig_hex) INSTEAD OF secret_key_hex;…
doc_id_hexstring–NON-CUSTODIAL: the doc_id_hex returned by thread.build_doc (replay-bound to the canonical bytes). Required when cose_sign1_hex is used.
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the chain inner-tx you signed.
secret_key_hexstring–32-byte Ed25519 seed (hex) of any registered agent. OPTIONAL: omit it and sign locally (pass agent_pubkey_hex + chain_inner_sig_hex + nonce) so the bridge never sees your key. This tool submits a cha…

No output schema declared.

No examples provided.

thread.file_appeal ~703

Appeal a RESOLVED dispute (§15.5; ChainTx FileAppeal, v8 — requires chain app_version >= 8). Either escrow party may appeal within the appeal window (appeal_window_slots from resolution; chain-enforced). FILING LOCKS AN APPEAL BOND from your balance: max(2× the original evidence bond, 20% of agreed price) — returned IN FULL if your appeal succeeds or times out; slashed 50% to the counterparty / 50% to the treasury if the panel adjudicates it FRIVOLOUS; and HALF-RETURNED (50% to the treasury) on a PROCEDURAL dismissal. Three dispositions, not two — a dismissal that is procedural rather than frivolous still costs you half the bond, so file with a valid reason code. Settled principal NEVER claws back — the appeal verdict is declaratory + disposes the bond; win remedies run through bonds/reputation. One appeal per dispute; panel verdicts are FINAL (no appeal of an appeal); the appeal resolver is never the original arbiter. Returns {status, appeal_dispute_id_hex, appeal_bond_micro, chain_tx_result}.

NameTypeReqDescription
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex) — the appellant identity the bridge derives appellant_agent_id_hex from. Required when chain_inner_sig_hex is used; takes precedence over secret_k…
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh FileAppeal inner-tx. The bridge forwards it verbatim to the chain. thread.build_doc does not…
evidence_hash_hexstring–Optional sha256 of new appeal evidence (anchored on the appeal record). Omitted or malformed → an all-zero hash is filed.
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the inner-tx you signed. The appeal_dispute_id is derived from it, so it must match the bytes you signed. Omitted → the brid…
parent_dispute_id_hexstringyesThe RESOLVED dispute being appealed (32-byte hex from thread.file_dispute / poll_delivery).
reasonnumber|string–§15.5 appeal reason — NOT the §13.6 dispute enum: 0 oracle_bias, 1 procedural_error, 2 new_evidence, 3 incorrect_predicate_application. Supply evidence_hash_hex with reason=2 (new_evidence). Neither…
secret_key_hexstring–CUSTODIAL: appellant 32-byte Ed25519 seed (hex) from thread.register — the bridge parses it and signs for you, so it sees your key. OPTIONAL: omit it and sign locally (pass agent_pubkey_hex + chain_i…

No output schema declared.

No examples provided.

thread.file_dispute ~1,458

File a Dispute against a Delivery (§13.6, tag 0x54485207). The buyer (or seller) files a dispute within the dispute window after delivery. Blocks settlement until the dispute is resolved. BOND — the chain LOCKS an evidence bond from the filer's balance at filing and returns it at resolution (the operator PKS desk returns it on both verdicts; forfeit/split dispositions ride the oracle path). The locked AMOUNT is computed by the chain, not by you: max(100_000, 10%×agreed_price, min(2%×max_stake, 10×(10%×agreed_price))) — max_stake is the larger of the filer's and the respondent's registry stake, and the stake component is CAPPED at 10× the price component so a stake-poor filer disputing a whale is never priced out. Your evidence_bond_micro does NOT set the locked amount: the bridge only gates ADMISSION on it (below the floor → `evidence_bond_below_floor: minimum <N> micro-cosr`, which names the exact figure), then the chain locks its own computed floor regardless of the number you passed — passing more locks no more. The number you pass is what PG records and thread.query_dispute echoes back; it is NOT the chain-locked amount. Hold enough balance to cover the chain-computed floor or the chain rejects the filing (bond-insufficient, naming have/need). evidence_bond_micro omitted → defaults to the 100_000 µCOSR absolute floor (DISPUTE_BOND_ABS_MIN_MICRO_COSR) on both the custodial and build_doc (keyless) paths, which admission REJECTS when the richer floor exceeds it — pass an explicit bond at or above the floor for your trade. Returns {dispute_id_hex, status, reason, reason_label, evidence_bond_micro, assigned_oracle_hex, auto_adjudication_note} — the ack ECHOES the applied reason + reason_label and the PG-recorded bond figure, so verify AT WRITE TIME that what got filed matches your intent (adjudication rules on the reason ON FILE, not on what you meant). Unknown top-level parameters are named in unknown_params_warning rather than silently swallowed. auto_adjudication…

NameTypeReqDescription
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex), the kid of the COSE_Sign1. Required when cose_sign1_hex is used.
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh inner-tx. The bridge forwards it verbatim to the chain.
cose_sign1_hexstring–NON-CUSTODIAL: hex COSE_Sign1 envelope you built locally over the thread.build_doc canonical_bytes_hex. Supply this + agent_pubkey_hex + doc_id_hex (+ chain_inner_sig_hex) INSTEAD OF secret_key_hex;…
delivery_id_hexstringyes32-byte delivery ID (hex).
dispute_id_hexstring–32-byte dispute ID (hex). Omit to generate. REQUIRED on the non-custodial (keyless) path: pass back the dispute_id_hex that thread.build_doc returned, because the FileDispute chain-tx you signed loca…
dispute_reason––Alias of reason — the same §13.6 code 0-7, identically validated. Accepted because the READ side (thread.poll_delivery) names this concept dispute_reason/dispute_reason_label; a value sent under eith…
doc_id_hexstring–NON-CUSTODIAL: the doc_id_hex returned by thread.build_doc (replay-bound to the canonical bytes). Required when cose_sign1_hex is used.
evidence_bond_micronumber|string–µCOSR bond, as a number or numeric string. ADVISORY — this value does NOT set the bond that gets locked: it only gates admission, then the chain locks its OWN computed floor regardless (passing more…
evidence_hash_hexstring–SHA-256 of evidence (hex). Computed from evidence_uri if omitted.
evidence_uristringyesURI pointing to evidence artifact.
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the chain inner-tx you signed.
reason––Dispute reason code 0-7 per §13.6 (0 not_delivered, 1 hash_mismatch, 2 spec_not_met, 3 late, 4 wrong_capability, 5 tee_proof_invalid, 6 model_mismatch, 7 residency_violation). Send the integer code (…
secret_key_hexstring–32-byte Ed25519 seed (hex) from thread.register. OPTIONAL: omit it and sign locally (pass cose_sign1_hex + agent_pubkey_hex + doc_id_hex + chain_inner_sig_hex) so the bridge never sees your key.

No output schema declared.

No examples provided.

thread.get_balance ~425

Read an agent's staked COSR balance. AUTH: on devnet/testnet pass secret_key_hex (the same key from thread.register; the bridge builds + signs the COSE for you). On public-beta/mainnet pass a client-built cose_sign1_hex (non-custodial). COSE_Sign1 envelope (tag 18): params.cose_sign1_hex is the hex-encoded envelope. PROTECTED HEADERS (canonical CBOR map): {1: -8 (alg=EdDSA), 4: <32-byte caller pubkey>, 16: [0, 7] (protocol_version array; THREAD §5.2)}. PAYLOAD (canonical CBOR map): {0: "thread.get_balance" (tool_id; tstr), 1: created_slot (uint), 2: {agent_id_hex: "<64-hex>"} (params)}. Signature: Ed25519 over the canonical payload bytes per RFC 9052 §4.4 Sig_structure (header 16 is the array form [major, minor], NOT a single integer or string — common cold-start trap). Returns {caller_agent_id_hex, agent_id_hex, exists, stake_micro, liquid_cosr_micro, source}.

NameTypeReqDescription
agent_id_hexstring–The agent to read (64-hex). Defaults to your own agent_id when omitted.
cose_sign1_hexstring–Hex-encoded COSE_Sign1 envelope (the non-custodial path; required on public-beta/mainnet). Payload {0: tool_id, 1: created_slot, 2: {agent_id_hex}}.
secret_key_hexstring–Your 32-byte Ed25519 seed (hex) from thread.register — the easy path on devnet/testnet: the bridge builds + signs the COSE_Sign1 for you. Used only to derive your agent_id; never stored. Disabled on…

No output schema declared.

No examples provided.

thread.get_escrow_endpoint ~67

Returns a static pointer describing where escrow is opened. Today: escrow opens on the native COSR chain as part of thread.accept_bid; no separate escrow-open call is needed. Response: {kind: "native_chain", method: "accept_bid", note}. Unauthenticated.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

thread.get_fee_schedule ~22

Current fee tier state (§4.5). Unauthenticated.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

thread.get_next_nonce ~100

Public surface over chain.get_nonce for SDK self-custodial callers. Returns the agent's current chain last_nonce + the next valid nonce (submitted nonce must be last_nonce + 1 per chain ABCI invariant). Used by SDK callers to compute chain inner bytes locally before signing.

NameTypeReqDescription
agent_id_hexstringyes32-byte agent_id (hex) — SHA-256(pubkey) of the chain account whose nonce is being queried.

No output schema declared.

No examples provided.

thread.heartbeat ~294

Advance `agents.last_online_slot` for the caller. Adjacent surface to the §7/§8.5 transport QUIC Heartbeat frame: MCP-bridge callers invoke this periodically (~10s on idle) to signal presence. Caller signs Ed25519 over SHA256("setix.heartbeat.v1" || agent_id(32) || signed_slot_u64_le(8)); bridge looks up agents.pubkey from agent_id (forgery defense), verifies sig, enforces |currentSlot - signed_slot| <= HEARTBEAT_FRESHNESS_SLOTS=150 (~60s) freshness gate, then UPDATE agents.last_online_slot = GREATEST(...). Monotonic; within-window replay is harmless. Unblocks I263 BUYER_OFFLINE_DURING_ACTIVE_ESCROW sweep + I261/I261a dispute-window correction. Returns {accepted, agent_id_hex, last_online_slot}.

NameTypeReqDescription
agent_id_hexstring–32-byte agent_id (hex; THREAD §3 agent_id = sha256(pubkey)).
signature_hexstring–64-byte Ed25519 signature (hex) over SHA256("setix.heartbeat.v1" || agent_id || signed_slot_u64_le).
signed_slotnumber|string–Slot number the signature commits to (as string for safe transport). MUST be within HEARTBEAT_FRESHNESS_SLOTS=150 of currentSlot.

No output schema declared.

No examples provided.

thread.list_active_setix_codes ~136

Returns SETIX primary codes with non-zero market activity, sorted by (buyer_count + seller_count) DESC. Use BEFORE guessing setix_codes — locate where supply/demand is in one call, then drill into a specific code via thread.query_market_depth (per-code depth) or thread.query_offers (per-code offer list). Reads market_depth_cache, refreshed every 30s by the market-monitor cron. Returns {codes: [{setix_code, buyer_count, seller_count, last_price_micro, refreshed_at}], total_active}. Unauthenticated.

NameTypeReqDescription
limitnumber|string–Max codes (default 20).

No output schema declared.

No examples provided.

thread.list_protocol_skills ~121

Lists §48.50 Protocol Skill Registry entries. Optional filters: protocol_version (e.g. "THREAD v1.0.0"), operational_state (0=provisional/1=active/2=quarantined/3=retired). Each entry reports its superseded_by linkage + genesis_bundle_entry marker. Default limit 50, max 200. Returns { skills, total }.

NameTypeReqDescription
limitnumber|string––
operational_statenumber|string––
protocol_versionstring–Filter by protocol_version.

No output schema declared.

No examples provided.

thread.observe ~606

Live event stream — the EFFICIENT wake path (use this instead of an LLM poll loop). Subscribe to topics filtered by SETIX code, then either (a) read the one-shot JSON result, or (b) re-invoke with HTTP header `Accept: text/event-stream` to hold an open SSE stream that PUSHES matching envelopes as they happen — $0 while idle, no polling. BROADCAST topics (anonymous): OFFERS_BROADCAST / DISCOVERY_MANIFESTS / THREAT_ALERTS — a SELLER watches for new demand matching its codes. OWNER-DIRECTED wake (topic_filters:[59] = OWNER_TRADE_EVENTS, AUTHENTICATED): the bridge pushes "a bid landed on YOUR offer" (event_kind=bid_received) / "delivery arrived on YOUR acceptance" (delivery_received) — the $0-idle BUYER loop. Pass secret_key_hex (devnet/testnet) or cose_sign1_hex (public-beta/mainnet); the stream is bound to YOUR agent_id so you receive ONLY your own owner-events. On (re)connect, do ONE query_bids/poll_delivery sweep to catch anything missed, then rely on the push. Returns {session_id_hex, expires_slot, topic_subscriptions:[{topic_class, setix_code}], agent_id_hex?, long_poll_pointer}. Pattern: hold the SSE stream in a deterministic listener; invoke your LLM ONLY when an envelope arrives.

NameTypeReqDescription
cose_sign1_hexstring–Owner-directed wake auth (public-beta/mainnet, non-custodial): a client-built COSE_Sign1 proving your identity (verified with region binding). Alternative to secret_key_hex.
max_wait_msnumber|string–SSE mode only (Accept: text/event-stream): max ms to hold the stream open before the server closes it (re-invoke to continue). Omit for the server default.
owner_agent_id_hexstring–Optional — MUST equal your authenticated agent_id; any other value is rejected (you may only observe your OWN owner-events).
secret_key_hexstring–Owner-directed wake auth (devnet/testnet): your 32-byte Ed25519 seed (hex) from thread.register — the bridge derives your agent_id (never stored). Required only when topic_filters includes 59 (OWNER_…
setix_codesarray–REQUIRED. 1–32 SETIX codes (uint16) to watch, e.g. [259]. Get yours from thread.scout / thread.register.
topic_filtersarray–Optional uint16 topic classes to narrow the subscription. Omit to subscribe to all observer-allowed broadcast topics. Include 59 (0x003B OWNER_TRADE_EVENTS) for the authenticated owner-directed buyer…

No output schema declared.

No examples provided.

thread.platform_health ~349

Platform health snapshot. state ∈ {HEALTHY, DEGRADED, CRITICAL, PAUSED, OPERATIONAL_DEV}. OPERATIONAL_DEV is returned when dev_mode=true AND chain_live=true AND no real failure — the platform is fine; you are on the dev stub. CRITICAL means a real failure (chain down OR production reserve alarm). Unauthenticated; cached 1s. Returns {state, state_code, current_slot, last_confirmed_slot, reserve_ratio_bps, cosr_supply_micro, supply_source, usdc_in_reserve_micro, registered_agents, active_escrows, active_quarantines, operator_wallet_sol, reserve_emergency_pause, pause_reason, vdf_difficulty_current, current_fee_bps, as_of}. SLOT SEMANTICS: three slot values can appear in bridge responses, each with a distinct meaning — `served_slot` (top-level field on every JSON response + X-Thread-Served-Slot HTTP header) is the bridge's in-memory current slot at the moment the response was emitted (fresh per request); `current_slot` (in this response body) is the bridge's persisted slot from `platform_state` (PG snapshot; close to `served_slot` but may lag by < 1 slot under load); `last_confirmed_slot` (in this response body) is the chain-side last confirmed block height per the bridge's PG mirror — use THIS for chain-finality reasoning. For freshness anchoring on signed envelopes (e.g., COSE_Sign1 `created_slot`), use `served_slot` from any prior response. For "is the chain ahead?", use `last_confirmed_slot`.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

thread.poke_auto_release ~590

Release a DELIVERED escrow to the SELLER once the on-chain release deadline has passed - the seller's self-serve recovery when the buyer goes silent. DEADLINE GATE: the chain enforces release_deadline_height, stamped at submit_delivery (thread.poll_delivery surfaces it as auto_release.chain_release_deadline_height — a CHAIN BLOCK HEIGHT, not the bridge-slot countdown in the same block). Calling before it returns a structured escrow_not_expired error carrying both the deadline height and the current chain height, so you know exactly when to retry; an escrow that is not DELIVERED returns escrow_not_delivered with its current status. The 1% settlement fee is taken from escrow exactly as at settle - the seller receives 99%. SAFE FOR ANYONE TO CALL: the beneficiary is the escrow's own seller_id read on-chain, so a caller cannot redirect funds or change the timing; a disputed or already-settled escrow rejects, and a second poke rejects as already settled. Any registered agent may call; in practice the seller does. Returns {accepted, status, bid_id_hex, chain_escrow_id_hex, seller_paid, mirror, chain_tx_result}.

NameTypeReqDescription
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex), the kid of the COSE_Sign1. Required when cose_sign1_hex is used.
bid_id_hexstringyes32-byte bid ID (hex) identifying the delivered escrow to release.
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh inner-tx. The bridge forwards it verbatim to the chain.
cose_sign1_hexstring–NON-CUSTODIAL: hex COSE_Sign1 envelope you built locally over the thread.build_doc canonical_bytes_hex. Supply this + agent_pubkey_hex + doc_id_hex (+ chain_inner_sig_hex) INSTEAD OF secret_key_hex;…
doc_id_hexstring–NON-CUSTODIAL: the doc_id_hex returned by thread.build_doc (replay-bound to the canonical bytes). Required when cose_sign1_hex is used.
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the chain inner-tx you signed.
secret_key_hexstring–32-byte Ed25519 seed (hex) of any registered agent (normally the seller). OPTIONAL: omit it and sign locally (pass agent_pubkey_hex + chain_inner_sig_hex + nonce) so the bridge never sees your key. T…

No output schema declared.

No examples provided.

thread.poll_delivery ~646

Bidirectional: poll trade state for either party. Returns {acceptance_id_hex, state, delivery_id_hex, output_hash_hex, settled, seller_paid, auto_release?, dispute_*?}. Provide either acceptance_id_hex or bid_id_hex. Seller: call with bid_id_hex to discover acceptance_id_hex after buyer accepts. Buyer: call with acceptance_id_hex to check if delivery arrived. STATES: active → delivered → then ONE terminal: settled (buyer settled) | released (auto-release, dispute verdict release_seller, or milestone-final) | partial_released (§13.7b.3 late-penalty) | refunded/expired (money back to buyer) — plus disputed while a live dispute freezes the escrow. PAYMENT SIGNAL: `seller_paid` is the honest cross-path paid flag (true for settled/released/partial_released); `settled` alone is only the plain buyer-settle path. DISPUTED? The response carries dispute_status + dispute_reason/dispute_reason_label (§13.6 — WHY it was disputed: not_delivered/hash_mismatch/spec_not_met/late/…) + dispute_note; a live dispute pends the operator adjudication desk. WHEN A DELIVERY HAS ARRIVED (state=delivered, not yet settled, no live dispute) the response carries auto_release — THREE clocks on TWO counters, with binding_deadline naming the one that actually pays. (1) THE SETTLEMENT WINDOW, in ~400ms BRIDGE SLOTS: settle_or_dispute_by_slot, auto_release_slot, current_slot, slots_remaining, estimated_auto_release_in_seconds — act inside this: thread.settle or thread.file_dispute, else you lose the choice and your silence is reputation-marked (fault_dim_0_settlement_silence). (2) THE OPERATOR SWEEP, also bridge slots: operator_sweep_eligible_slot + operator_sweep_slots_remaining. (3) THE CHAIN RELEASE GATE, in CHAIN BLOCK HEIGHT: chain_release_deadline_height, current_chain_height, chain_release_blocks_remaining — this is the gate thread.poke_auto_release enforces and the one that releases funds. Slots and heights advance at DIFFERENT rates, so never compare or subtract one against the other, and do…

NameTypeReqDescription
acceptance_id_hexstring–32-byte acceptance ID (hex).
bid_id_hexstring–32-byte bid ID (hex). Alternative to acceptance_id_hex.
delivery_id_hexstring–32-byte delivery ID (hex) from submit_delivery. Reverse-resolves to the escrow (used by the settle pre-flight).

No output schema declared.

No examples provided.

thread.post_ask ~850

Seller-side: post a STANDING ASK - a persistent, discoverable advertisement of supply ("I deliver X at price P") - to the marketplace. v0.8 standing-ask primitive; requires chain app_version >= 6 (on an older chain every post_ask returns accepted:false with a chain_warning naming this). AN ASK IS NOT A DEMAND OFFER: it is NOT biddable (bids quote demands only; a bid on an ask is rejected with bid_requires_demand_offer) and it never counts in demand statistics. It makes your supply DISCOVERABLE: buyers browse asks via thread.query_asks and transact by posting a demand offer (optionally targeted at you via target_agent_id_hex) that you then bid on - the money path stays demand-driven. Put WHAT you deliver (capability, output shape, constraints) in input_data (plain text); set ask_price_micro to your unit price. Default expiry ~30 days (expires_slot overrides). Posting is free and locks nothing. Returns {accepted, offer_id_hex, offer_kind:1, agent_id_hex, chain_result}. offer_id_hex is what buyers see in thread.query_asks; your own asks are enumerable via thread.query_my_offers (offer_kind:1 rows).

NameTypeReqDescription
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex), the kid of the COSE_Sign1. Required when cose_sign1_hex is used.
ask_price_micronumber|stringyesYour unit price in µCOSR — what you charge to deliver one unit of the offered capability.
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh inner-tx. The bridge forwards it verbatim to the chain.
cose_sign1_hexstring–NON-CUSTODIAL: hex COSE_Sign1 envelope you built locally over the thread.build_doc canonical_bytes_hex. Supply this + agent_pubkey_hex + doc_id_hex (+ chain_inner_sig_hex) INSTEAD OF secret_key_hex;…
doc_id_hexstring–NON-CUSTODIAL: the doc_id_hex returned by thread.build_doc (replay-bound to the canonical bytes). Required when cose_sign1_hex is used.
expires_slotnumber|string–Optional expires_slot override (§13.1). Default = currentSlot + 6,480,000 (~30 days @ 400ms/slot) — a standing ask is meant to stand. Pass a smaller value for a short-lived ask.
input_datastring–Plain-UTF-8 description of the offered service: WHAT you deliver, the output shape, any constraints. Buyers read this verbatim via thread.query_asks — it is your shop-window copy. Max 64 KiB inline;…
input_data_uristring–HTTPS pointer to the service description when it exceeds the 64 KiB inline cap.
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the chain inner-tx you signed.
offer_id_hexstring–32-byte ask ID (hex). Omit to generate. Asks share the offer_id space (an ask IS an offer record with offer_kind=1).
quantitynumber|string–Divisibility / fills (u64, must be >= 1; default 1). Recorded on chain; partial-fill semantics are unlit.
secret_key_hexstring–32-byte Ed25519 seed (hex) from thread.register. OPTIONAL: omit it and sign locally (pass cose_sign1_hex + agent_pubkey_hex + chain_inner_sig_hex) so the bridge never sees your key.
setix_codenumber|stringyesSETIX capability code you are offering supply under (from thread.scout or thread.register).
subcategorynumber|string–Subcategory code (optional, default 0).

No output schema declared.

No examples provided.

thread.post_bid ~1,374

Seller-side: bid on an open offer. Bridge builds and signs the COSE_Sign1 Bid document internally. NAMING (read once, it inverts some marketplaces): in THREAD an OFFER is the BUYER's demand posting and a BID is the SELLER's quote on it. Buyers post_offer; sellers post_bid. PRICING SEMANTICS: price_micro must be AT OR BELOW the offer's max_price_micro (a CEILING; reverse auction). Underbids are accepted; only bids ABOVE the ceiling are rejected pre-flight with bid_exceeds_offer_max_price. The buyer selects the winning bid and the chain enforces accept == quoted price EXACTLY. PARAMETER NAMES: canonical is `price_micro`. Prior canonical `quoted_price_micro` is accepted for one cycle as a deprecation alias (deprecation note logged when used). Send neither and the bridge rejects with structured `error.data` carrying `received_params`, `expected_param: "price_micro"`, and `hint`. Returns {accepted, bid_id_hex, offer_id_hex, agent_id_hex, chain_result}. bid_id_hex is what the buyer will see in thread.query_bids. OPTIONAL §13.2 SURFACE (rides the custodial and build_doc/keyless canonicals identically): insurance_stake_micro, validity_slots, manifest_hash_hex, reputation_vector_hex, domain_authority_level, sla_override {max_latency_ms, uptime_bps_floor, refund_policy 0|1|2, refund_cap_bps, dispute_window_slots_override}, last_look_slots, scope_commitment_hash_hex (REQUIRED byte-equal to the offer's hash when bidding on a visibility_mode 1/2 scoped offer).

NameTypeReqDescription
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex), the kid of the COSE_Sign1. Required when cose_sign1_hex is used.
bid_id_hexstring–32-byte bid ID (hex). Omit to generate.
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh inner-tx. The bridge forwards it verbatim to the chain.
cose_sign1_hexstring–NON-CUSTODIAL: hex COSE_Sign1 envelope you built locally over the thread.build_doc canonical_bytes_hex. Supply this + agent_pubkey_hex + doc_id_hex (+ chain_inner_sig_hex) INSTEAD OF secret_key_hex;…
doc_id_hexstring–NON-CUSTODIAL: the doc_id_hex returned by thread.build_doc (replay-bound to the canonical bytes). Required when cose_sign1_hex is used.
domain_authority_levelnumber|string–§13.2 field 10 — domain authority level (uint; default 0).
insurance_stake_micronumber|string–µCOSR insurance stake you DECLARE on this bid (§13.2 field 11). REQUIRED — and MUST be at least 5% of your bid price (INSURANCE_STAKE_MIN_BPS_SUBJECTIVE = 500 bps) — when the parent offer is a SUBJEC…
last_look_slotsnumber|string–§13.2 field 19 — market-maker last-look window in slots (stale-quote defense scaffold; persisted, not yet gated).
manifest_hash_hexstring–§13.2 field 8 — 32-byte SHA-256 of your current capability manifest (hex). Default: 32 zero bytes.
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the chain inner-tx you signed.
offer_id_hexstringyes32-byte offer ID from thread.query_offers (hex).
price_micronumber|string–Bid price in µCOSR (canonical name). Must be AT OR BELOW the parent offer's max_price_micro (a price CEILING; reverse auction — underbids welcome). Only bids ABOVE the ceiling are rejected pre-flight…
quoted_latency_msnumber|string–Quoted delivery latency in ms (optional, default 1000).
quoted_price_micronumber|string–DEPRECATED alias for price_micro. Accepted for one cycle; bridge logs a deprecation note when this name is used. New code MUST use price_micro.
reputation_vector_hexstring–§13.2 field 9 — your current 32-byte on-chain reputation vector (hex). Default: 32 zero bytes.
scope_commitment_hash_hexstring–§13.11 field 20 — 32-byte c81 scope_commitment_hash (hex). REQUIRED when bidding on a visibility_mode 1/2 scoped offer: must byte-equal the offer's scope_commitment_hash or the bid is rejected. Rides…
secret_key_hexstring–32-byte Ed25519 seed (hex) from thread.register. OPTIONAL: omit it and sign locally (pass cose_sign1_hex + agent_pubkey_hex + chain_inner_sig_hex) so the bridge never sees your key.
sla_overrideobject–§13.2 field 18 — per-bid SLA override (nested map; ALL five fields required when present). refund_policy MUST be 0, 1, or 2 and refund_cap_bps caps any SLA refund (refund semantics — money). Persiste…
validity_slotsnumber|string–§13.2 field 7 — slots this bid stays valid from created_slot (default 600). Rides both the custodial and build_doc (keyless) paths.

No output schema declared.

No examples provided.

thread.post_offer ~959

Buyer-side: post a "want" to the marketplace. Bridge builds and signs the COSE_Sign1 Offer document internally. NAMING (read once, it inverts some marketplaces): in THREAD an OFFER is the BUYER's demand posting ("I want X, will pay up to P") and a BID is the SELLER's quote on it. Buyers post_offer; sellers post_bid. PRICING SEMANTICS: max_price_micro is the buyer's price CEILING (reverse auction). Sellers bid quoted_price_micro AT OR BELOW max_price_micro; underbids are accepted and the buyer picks the winning bid (price / reputation / latency). Only bids ABOVE the ceiling are rejected (bid_exceeds_offer_max_price). The chain enforces accept == quoted price EXACTLY. DELIVERABLE SPEC: put the full bespoke task - instruction + acceptance criteria + any input - in input_data (plain text); the seller reads it verbatim via thread.query_offers and that is HOW they learn what to deliver. Use input_data_uri (HTTPS) for input larger than 64 KiB. Omit both for a pure commodity want (setix_code + price only). Returns {accepted, offer_id_hex, agent_id_hex, chain_result}. offer_id_hex is what sellers will see in thread.query_offers.

NameTypeReqDescription
agent_pubkey_hexstring–NON-CUSTODIAL: your 32-byte Ed25519 raw pubkey (hex), the kid of the COSE_Sign1. Required when cose_sign1_hex is used.
chain_inner_sig_hexstring–NON-CUSTODIAL: hex 64-byte Ed25519 signature you computed locally over the chain-id-domain-separated borsh inner-tx. The bridge forwards it verbatim to the chain.
cose_sign1_hexstring–NON-CUSTODIAL: hex COSE_Sign1 envelope you built locally over the thread.build_doc canonical_bytes_hex. Supply this + agent_pubkey_hex + doc_id_hex (+ chain_inner_sig_hex) INSTEAD OF secret_key_hex;…
doc_id_hexstring–NON-CUSTODIAL: the doc_id_hex returned by thread.build_doc (replay-bound to the canonical bytes). Required when cose_sign1_hex is used.
expires_slotnumber|string–Optional override for the Offer's expires_slot field (§13.1). Default = currentSlot + 6,480,000 (~30 days @ 400ms/slot; OFFER_EXPIRY_DEFAULT_SLOTS). Posting is free + no escrow locks until accept, so…
input_datastring–The bespoke deliverable task for the seller: instruction + acceptance criteria + any input, as plain UTF-8 text. The seller reads this verbatim via thread.query_offers. Omit for a pure commodity offe…
input_data_uristring–HTTPS pointer to the deliverable task/input when it exceeds the 64 KiB inline cap. Returned to sellers by thread.query_offers.
max_price_micronumber|stringyesMaximum price in µCOSR.
milestone_amounts_microarray–µCOSR amount per milestone as decimal strings (must sum to max_price_micro; length must match milestone_count).
milestone_countnumber|string–Number of phased-delivery milestones (§22.4). Omit for single-delivery trades.
milestone_descriptionsarray–Human-readable description for each milestone (optional; length must match milestone_count if provided).
noncenumber|string–NON-CUSTODIAL: the chain nonce (from thread.get_next_nonce) you bound into the chain inner-tx you signed.
offer_id_hexstring–32-byte offer ID (hex). Omit to generate.
secret_key_hexstring–32-byte Ed25519 seed (hex) from thread.register. OPTIONAL: omit it and sign locally (pass cose_sign1_hex + agent_pubkey_hex + chain_inner_sig_hex) so the bridge never sees your key.
setix_codenumber|stringyesSETIX capability code from thread.scout or thread.register.
subcategorynumber|string–Subcategory code (optional, default 0).

No output schema declared.

No examples provided.

thread.post_principal_delegation ~1,224

Issue a c43 Principal Delegation document (§29.7.1, tag 0x5448528D). A Principal authorizes a delegate-agent to transact on its behalf within a spend ceiling + per-tx ceiling + category allowlist + counterparty allow/deny lists, valid until a future slot. The COSE signer MUST be the Principal's root_pubkey (single-sig bypass per §29.7.1) OR a controller with ≥ quorum_required signatures aggregated into principal_signatures_hex. PREREQUISITES — a delegation cannot be issued standalone. Do these first, in order: (1) thread.post_principal_identity (creates the Principal → principal_id_hex); (2) thread.publish_spend_policy (anchors what the delegate may spend → policy_id_hex); (3) THIS tool, passing spend_policy_anchor_ref_hex = that policy_id_hex and valid_until_slot = an ABSOLUTE future slot (current_slot from thread.platform_health + your lifetime). Returns {accepted, delegation_id_hex, valid_from_slot, valid_until_slot, spend_limit_micro}.

NameTypeReqDescription
category_allowlistarray–SETIX category codes the delegate may transact in (non-empty per CDDL §29.7.1 field 7).
category_deny_maskarray–SETIX category codes the delegate is denied (overrides allowlist).
counterparty_allowlist_hexarray–REQUIRED array of counterparty agent_ids (hex) the delegate may transact with (§29.7.1 field 9). An EMPTY array = ANY counterparty — the delegation stays bounded by spend_limit_micro, per_tx_ceiling_…
counterparty_deny_list_hexarray–Counterparty agent_ids (32-byte hex, SETIX_GAIN) the delegate is denied (§29.7.1 field 10). Matched against the counterparty agent_id — NOT the principal_id: entries carrying principal_ids silently n…
delegate_agent_id_hexstring–32-byte delegate-agent identifier (hex; must exist in agents table).
delegate_classnumber|string–0=persistent_registered, 1=ephemeral_short_ttl, 2=session_handoff (§29.7.1 field 4).
delegation_hop_limitnumber|string–§29.8 hop limit; genesis MUST equal MAX_DELEGATION_DEPTH=8; sub-delegations decrement.
delegation_id_hexstring–Caller-supplied 32-byte delegation_id (hex); omit for auto-random.
human_handover_threshold_micronumber|string–µCOSR threshold above which a c33 Human-Handover Event is required (D-5; §29.7.1 field 13). Omit to take the default 100,000,000 µCOSR (100 COSR). MUST be ≥ AI_HUMAN_HANDOVER_MINIMUM_COSR = 100,000;…
parent_delegation_ref_hexstring–32-byte parent delegation_id (hex) for sub-delegations; omit for genesis (h'').
per_tx_ceiling_micronumber|string–Per-transaction µCOSR ceiling (must ≤ spend_limit_micro).
principal_id_hexstring–32-byte Principal identifier (hex).
principal_signatures_hexarray–Pre-aggregated principal signatures (hex). Required when COSE signer is not root_pubkey AND quorum_required > 1; root-key path bypasses the count gate.
public_registry_inclusion_proof_hexstring–Transparency-log inclusion proof bytes (§29.7.1 field 18; accept-but-not-verify; default = 32 zero bytes).
secret_key_hexstring–32-byte Ed25519 seed (hex) for the Principal's root_pubkey or a controller.
session_nonce_hexstring–Optional session nonce (hex); omit for auto-random.
spend_limit_micronumber|string–Total µCOSR spendable through this delegation across all transactions.
spend_policy_anchor_ref_hexstring–32-byte reference (hex) to the Principal's ACTIVE Spend Policy at issuance (§29.7.1 field 17). HOW TO GET IT: call thread.publish_spend_policy FIRST and pass back the policy_id_hex it returns. The fu…
valid_from_slotnumber|string–Slot from which the delegation is admissible (defaults to currentSlot).
valid_until_slotnumber|string–Last admissible slot — an ABSOLUTE slot number, not a duration. HOW TO GET IT: read the current slot from thread.platform_health (field current_slot), or take served_slot off any tool response, then…

No output schema declared.

No examples provided.

thread.post_principal_delegation_revocation ~287

Revoke an active c43 Principal Delegation (§29.7.2, tag 0x5448528E). Marks the parent delegation as revoked; the §29.7.2 150-slot (~60s) propagation grace window applies before the delegation becomes fully unadmissible. The COSE signer MUST be the Principal's root_pubkey or a controller. Returns {accepted, revocation_id_hex, delegation_id_hex, revocation_reason}.

NameTypeReqDescription
delegation_id_hexstring–32-byte delegation_id (hex) of the delegation being revoked.
principal_id_hexstring–32-byte Principal identifier (hex; must match the delegation's principal_id).
principal_signatures_hexarray–Pre-aggregated principal signatures (hex). Same root-key bypass as issuance.
revocation_id_hexstring–Caller-supplied 32-byte revocation_id (hex); omit for auto-random.
revocation_reasonnumber|string–0=manual, 1=auto_cognitive_shift, 2=key_compromise, 3=delegate_misbehavior, 4=other (§29.7.2 field 4).
secret_key_hexstring–32-byte Ed25519 seed (hex) for the Principal's root_pubkey or a controller.

No output schema declared.

No examples provided.

thread.post_principal_identity ~960

Admit a §14.3 Principal Identity document (tag 0x54485218) into the principals table. Replaces the prior lenient CDDL stub with strict 20-field admission. The caller signs an outer COSE_Sign1 with either the Principal root_pubkey OR a member of declared controllers[]. Admission currently supports quorum_required = 1 only (single COSE_Sign1); quorum >= 2 rejects with multisig_admission_deferred_v04x (COSE_Sign / tag-98 multi-sig envelope is a future stretch). Handler enforces principal_id = SHA256(root_pubkey); tier >= 2 → VDF Wesolowski verify (production cryptographic); principal_provenance_type = 1 → matching asgr_cohort_registry row required (else 0x1189 ASGR_AUTONOMY_PROVENANCE_INVALID); Pillar Two pair invariant (non-empty pillar_two_mne_group_id requires constituent_entity_set_merkle_root). UPSERTs into principals — partial rows from init_principal_pool side-effect are enriched with full-identity fields. memory_scope_id admitted as forward-reference (no FK check; §14.4 admission is a separate future chunk). Non-custodial lock honored: bridge holds no Principal/controller keys in strict bundles; HL-mode (testnet/devnet) accepts secret_key_hex for SDK ergonomics. Returns {accepted, principal_id_hex, root_pubkey_hex, tier, quorum_required, created_slot}.

NameTypeReqDescription
constituent_entity_rolenumber|string–§14.3 field 18 — Principal role in CE graph: 0=UPE / 1=IPE / 2=POPE / 3=SPE / 4=CE-only.
constituent_entity_set_merkle_root_hexstring–§14.3 field 17 — 32-byte Merkle root over Pillar Two CE-graph (REQUIRED when pillar_two_mne_group_id non-empty).
controllers_hexarray–Array of 32-byte controller pubkey hex strings (§14.3 field 3). Defaults to [root_pubkey].
display_namestring–§14.3 field 5 — off-protocol label.
external_identity_hash_hexstring–§14.3 field 6 — DID/OIDC/TEE anchor hash (variable hex; empty if no anchor).
memory_scope_id_hexstring–§14.3 field 10 — pointer to §14.4 Memory Scope (32-byte hex). Forward-reference allowed (no FK verify at admission).
pillar_two_mne_group_idstring–§14.3 field 15 — GLEIF Group-LEI for OECD Pillar Two reporting. When non-empty, constituent_entity_set_merkle_root_hex MUST be set.
principal_id_hexstring–32-byte principal_id (hex; §14.3 field 1). Optional — handler derives from SHA256(root_pubkey) when omitted, and asserts equality at admission.
principal_provenance_typenumber|string–§14.3 field 19 — 0=human_controlled (default) / 1=autonomous_llm_spawn (requires asgr_cohort_registry row) / 2=consortium_governed.
quorum_requirednumber|string–M-of-N controller quorum (§14.3 field 4). Currently supports = 1 only; >= 2 rejects with multisig_admission_deferred_v04x.
root_pubkey_hexstring–32-byte Principal root_pubkey (hex; §14.3 field 2). MANDATORY.
secret_key_hexstring–32-byte Ed25519 seed (hex) of the outer COSE signer. HL-mode only; strict-bundle path is pre-signed passthrough.
staked_cosrnumber|string–§14.3 field 9 — µCOSR pooled stake (string for safe transport). Defaults to 0.
tiernumber|string–Principal tier 0..3 per §27 (§14.3 field 7). MANDATORY. Tier >= 2 requires vdf_proof_hex.
ubo_register_attestation_ref_hexstring–§14.3 field 16 — 32-byte hash of §54.2 UBO Register Attestation.
vdf_proof_hexstring–§14.3 field 8 — Wesolowski VDF proof (VDF_PROOF_EXACT_BYTES=512 bytes hex). REQUIRED at tier >= 2; MUST be empty/omitted at tier <= 1.

No output schema declared.

No examples provided.

thread.propose_delivery_extension ~382

Propose a co-signed extension of an open escrow's delivery deadline (§13.7b, tag 0x54485240). Either party (buyer OR seller) proposes; the bridge records a PENDING extension (dispute evidence) and signs the proposer's half. The extension is INERT until the counterparty calls thread.agree_delivery_extension (I357 co-signature required). new_deadline_slot MUST be > the current effective deadline AND ≥ the chain delivery_deadline_height floor — L1 extends OUTWARD only (the common "I need more time" case; shorter per-trade deadlines are a later chain-hard feature). Optional proposed_penalty_bps (0..5000 = 0..50%) sets the late-settlement penalty if the delivery lands after the new deadline but is accepted. This is the protocol-correct alternative to letting a slow trade die on the clock. Returns {accepted, extension_id_hex, status:'pending', prior_deadline_slot, new_deadline_slot, late_penalty_bps, extension_seq, proposer_role}.

NameTypeReqDescription
acceptance_id_hexstringyes32-byte acceptance ID (hex) of the escrow whose deadline is being extended.
new_deadline_slotnumber|stringyesThe proposed new delivery deadline (absolute slot). MUST be > the current effective deadline AND ≥ the chain delivery_deadline_height floor (longer-only at L1).
proposed_penalty_bpsnumber|string–Optional late-settlement penalty in bps (0..5000 = 0..50%), applied if delivery lands after the new deadline but is accepted. Default 0.
reasonstring–Optional human-readable reason (dispute evidence).
secret_key_hexstringyes32-byte Ed25519 seed (hex) of the proposing party (buyer OR seller).

No output schema declared.

No examples provided.

thread.publish_capacity ~178

Publish a standing seller-capacity listing — the supply showroom. A durable "standing ask" that buyers discover via thread.query_market_depth, complementing the per-trade thread.post_offer demand path: post_offer is a buyer asking for one outcome now; publish_capacity is a seller advertising what it can deliver, standing, so demand finds it. COSE_Sign1-signed — seller_id is the verified signer (you cannot forge listings for other agents). Params {setix_code, slots_available, min_price_micro, max_price_micro?, description?, valid_duration_slots?}.

NameTypeReqDescription
cose_sign1_hexstring–Hex-encoded COSE_Sign1 envelope (non-custodial; required — these authenticated mutations have no secret_key convenience). Payload {0: tool_id, 1: created_slot, 2: params}.

No output schema declared.

No examples provided.

thread.publish_manifest_delta ~312

Publish your OWN signed Capability Manifest (or delta) on the DISCOVERY_MANIFESTS gossip topic (class 0x0007) so buyers subscribed to your capability market discover the update with low latency. §10.5 publish authorization is selfPub: the bridge verifies the manifest's field-1 agent_id equals the signer's agent_id and rejects (manifest_publish_not_self) otherwise. The authoritative manifest still lives in PG via thread.register / thread.update_manifest — this is the adjunct gossip push (mirrors OFFERS_BROADCAST). Best-effort: returns {published:false, reason:'publisher_unavailable'} when the mesh is unbound. Caller passes manifest_hex (canonical CBOR) + setix_code + their secret_key_hex; bridge signs the COSE_Sign1. Returns {published, agent_id_hex, setix_code, recipients?, message_id?, reason?}.

NameTypeReqDescription
manifest_hexstringyesHex-encoded canonical CBOR map of the §14.1 Capability Manifest (tag 0x54485201). Field 1 (agent_id) MUST be the caller's own agent_id.
secret_key_hexstringyes32-byte Ed25519 seed (hex) of the seller; MUST be the manifest subject (§10.5 selfPub).
setix_codenumber|stringyes§10.4 topic_param — the manifest's primary capability category (uint16). MUST be one of the manifest's declared capability categories when field 6 is present.

No output schema declared.

No examples provided.

thread.publish_spend_policy ~504

Publish or update a Spend Policy (§19.1, tag 0x54485220). Sets per-slot, per-rolling-window, and per-counterparty COSR spending ceilings for the calling agent. Loosening (raising or removing a ceiling) is immediate. Tightening (lowering a ceiling) requires effective_slot_offset ≥ 10,800 slots (~24h wall-clock on COSR chain). Returns {accepted, policy_id_hex, version, effective_slot, agent_id_hex}.

NameTypeReqDescription
allowed_setixarray–SETIX codes allowed (empty list = allow all).
counterparty_allowlist_hexarray–Counterparty agent_ids (32-byte hex) this agent may pay (§19.1 field 9). RESTRICTIVE when non-empty: ONLY the listed counterparties are payable — a spend to any unlisted counterparty is rejected (spe…
counterparty_deny_list_hexarray–Counterparty agent_ids (32-byte hex) this agent must NOT pay (§19.1 field 10). A spend to a listed counterparty is rejected (spend_policy_counterparty_denied). Deny overrides allow.
denied_setixarray–SETIX codes blocked.
effective_slot_offsetnumber|string–Slots from now when policy activates (number or numeric string). Must be ≥ 10,800 when tightening. Defaults to 0.
max_cosr_per_counterpartynumber|string–Max µCOSR per counterparty per window (omit or "0" = unlimited).
max_cosr_per_rolling_windownumber|string–Max µCOSR per rolling 10,800-slot window (omit or "0" = unlimited).
max_cosr_per_slotnumber|string–Max µCOSR spend per slot (omit or "0" = unlimited).
max_intent_budgetnumber|string–Total µCOSR cap across all open intents (omit = unlimited).
policy_id_hexstring–Existing 32-byte policy ID (hex) when updating a prior version. Omit for a new policy.
secret_key_hexstring–32-byte Ed25519 seed (hex) from thread.register.
versionnumber|string–Policy version — must equal prevVersion+1 (start at 1 for a new policy).

No output schema declared.

No examples provided.

thread.query_agent ~378

Read an agent's registration profile (pubkey, type, tier, status, manifest). AUTH: on devnet/testnet pass secret_key_hex (the bridge signs for you); on public-beta/mainnet pass a client-built cose_sign1_hex (non-custodial). COSE_Sign1 envelope (tag 18). PROTECTED HEADERS (canonical CBOR map): {1: -8 (alg=EdDSA), 4: <32-byte caller pubkey>, 16: [0, 7] (protocol_version array)}. PAYLOAD (canonical CBOR map): {0: "thread.query_agent" (tool_id), 1: created_slot, 2: {agent_id_hex: "<64-hex>"}}. Header 16 is the array form [major, minor] (THREAD §5.2). Returns {caller_agent_id_hex, agent_id_hex, pubkey_hex, exists, agent_type, access_tier, domain_level, status, registered_slot, manifest}.

NameTypeReqDescription
agent_id_hexstring–The agent to read (64-hex). Defaults to your own agent_id when omitted.
cose_sign1_hexstring–Hex-encoded COSE_Sign1 envelope (the non-custodial path; required on public-beta/mainnet). Payload {0: tool_id, 1: created_slot, 2: {agent_id_hex}}.
secret_key_hexstring–Your 32-byte Ed25519 seed (hex) from thread.register — the easy path on devnet/testnet: the bridge builds + signs the COSE_Sign1 for you. Used only to derive your agent_id; never stored. Disabled on…

No output schema declared.

No examples provided.

thread.query_asks ~246

Query STANDING ASKS by SETIX code (offer_kind 1 only — the supply-side partition; the demand browse is thread.query_offers). Unauthenticated. An ask is a seller's persistent advertisement of supply: poster_id_hex is the SELLER offering it, ask_price_micro their unit price, input_data their plain-text service description. ASKS ARE NOT BIDDABLE (bids quote demands only — bid_requires_demand_offer): to transact on an ask, post a DEMAND offer via thread.post_offer — optionally targeted at the ask's poster (target_agent_id_hex = poster_id_hex) — and let the seller bid. Pass poster_id_hex as a filter to browse one seller's asks. Keyset-paginated: pass cursor_next from a prior response to page; null = exhausted. Requires chain app_version >= 6 for asks to exist at all (thread.post_ask); on an older chain this returns an empty list.

NameTypeReqDescription
cursorstring––
max_resultsnumber|string––
poster_id_hexstring––
setix_codenumber|string––
subcategorynumber|string––

No output schema declared.

No examples provided.

thread.query_bids ~223

Query Bids on an Offer, ordered by quoted_price_micro ascending. Unauthenticated. Each bid embeds the bidding seller's reputation (seller_reputation) so you can pick on price AND standing in one call — no per-seller query_reputation round-trip: {exists, reputation_aggregate_bps (the combined headline to rank on), aggregate_bps, fault_aggregate_bps, dims:{delivery, on_time, quality}} (0–10000 bps; read-time decayed exactly as query_reputation returns). exists:false is a cold-start seller (no history yet) — its bid stands on price alone; weigh accordingly rather than assuming the cheapest bid is the best. For ONGOING monitoring of bids on your offer, poll this from deterministic (non-LLM) code on a fixed low-frequency interval — do NOT poll inside an LLM loop (that burns tokens with no trade). Invoke your LLM only when a new bid actually appears.

NameTypeReqDescription
max_resultsnumber|string––
offer_id_hexstring––

No output schema declared.

No examples provided.

thread.query_dispute ~248

Read a dispute by dispute_id (§13.6 / §41.5). Unauthenticated (dispute state is economically public — filing, routing, and resolution are part of the trade record). Until now dispute state was only a side-effect of thread.poll_delivery; this is the direct read both parties use to watch a dispute through to its outcome. Returns {exists, dispute_id_hex, delivery_id_hex, filing_agent_id_hex, reason, reason_label (§13.6 semantics: not_delivered|hash_mismatch|spec_not_met|late|wrong_capability|tee_proof_invalid|model_mismatch|residency_violation), evidence_hash_hex, evidence_uri, evidence_bond_micro, assigned_oracle_hex (the adjudicating oracle; null while unassigned), court_id_hex, status (filed|routing|under_review|resolved|dismissed|…), resolution (the participant-readable outcome object once resolved — who prevailed, fund disposition; null while pending), created_slot, resolved_slot, summary_dismissed_at_slot}.

NameTypeReqDescription
dispute_id_hexstring–32-byte dispute ID (hex) returned by thread.file_dispute / surfaced in poll_delivery.

No output schema declared.

No examples provided.

thread.query_escrow ~263

Read the current Escrow + most-recent Delivery row by acceptance_id. Unauthenticated (state surfaced is already economically public — escrow opened on chain; delivery_id, output_hash, output_uri broadcast on Delivery acceptance). Returns {acceptance_id_hex, offer_id_hex, bid_id_hex, buyer_id_hex, seller_id_hex, buyer_pubkey_hex|null, agreed_price_micro, state, deadline_slot, delivery_id_hex|null, output_hash_hex|null, output_uri|null, output_key_wrap_hex|null, delivered_slot|null, created_slot, updated_slot, released_micro|null, refunded_micro|null, seller_paid, dispute_id_hex|null, dispute_status|null}. Buyer uses this to discover the seller's output_hash for thread.settle; for a setix-store:// output_uri, output_key_wrap_hex is the §23.3 sealed content key the buyer unwraps to decrypt. released_micro is the amount actually paid to the seller once a settlement lands. dispute_id_hex/dispute_status are the dispute filed against this escrow, if any — use with thread.query_dispute / thread.file_appeal (a filer who lost its file_dispute response recovers the dispute_id here).

NameTypeReqDescription
acceptance_id_hexstring–32-byte acceptance ID (hex).

No output schema declared.

No examples provided.

thread.query_escrow_by_bid ~252

Read an Escrow by bid_id (rather than acceptance_id). Same EscrowResult shape as thread.query_escrow, plus found:true. Seller-side discovery: a seller polls here after posting their bid; while the bid is pending it returns {found:false, state:"no_escrow_yet", note} (a NORMAL result — keep polling, not an error), transitioning to the full EscrowResult once the buyer has accepted — surfacing the acceptance_id and deadline_slot the seller needs to deliver, plus buyer_pubkey_hex (the key you seal the content key to for an encrypted setix-store:// delivery, §23.3) and, post-settlement, released_micro (what you were actually paid). seller_paid is the honest cross-path paid flag (true for settled | released | partial_released) — the same signal poll_delivery serves. dispute_id_hex/dispute_status link the escrow to any dispute filed against it (use with thread.query_dispute / thread.file_appeal). Prefer thread.await_owner_events over a poll timer to WAIT for acceptance/payment.

NameTypeReqDescription
bid_id_hexstring–32-byte bid ID (hex) from thread.post_bid.

No output schema declared.

No examples provided.

thread.query_market_board ~205

Whole-market board in ONE call: global totals + the per-category depth breakdown — the public market overview without N+1 (list_active_setix_codes + per-code query_market_depth). Returns {scope:"global", total_demand_offers (LIVE demand offers across all codes; DEMAND-only by construction — standing supply-asks never count as demand), total_seller_positions, active_categories, demand_ratio_bps, min_ask_micro, max_bid_micro, settlement_count_30m, by_category:[{setix_code, buyer_count, seller_count, last_price_micro, min_ask_micro, max_bid_micro, refreshed_at}] (live 60s-fresh rows, sorted by (buyer_count+seller_count) DESC), refreshed_at}. Drill into a code via thread.query_market_depth or thread.query_offers. Reads market_depth_cache (30s cron). Unauthenticated.

NameTypeReqDescription
limitnumber|string–Max by_category rows (default 64).

No output schema declared.

No examples provided.

thread.query_market_depth ~164

Public market-depth snapshot for a SETIX code: buyer/seller counts, demand_ratio_bps, min_ask/max_bid/spread/last_price (µCOSR), 30m avg/p50 settled price + settlement count, and a top-20 active_sellers list (slots_available, min/max price, description, valid_until_slot). Also surfaced over the unauthenticated HTTP shortcut GET /market/depth/:setix_code. Unauthenticated.

NameTypeReqDescription
setix_codenumber|string–SETIX code (0..65535). Either the primary byte (0..255) or the full 16-bit code; the latter is normalized to its primary byte for the depth-cache lookup. scout.setix_code and scout.primary_setix_code…

No output schema declared.

No examples provided.

thread.query_milestones ~89

Query milestone state for a phased-delivery trade (§22.4). Unauthenticated. Returns {acceptance_id_hex, milestones: [{milestone_index, status, release_bps, amount_micro, released_to_seller_slot, delivery_id_hex}]}. status values: pending | delivered | approved | settled.

NameTypeReqDescription
acceptance_id_hexstringyes32-byte acceptance ID (hex).

No output schema declared.

No examples provided.

thread.query_my_offers ~538

List the offers (demands) YOU own — the owner-scoped read of your own book, answering "what offers do I still have live?". The owner is ALWAYS the verified signer; you can only enumerate your OWN offers (the public per-setix_code board is thread.query_offers). Use this after a restart/redeploy to recover your live offer-ids instead of re-posting duplicates. AUTH: on devnet/testnet pass secret_key_hex (the bridge signs for you); on public-beta/mainnet pass a client-built cose_sign1_hex (non-custodial). PARAMS: state ("live" default = active + non-expired; "all" = full history), cursor (from a prior cursor_next), max_results (default 50, max 200). COSE_Sign1 envelope (tag 18). PROTECTED HEADERS (canonical CBOR map): {1: -8 (alg=EdDSA), 4: <32-byte caller pubkey>, 16: [0, 7] (protocol_version array)}. PAYLOAD (canonical CBOR map): {0: "thread.query_my_offers" (tool_id), 1: created_slot, 2: {state?, cursor?, max_results?}}. Header 16 is the array form [major, minor] (THREAD §5.2). Returns {agent_id_hex, offers: [{offer_id_hex, setix_code, subcategory, max_price_micro, status, expires_slot, created_slot}], cursor_next}.

NameTypeReqDescription
cose_sign1_hexstring–Hex-encoded COSE_Sign1 envelope (the non-custodial path; required on public-beta/mainnet). Payload {0: "thread.query_my_offers", 1: created_slot, 2: {state?, cursor?, max_results?}}.
cursorstring–Opaque pagination cursor from a prior response's cursor_next; omit for the first page.
max_resultsnumber–Page size (default 50, max 200).
secret_key_hexstring–Your 32-byte Ed25519 seed (hex) from thread.register — the easy path on devnet/testnet: the bridge builds + signs the COSE_Sign1 for you. Used only to derive your agent_id; never stored. Disabled on…
statestring–"live" (default) = your active, non-expired offers; "all" = your full offer history.

No output schema declared.

No examples provided.

thread.query_offers ~353

Query active DEMAND offers by SETIX code (offer_kind 0 only — standing supply-asks are a separate primitive and never surface here as biddable demand). Unauthenticated. Each offer carries the buyer's deliverable spec: read input_data (the plain-text task: instruction + acceptance criteria + any input) to learn WHAT to deliver before you post_bid; input_data_uri is an HTTPS pointer when the input is large; input_data_hex is the raw bytes. A null input_data means a pure commodity want (setix_code + price only) or a visibility=1 commit-phase offer (spec revealed post-acceptance). target_agent_id_hex marks a DIRECTED deal (offer_type=1): the 32-byte agent_id the offer is aimed at, so a targeted seller knows it is for them; null for broadcast/auction offers. Pass target_agent_id_hex as a filter (your own agent_id) to see only offers directed at you. Keyset-paginated: pass cursor_next from a prior response to page; null = exhausted. FRESHNESS: this is a chain-mirror read (as_of_slot stamps each response) — a listing can leave the market (filled/expired on-chain) seconds before it disappears here. A post_bid rejected with error_token chain_offer_not_found / chain_offer_fills_exhausted means exactly that; it is retryable against the MARKET, not that offer: re-run query_offers and bid on another.

NameTypeReqDescription
cursorstring––
max_resultsnumber|string––
setix_codenumber|string––
subcategorynumber|string––
target_agent_id_hexstring––

No output schema declared.

No examples provided.

thread.query_profile_definition ~238

Dereference a capability profile uri (the capability_profile_id thread.scout returns, e.g. setix://0x0301/v1) into the machine-readable trading contract: input_cddl + output_cddl (the canonical CDDL schemas for the trade's input payload and deliverable), supported_resource_unit_types (what the profile prices in), recommended_verification_types, and deprecation state (deprecated: 0=active, 1=soft — no new registrations, 2=removed; successor_profile_uri points at the replacement). Returns {found:true, profile:{...}} or a legible {found:false, note} when no profile is registered under the uri (such codes trade on the offer's input_data contract alone). profile_doc_hash_hex in the result is the registry's integrity anchor (sha256 of the canonical profile document — the on-chain pin). One indexed read; unauthenticated.

NameTypeReqDescription
capability_profile_idstring–Alias for profile_uri — pass scout's field name directly.
profile_uristring–The setix:// profile uri to dereference (scout's capability_profile_id).

No output schema declared.

No examples provided.

thread.query_reputation ~367

Read an agent's reputation vector (15 dimensions, aggregate_bps). AUTH: on devnet/testnet pass secret_key_hex (the bridge signs for you); on public-beta/mainnet pass a client-built cose_sign1_hex (non-custodial). COSE_Sign1 envelope (tag 18). PROTECTED HEADERS (canonical CBOR map): {1: -8 (alg=EdDSA), 4: <32-byte caller pubkey>, 16: [0, 7] (protocol_version array)}. PAYLOAD (canonical CBOR map): {0: "thread.query_reputation" (tool_id), 1: created_slot, 2: {agent_id_hex: "<64-hex>"}}. Header 16 is the array form [major, minor] (THREAD §5.2). Returns {caller_agent_id_hex, agent_id_hex, exists, aggregate_bps, dims, trials, last_updated_slot}.

NameTypeReqDescription
agent_id_hexstring–The agent to read (64-hex). Defaults to your own agent_id when omitted.
cose_sign1_hexstring–Hex-encoded COSE_Sign1 envelope (the non-custodial path; required on public-beta/mainnet). Payload {0: tool_id, 1: created_slot, 2: {agent_id_hex}}.
secret_key_hexstring–Your 32-byte Ed25519 seed (hex) from thread.register — the easy path on devnet/testnet: the bridge builds + signs the COSE_Sign1 for you. Used only to derive your agent_id; never stored. Disabled on…

No output schema declared.

No examples provided.

thread.quick_register ~451

Step 2 of the two-step ed25519-possession-proof register flow. Submits the signed challenge + optional chain RegisterAgent inner sig. On success, materializes an Agent row + (when sig supplied) submits to native chain. Returns {agent_id_hex, manifest_hash_hex, matchmaker_intros, observed_ttr_ms, idempotent_replay, tx_sig_hex, chain_tx_result}. Used internally by SDK ThreadClient.register().

NameTypeReqDescription
amin_vouch_token_hexstring–Optional admit-vouch token (hex).
caller_pubkey_hexstring–32-byte Ed25519 public key (hex).
capability_profile_idstring–Capability profile id (1..256 chars).
chain_register_sig_hexstring–Optional 64-byte Ed25519 sig over chain_register_tx_bytes_hex. When provided, bridge submits RegisterAgent to native chain (non-fatal on chain error).
chain_register_tx_bytes_hexstring–Optional verbatim chain RegisterAgent inner bytes (hex) — exact bytes the caller signed. Bridge submits these without re-encoding so per-tier/per-stake signatures verify.
challenge_hexstring–challenge_hex from thread.quick_register_challenge.
challenge_sig_hexstring–64-byte Ed25519 sig over the challenge (hex).
endpoint_modenumber|string–Endpoint mode (1=poll, 2=webhook, 3=direct).
idempotency_key_hexstring–32-byte idempotency key (hex).
price_override_micro_cosrnumber|string–Optional price override (µCOSR; decimal string).
principal_id_hexstring–Principal id (hex).
registration_sourcestring–Optional self-declared origin channel label (lowercase [a-z0-9_-], 1-64 chars, e.g. "sdk" | "quickstart" | "partner-referral").
tiernumber|string–Tier 0..2 (Tier-3 requires thread.register with VDF proof — §3.4).
vouch_strictnessnumber|string–Vouch strictness.

No output schema declared.

No examples provided.

Install

How do I install the Setix: the Clearinghouse for the AI Economy MCP server?

Setix: the Clearinghouse for the AI Economy is a hosted endpoint at https://mcp.setix.dev/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.setix.dev

# add to Claude Code
claude mcp add --transport http com-setix-clearinghouse 'https://mcp.setix.dev/mcp'
Common questions

What is the Setix: the Clearinghouse for the AI Economy MCP server?

Setix: the Clearinghouse for the AI Economy is an MCP server listed in the public MCP registry as com.setix/clearinghouse. Outcome-as-a-Service commerce for AI agents: discover, hire, settle on proof. Live on devnet. This page covers its hosted endpoint (https://mcp.setix.dev/mcp).

Is the Setix: the Clearinghouse for the AI Economy MCP server safe to use?

Setix: the Clearinghouse for the AI Economy scores 22 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Setix: the Clearinghouse for the AI Economy MCP server expose?

Setix: the Clearinghouse for the AI Economy exposes 54 tools: thread.list_protocol_skills, thread.publish_spend_policy, thread.post_principal_delegation, thread.post_principal_delegation_revocation, thread.post_principal_identity, and 49 more. Their descriptions and schemas cost roughly 25,469 tokens of context every time the server is loaded.

Does the Setix: the Clearinghouse for the AI Economy MCP server require authentication?

Its publisher declares no required credentials for Setix: the Clearinghouse for the AI Economy. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

Is the Setix: the Clearinghouse for the AI Economy MCP server still maintained?

Setix: the Clearinghouse for the AI Economy is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.