Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "onchain_agent_get_changes"
⟨66 unchanged words⟩ and retirements. { since, until, window_days, next_since, counts:{added,changed,removed}, added:[...] ⟨7 unchanged words⟩ ...], coverage:{...}, full_export }. CURSOR: `next_since` is the date to pass as `since` on your next call. It starts the next window at a snapshot taken before this read, so a change cannot fall between two calls; it overlaps by a couple of days, so dedupe by slug. To watch a fixed list of listings, call on a schedule with `since` = the last `next_since` and look for your slugs in each lane. A call with no argument returns a truncated sample: take the cursor from a call with `since` or detail "full", not from the sample. COVERAGE (also stated in the response): `added` ⟨24 unchanged words⟩ resolution, so a quiet copy edit IScaught; store baseline_date as your cursor.caught. `changed` is the richer event log (score ⟨102 unchanged words⟩ "2026-08-23" } - "sync my copy" or "watch my list" -> { since:<your<thelastnext_sincesyncofdate>your last call> }
Changed the definition of "fetch" and "search"
⟨355 unchanged words⟩ ,"name":{"type":"string"},"pointer":{"const":true,"type":"boolean"},"score":{"type":"number"},"slug" ⟨56 unchanged words⟩
⟨304 unchanged words⟩ ,"name":{"type":"string"},"pointer":{"const":true,"type":"boolean"},"score":{"type":"number"},"slug" ⟨21 unchanged words⟩
Added "onchain_agent_join_passport" and "onchain_agent_passport_action"; changed the definition of "onchain_agent_register_agent" (46 tools before, 48 now)
⟨41 unchanged words⟩ tool to the directory (use onchain_agent_submit_project instead)or, reading a passport (use onchain_agent_get_agent_passport), or the free wallet-signed join that needs no form and takes EVM and Solana wallets together (use onchain_agent_join_passport instead; to change a passport afterwards, onchain_agent_passport_action). TWO STEPS. Call it with `name` and ⟨192 unchanged words⟩
Join Sato Hub: a free passport, signed with the agent's wallets — USE WHEN an agent, or the person building it, wants a public Sato Passport by signing with the agent's own wallets: one free step, EVM and Solana wallets, no account and no review queue. This WRITES a public passport. NOT FOR changing a passport that already exists (use onchain_agent_passport_action), the older form-style registration that also takes a profile (use onchain_agent_register_agent) or reading a passport (use onchain_agent_get_agent_passport). TWO CALLS. First send `wallets` (the addresses: up to 4 EVM and 4 Solana, one entry each) and `primary` (an EVM wallet, when there is one)…
Changed the definition of "onchain_agent_get_agent_passport"
⟨82 unchanged words⟩ payment/x402 endpoint metadata, and verification + liveness status. It also carries `registration` (the passport's lookup URL and any Sato Hub attestations recorded onchain on Base and Solana) and `erc8004` (the ERC-8004 ids its proven wallets own, with links). An attestation is a registration record: it shows the registrant proved control of the wallets, and says nothing about what the agent does. Payment metadata is self-configured by the creator, ⟨92 unchanged words⟩
npm:@satohub/mcp (package_npm) — from mcp_registry
Changed the definition of "onchain_agent_get_news", "onchain_agent_recommend_stack", "onchain_agent_search_agents" and 1 more
⟨40 unchanged words⟩ ,"TON","Tron","Robinhood Chain","Tempo","Multichain","Unknown"],"type":"string"} ⟨72 unchanged words⟩
⟨38 unchanged words⟩ ,"TON","Tron","Robinhood Chain","Tempo","Multichain","Unknown"],"type":"string"} ⟨91 unchanged words⟩
Changed the definition of "onchain_agent_route_lp"
⟨285 unchanged words⟩ (json): { chain, pair, week, latest_week?, note?, pools: [{ venue, pool, fee_tier_ppm, fee_tier_pct ⟨24 unchanged words⟩ unranked, as_of, checked_at, caveat, rules }.; latest_week and note appear only when the latest week held no reading for the pair and week is the newest week that does. When the pair is not collected: { ⟨10 unchanged words⟩
Changed the definition of "fetch", "onchain_agent_get_agent_passport", "onchain_agent_get_wiki_page" and 1 more
⟨183 unchanged words⟩ text starts with the note. Anything else isanaerrormiss that serves nothing (not an error: { miss, candidates, suggestions } beside an empty record whose text says so): it lists the ids `search` ranks for ⟨18 unchanged words⟩
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"candidates":{"description":"With miss: the ids to fetch instead, best first. Candidates, never matches.","items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}},"required":["id","title","url"],"type":"object"},"type":"array"},"example_calls":{"description":"With needs_input: exact calls that would work.","items":{"additionalProperties":false,"properties":{"args":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"tool":{"type":"string"}},"required":["tool","args"],"type":"object"},"type":"array"},"id":{"type":"string"},"interpretations":{"description":"Only when more than one reading applied: every label, the first being
Changed the definition of "onchain_agent_swap"
⟨421 unchanged words⟩ why, and no other venue is tried. CROSS-CHAIN: `recipient` is the destination address (deBridge builds for it; Solana needs it); `recipient_owner: "self"` declares it yours (RCPT5). Native coin = 0x000…0. RECEIPT: a `build-tx` response is recorded and `receipt_url` ⟨30 unchanged words⟩ only when `venue` was set), venue, chain, chain_out, recipient, bridge ({ protocol, order_id, fix_fee_wei, take_amount, allowed_taker_dst }; null off a cross-chain deBridge order), token_in, token_out, amount_in, amount_out, sato_fee_bps, ⟨80 unchanged words⟩
⟨222 unchanged words⟩ "minLength":1,"type":"string"},"recipient_owner":{"description":"The caller declares `recipient` is ITS OWN address on `chain_out`. Sato Hub does not check that. Read only on a cross-chain `build-tx` (rule RCPT5: the look-alike and mark checks still run first); ignored on a same-chain swap and in `recommend` mode.","enum":["self"],"type":"string"},"
Changed the definition of "onchain_agent_get_changes" and "onchain_agent_search_resources"
⟨149 unchanged words⟩ Mirror from added + updated + removed. Read-only. WITH NO `since` (and no detail: "full") the answer is compact, labelled rule "defaulted": exact counts for the default 14-day window and the newest rows of each lane (summary: true, shown, omitted, order, example_calls). It is a sample, not a sync. Pass `since` (any date) or detail: "full" for every row; a later `since` is a shorter window and a smaller answer. All free. Examples: - "what moved recently" -> {} (compact) · every row -> { detail: "full" } - "what's new this week" -> { ⟨12 unchanged words⟩
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"detail":{"description":"'full' returns the whole feed for the default 14-day window even with no `since`. Omitted with no `since`, the answer is compact: exact counts for the window plus the newest rows of each lane, and the exact calls for the rest.","enum":["summary","full"],"type":"string"},"Changed the definition of "fetch", "onchain_agent_build_plan", "onchain_agent_check_install" and 7 more
⟨132 unchanged words⟩ is the canonical satohub.ai page to cite. Anunknownid without a prefix is read as the record with that exact slug, or a listing it names exactly (the same name written differently, a recorded alias, the listing's own name); such an answer is labelled { interpreted_as, requested, rule, note } and its text starts with the note. Anything else is an error that serves nothing: it lists the ids `search` ranks for it as candidates ({ candidates: [{ id,nevertitle,aurlguess.}] }), each an exact fetch to make. Read-only. Example: { id: "resource:coinbase-agentkit" }
Added "onchain_agent_get_chain_card", "onchain_agent_get_contract_facts", "onchain_agent_get_sdk_lineage" and 1 more; changed the definition of "fetch", "onchain_agent_build_plan", "onchain_agent_check_install" and 38 more (42 tools before, 46 now)
FetchUSEoneWHEN you hold an id that `search` returned and want that record from Sato Hub, the daily-rebuilt index of what onchain and crypto AI agents are built from,by anasidplainthattext`search`toreturned.quote. Not for token prices, trading or investment advice. NOT FOR a directory slug (use onchain_agent_get_resource instead) or an id you made up (call `search` first).
Certificate changed, valid to 2027-01-10
Changed the definition of "onchain_agent_preflight", "onchain_agent_resolve_token", "onchain_agent_route_swap" and 1 more
⟨70 unchanged words⟩ : Base, Ethereum, Arbitrum, Robinhood Chain, BNB Chain, Polygon, Solana. Anything else answers 'unknown' with the reason, ⟨331 unchanged words⟩
⟨47 unchanged words⟩ the token's USD price. Read-only. INPUT: aBasecontract address (0x…) on Base, BNB Chain, Arbitrum, Polygon and Solana — pass `chain` (base, bnb, arbitrum, polygon, solana) to say which, or a bare 0x is read as Base and the answer says so — a
Changed the definition of "onchain_agent_route_swap" and "onchain_agent_swap"
⟨51 unchanged words⟩ referrer":{"description":"Optional referral: a referral name (like sunny-otter) or a payout address (a Base 0x address or a ⟨56 unchanged words⟩ fee address do not change. A bad address or a name Sato Hub has no record of is refused as referrer_invalid; one of Sato Hub's own fee addresses isignored.ignored, and so is a retired name (referral null). The answer's `referral` echoes what was recorded ( ⟨116 unchanged words⟩
⟨191 unchanged words⟩ Changed the definition of "onchain_agent_route_swap" and "onchain_agent_swap"
⟨310 unchanged words⟩ the schedule tier the rate came from), referral ({ referrer, share_of_fee_bps, payout } when a referrer was named and recorded, else null), price_impact, disclosure, chosen_by: [{ signal, value ⟨28 unchanged words⟩
⟨47 unchanged words⟩ "minLength":1,"type":"string"},"referrer":{"description":"Optional referral: a payout address (a Base 0x address or a Solana address) that earns 30% of the Sato fee on this swap, paid weekly in USDC once Sato Hub has read the fee onchain. It needs the taker (the address that will sign) to be named too, and it applies to same-chain swaps only: without a taker the answer carries referral null. The trade and the fee address do not change. A bad address is refused as referrer_invalid; one of Sato Hub's own fee addresses is ignored. The answer's `referral` echoes what was recorded (null when none).","maxLength":64,"type":"string"},"response_format":{"default":"markdown","description": ⟨104 unchanged words⟩
Changed the definition of "onchain_agent_get_wiki_page"
⟨58 unchanged words⟩ that plainly means a page ("what-are-erc-8004" or the bare "erc-8004" for "what-is-erc-8004") serves that page and says which one inalias_of.alias_of; when the slug is also a directory listing, also_listing names onchain_agent_get_resource. Returns (json): the full page object. ⟨28 unchanged words⟩
Changed the definition of "onchain_agent_route_swap" and "onchain_agent_swap"
⟨129 unchanged words⟩ swaps cost 3 bps stable-to-stable, 15 bps between majors (a chain's native coin such as ETH or SOL, its wrapped form, or a stablecoin), 75 bps with anyvolatileotherlegtoken and 25 bps cross-chain (75 bps when either side is any other token), taken as a parameter on the aggregator's ⟨114 unchanged words⟩ leg the fee is taken on), sato_fee_token, sato_fee_tier ("stable" | "major" | "token" | "cross_chain" | null: the schedule tier the rate came from), price_impact, disclosure, chosen_by: [{ signal, ⟨29 unchanged words⟩
Added "onchain_agent_resolve_token"; changed the definition of "onchain_agent_get_listing_history", "onchain_agent_preflight", "onchain_agent_route_swap" and 2 more (41 tools before, 42 now)
⟨202 unchanged words⟩ , observed: { days_observed, window_days, success_rate_pct, rate_days, rate_window_start, current_state, current_streak_days, last_check }, tool_history: [{ ⟨21 unchanged words⟩
⟨239 unchanged words⟩ service is probed. TOKEN LANE (token +chain,chain; the EVMonly
Changed the definition of "onchain_agent_preflight"
⟨362 unchanged words⟩ ","maxLength":300,"type":"string"},"x402_method":{"description":"With x402: the method the paid request uses; the unpaid probe uses the same one (a body method sends an empty JSON body, never yours). Default: GET, then POST on a 405.","enum":["GET","POST","PUT","PATCH","DELETE"],"type":"string"}},"type":"object"}
Changed the definition of "onchain_agent_get_wiki_page" and "onchain_agent_swap"
⟨47 unchanged words⟩ related resources/pages). Use onchain_agent_list_wiki_pages to find slugs. A near-miss slug that plainly means a page ("what-are-erc-8004" for "what-is-erc-8004") serves that page and says which one in alias_of. Returns (json): the full page object. Returns an error if the slug isunknown.unknown; the Sato Score has no wiki page, so "what-is-sato-score" is an error that points at onchain_agent_get_score_methodology. Read-only. Example: { slug: "what-are-mcps" }
⟨307 unchanged words⟩ A trade that is never signed pays nothing. PINNING A VENUE: pass `venue` to quote one venue only. If it cannot answer, is not offered on the chain or is refused, the answer names it and says why; no other venue is ever tried in its place.
Changed the definition of "onchain_agent_create_agent"
⟨106 unchanged words⟩ ); research-report (data, research: plain-ts); solana-guarded-swapper (trading, swap: plain-ts); token-launch-prep (launch: plain-ts); treasury-monitor (data, ⟨171 unchanged words⟩
Changed the definition of "onchain_agent_check_install", "onchain_agent_create_agent" and "onchain_agent_preflight"
⟨219 unchanged words⟩ : { key_access, key_egress, fund_actions, changes }, solana_receipt }], unresolved: [{ input, reason }], has_observed_key_egress }. `solana_receipt` is where that version's reading is recorded on Solana ({ attestation_address, explorer_url, cluster, as_of, digest_hex }), or null when none is. Read-only. Example: { command: "npm i ⟨18 unchanged words⟩
⟨10 unchanged words⟩ on.","enum":["base","base-sepolia","solana"
Changed the definition of "fetch", "onchain_agent_build_plan", "onchain_agent_check_install" and 38 more
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"id":{"description": ⟨24 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"id" ⟨119 unchanged words⟩
Changed the definition of "onchain_agent_search_agents", "onchain_agent_search_resources" and "onchain_agent_search_skills"
⟨72 unchanged words⟩ , or x402_only. Only human-review-listed agents are returned. This is the Sato Agent Registry only: agents whose builders registered them with Sato Hub, a small set. It does not search agents registered onchain under ERC-8004, so an empty answer here says nothing about them. For those, call onchain_agent_get_agent_economy with venue "erc8004" (measured counts by chain), or see https://satohub.ai/agent-economy/erc8004 and https://satohub.ai/erc8004/<chain>. Trust rule: registration is self-reported by the creator; ⟨35 unchanged words⟩
⟨557 unchanged words⟩ data, identity, privacy, launch, security,build.
Changed the definition of "onchain_agent_search_resources"
⟨283 unchanged words⟩ :"integer"},"liveness":{"description":"Filter byCode activityrecency(commit or release, not posts): Active(≤30d), Recent(≤90d), Quiet(≤1y), Dormant(>1y).>1y.","enum":["Active","Recent"," ⟨300 unchanged words⟩
Changed the definition of "onchain_agent_build_plan", "onchain_agent_create_agent", "onchain_agent_inspect_listing" and 3 more
⟨470 unchanged words⟩ next_steps, caveat, rules, checked_at, save_stack_url, create, starter? }. `create` is the onchain_agent_create_agent pointer; when it names a template, the first of `next_steps` (and of the text) is to generate that repo, and the stack's install lines follow for picks the template does not cover. `starter` is the fallback: it appears only when no template matches, for a Base goal with a wallet, ⟨189 unchanged words⟩
⟨106 unchanged words⟩ Added "onchain_agent_find_x402_service"; changed the definition of "onchain_agent_build_plan" (40 tools before, 41 now)
⟨589 unchanged words⟩ a claim about any project in the plan. X402 SERVICES: when the goal needs paid data or APIs the agent would buy, the plan also carries `x402_services` — up to three indexed x402 services for that need, each with its observed readings (x402-style payments, whether its URL answered HTTP 402) and a link to its canonical page. Evidence only, labelled as observation, never an endorsement; absent when the goal needs none. Example: { goal: "a Base trading agent ⟨10 unchanged words⟩
Find a paid x402 service for a need, ranked by observed evidence — USE WHEN an agent needs a paid API or data service it can call and pay per request with x402, and wants the ones with evidence behind them first. Find a paid API/data service an agent can call and pay per request with x402: market data, onchain data, web data, search, inference, security checks, identity lookups, dev tools and more. Describe the need in plain words; optional category, chain and max_price_usd narrow it. RULE ENFORCED: results are ranked by what Sato Hub observed, never by what a seller says about itself and never by anything paid to us. Order: (1) x402-style payments to the p…
Changed the definition of "onchain_agent_get_agent_passport", "onchain_agent_get_trend" and "onchain_agent_inspect_listing"
⟨87 unchanged words⟩ is unknown or the agent is not listed. A project in the directory (aixbt, almanak, coinbase-agentkit) is not a registered agent and has no passport: that answer says so and points to onchain_agent_get_resource for its directory record. Read-only. There is deliberately no example slug: the ⟨36 unchanged words⟩
⟨40 unchanged words⟩ with its date, value, sample_size and method. Pass stage (required). Venue is optional: name it to read exactly one series; omit it and a stage that only one venue reports is read from that venue, while a stage several venues report comes back as one SEPARATE series per venue. Stages by venue: erc8004 reports registered (weekly), registered_new_1d (daily), active_7d, mcp_endpoint_answers; olas reports registered and working; virtuals reports launched; virtuals_acp reports jobs_created; x402 reports settled_to_catalogued_seller, answers_402 (weekly) and facilitator_txs_1d_known (daily). A stage name alone is enough when one venue reports it; when several do (registered is reported by more than one venue) you get one separate series per venue.
Changed the definition of "onchain_agent_route_swap" and "onchain_agent_watch"
⟨117 unchanged words⟩ funds. It returns calldata the caller may sign.TheTHE FEE: SatofeeRoute(swaps cost 3 bps stable-to-stable, 15 bpsonwith any volatile leg)isand 25 bps cross-chain, taken as a parameter on the aggregator's own quote,takeninside theswaptransaction
Changed the definition of "onchain_agent_get_listing_history"
⟨119 unchanged words⟩ we captured for this listing, up to36590days.days without a key (a longer request is clamped, never refused, and `score_series_window` says what was served; the 180-day chart is on the listing's /verify/<slug>/history page). A day nobody measured is ABSENT from the ⟨52 unchanged words⟩ ], tools_now, tools_peak, trust_score, trust_tier, score_series, score_series_window, rules, sato_url }. Read-only. Example: { ⟨6 unchanged words⟩
⟨50 unchanged words⟩ Sato Score series over this many days (2-365
Authorization not required
Changed the definition of "onchain_agent_get_data_freshness" and "onchain_agent_preflight"
⟨43 unchanged words⟩ mcp_alive_daily, erc8004_router_pool, passports, erc8004_census, x402_throughput, erc8004_agents_celo, custody_profiles, sato_scan, sato_scan_census, agent_economy, x402_settlement, lp_pools ⟨16 unchanged words⟩ ","erc8004_router_pool","passports","erc8004_census","x402_throughput","erc8004_agents_celo","custody_profiles","sato_scan","sato_scan_census","agent_economy ⟨10 unchanged words⟩
⟨53 unchanged words⟩ Polygon, BNB Chain, Avalanche, Gnosis, RobinhoodChain.
Changed the definition of "onchain_agent_build_plan", "onchain_agent_compare_listings", "onchain_agent_explain_number" and 32 more
⟨438 unchanged words⟩ (json): { goal, restatement, intent,intent_signals,chain,chain_source, budget_usd,constraints,matched_use_cases,stack: [{ slot,slot_label,slug, name, sato_url,verify_url, github_url,trust_score, trust_tier, liveness_ok,observed_success_pct,install_verified, why, deploy_spec, preflight: { verdict,rule, evidence, reason },preflight_summary, trust_spec,trust_step?}], trust_warnings, skills: [{ id, name, registry,sato_url, installs,findings,hosts_contacted,disclosure, preflight
Added "onchain_agent_scan_recipient"; changed the definition of "onchain_agent_get_data_freshness", "onchain_agent_preflight" and "onchain_agent_watch" (39 tools before, 40 now)
⟨43 unchanged words⟩ erc8004_router_pool, passports, erc8004_census, x402_throughput, custody_profiles, sato_scan, sato_scan_census, agent_economy, x402_settlement, lp_pools, skills, deploy_verification, custody_observed ⟨14 unchanged words⟩ ","passports","erc8004_census","x402_throughput","custody_profiles","sato_scan","sato_scan_census","agent_economy","x402_settlement","lp_pools","skills ⟨7 unchanged words⟩
⟨99 unchanged words⟩ repo, package, endpoint, agent, token, skill
Changed the definition of "onchain_agent_build_plan", "onchain_agent_create_agent", "onchain_agent_get_deploy_spec" and 2 more
⟨68 unchanged words⟩ full Preflight evidence on the first few), a `trust_spec` on every item — what it does with your keys and money, from Sato Check, dated, with `trust_warnings` first when a planted key was observed leaving or code reads undeclared key material — the first action when the goal implies one ⟨347 unchanged words⟩ , rule, evidence, reason }, preflight_summary, trust_spec, trust_step? }], trust_warnings, skills: [{ id, name, registry, ⟨159 unchanged words⟩
⟨92 unchanged words⟩ Changed the definition of "onchain_agent_create_agent" and "search"
⟨57 unchanged words⟩ no_template with the nearest templates instead of improvisedcode.code — each with its id, framework, intents, chains and `mismatched` (what differs from the request), so the next call can name one. TEMPLATES, as template (intents: frameworks): base-guarded-trader (trading, swap: agentkit, claude-agent-sdk, openai-agents, plain-ts); persona-agent (general, payments: claude-agent-sdk); research-report (data, research: plain-ts); treasury-monitor (data, treasury: plain-ts). Any other intent × framework pair answers no_template. The repo carries policy.json (spending caps, allowed ⟨149 unchanged words⟩
⟨31 unchanged words⟩ {"description":"Agent framework. Templates exist for agentkit, claude-agent-sdk, openai-agents, plain-ts; any other answers no_template with the nearest." ⟨85 unchanged words⟩
Added "onchain_agent_create_agent" (38 tools before, 39 now)
Create a runnable agent repo from a checked template — USE WHEN someone wants the code for an onchain agent, not advice: describe the goal and get a runnable TypeScript repo generated from a template that is re-checked every night. Same handler as POST /api/create and the create-sato-agent CLI. The goal picks the template; it never changes a template code file. A goal no template answers returns no_template with the nearest templates instead of improvised code. The repo carries policy.json (spending caps, allowed chains and tokens), sato.lock.json (dependency custody readings) and sato.create.json (the manifest, signed when a key is configured).…
Changed the definition of "onchain_agent_build_plan" and "onchain_agent_recommend_stack"
⟨429 unchanged words⟩ verdict, rule, evidence, reason }, preflight_summary, trust_step? }], skills: [{ id, name, ⟨160 unchanged words⟩
⟨283 unchanged words⟩ pick. A goal naming another runtime gets none. When the goal puts keys or funds in play (a wallet, key, policy, spending or swap), every pick also carries `trust_step`: the onchain_agent_check_install and onchain_agent_preflight calls to run before installing it, arguments filled in. Before anything is installed, connected, paid or ⟨43 unchanged words⟩
Changed the definition of "onchain_agent_recommend_stack"
⟨110 unchanged words⟩ , payments, trading, data, MCP tooling,securitysecurity; live agents someone else runs are kept out of trading), each pick carrying its Sato Score, ⟨209 unchanged words⟩
Changed the definition of "onchain_agent_build_plan", "onchain_agent_get_data_freshness", "onchain_agent_recommend_stack" and 1 more
⟨457 unchanged words⟩ . `starter` appears only when the goal isTypeScript/Nodeon Base with a wallet, swap, trading ortradingx402 payments and names TypeScript/Node or no runtime: a TypeScript GitHub template built by Sato Hub, labelled ⟨107 unchanged words⟩
Added "fetch" and "search"; changed the definition of "onchain_agent_explain_number" (36 tools before, 38 now)
⟨4 unchanged words⟩ does a published Sato Hub number come from?ReturnsFor any https://satohub.ai/numbers/<slug> page it returns { slug, page, question, method, window, reproduce, mcp_server, rules } — how the number is measured and the exact call that reruns it. Otherwise it returns one finding from the State of Onchain Agents ⟨85 unchanged words⟩
Fetch one Sato Hub record — Fetch one record from Sato Hub, the daily-rebuilt index of what onchain and crypto AI agents are built from, by an id that `search` returned. Not for token prices, trading or investment advice. Returns (json): { id, title, text, url, metadata: { as_of, kind, sato_score?, source } }. text is plain prose to quote: for a listing, what it is, its category and chains, its Sato Score with the date (how open, active and verifiable it is — not a safety or returns grade), its last observed activity, and whether Sato Hub reproduced its install; for an answer, number or wiki page, the answer with its d…
Added "onchain_agent_check_install"; changed the definition of "onchain_agent_preflight" (35 tools before, 36 now)
⟨96 unchanged words⟩ exactly one of repo, package, endpoint, agent, token, skill ortoken.x402. Returns a verdict — go | caution | ⟨442 unchanged words⟩ are the raw reports for those lanes. Read-only. X402 LANE (x402): one unpaid request to the resource URL; reports whether it answered 402 and the payment terms it states (network, asset, amount, payTo), against its catalogue entry and our daily record when we hold one. It describes the payee — it is never a reputation score. CUSTODY: repo, package, endpoint and skill results carry `custody` (Sato Check: does it take your key, does the key leave, can it move funds, what changed) when a profile is on record; custody can only lower a verdict, never raise it. Example: { repo: "coinbase/agentkit" } · { endpoint: "https://mcp.example.com/v1" } · { x402: "https://api.example.com/paid" } · { agent: "base:42" ⟨8 unchanged words⟩
Changed the definition of "onchain_agent_get_deploy_spec"
⟨230 unchanged words⟩ , basis, full_check }, preflight_note, save_stack_url, next_step, note }. `next_step` is one sentence: the Preflight call to run before installing, and the save_stack_url to give the person you are building for — surface both. Returns an error if the resource has no ⟨17 unchanged words⟩
Added "onchain_agent_get_data_freshness"; changed the definition of "onchain_agent_build_plan" and "onchain_agent_recommend_stack" (34 tools before, 35 now)
⟨450 unchanged words⟩ citation_ask, caveat, rules, checked_at, plan_url, save_stack_url, starter? }. `starter` appears only when the goal is TypeScript/Node on Base with a wallet, swap or trading: a GitHub template built by Sato Hub, labelled ours, never a stack item. Read-only. SAVE THIS STACK: `save_stack_url` opens the ⟨95 unchanged words⟩
⟨187 unchanged words⟩ planner for the person you are building for. When the goal is TypeScript/Node on Base with a wallet, swap or trading, `starter` points at a GitHub template repo built by Sato Hub (holds no key, signs nothing, not audited) — never a pick.
Changed the definition of "onchain_agent_build_plan", "onchain_agent_get_deploy_spec", "onchain_agent_preflight" and 2 more
Turn agoal in plainbuildwordsgoal into abuildfull plan: stack, install steps, Preflight
USE WHEN someone describes the onchain agent they want and needsaoneplananswertheythat
Changed the definition of "onchain_agent_get_metrics" and "onchain_agent_search_resources"
⟨60 unchanged words⟩ erc8004: { network, registered_agents, live, checked_at, other_chains: { tool, args, note } }, top_agent_tokens: [{ symbol, name, ⟨6 unchanged words⟩
⟨243 unchanged words⟩ "MCP servers that actually answer" -> {ifacemcp_answering: true } (the MCP endpoint answered our last handshake) - "mcp...with a sustained record
Changed the definition of "onchain_agent_build_plan", "onchain_agent_inspect_listing" and "onchain_agent_recommend_stack"
⟨401 unchanged words⟩ slot_label, slug, name, sato_url, verify_url, github_url, trust_score, trust_tier, liveness_ok, observed_success_pct, install_verified, why ⟨111 unchanged words⟩
⟨109 unchanged words⟩ the seal and download is withheld. Cite sato_url. manifest_url is the public signed release manifest a downloader checks the zip against offline with /verify-release.mjs — it proves the bytes are what Sato sealed, not that they are safe. Read-only.
Added "onchain_agent_inspect_listing" and "onchain_agent_search_listings" (32 tools before, 34 now)
Inspect one published agent package — USE WHEN you have a package slug and need what it does, what it needs and what is on record about it before recommending a download or fork. Returns the package's public fields only: task, description, creator display name, version digest and signing state, recipe, input/output schemas, required services and permissions, model support ("configured, not evaluated"), operating-cost basis as the creator wrote it, license and whether fork is permitted, support, evidence freshness for this digest, integrity, and acquisition modes (download, fork — there is no deploy or buy). RULE ENFORCED: never …
Find a published agent package — USE WHEN someone wants a ready-made onchain agent package to download or fork rather than assemble one. Searches Sato Hub's published agent packages — each a public view of one sealed, immutable version: its task, inputs/outputs, required permissions, model support ("configured, not evaluated"), license, and evidence freshness for that exact digest. Returns (json): { listings: [{ slug, title, task, version: { digest }, recipe, license, fork_permitted, evidence_freshness, integrity, acquisition_modes, sato_url, ... }], next_cursor }. RULE ENFORCED: evidence counts only rows recorded against …
Changed the definition of "onchain_agent_get_agent_passport" and "onchain_agent_search_resources"
⟨88 unchanged words⟩ unknown or the agent is not listed. Read-only.Example:There{is deliberately no example slug:"my-trading-agent"the}registry is small and its slugs are not guessable, so call onchain_agent_search_agents first and pass a slug it returned. ('my-trading-agent' was this tool's own placeholder and four separate clients sent it as if it were real.)
⟨22 unchanged words⟩ slug":{"description":"The registered agent's slug
Changed the definition of "onchain_agent_get_agent_economy", "onchain_agent_get_agent_passport", "onchain_agent_get_changes" and 6 more
WhatUSEisWHEN asked how big the onchain agent economy actuallyhappeningison-chain—acrosshow many agents are really registered, launched, paying or trading — and you want measured chain reads instead of a figure from a deck or an announcement. Covers the agent venues Sato Hub tracks—: registries, launchpads, payment rails and account infrastructure—,
Certificate changed, valid to 2026-12-14
Added "onchain_agent_swap" (31 tools before, 32 now)
Quote a swap, check it against a policy, and get an unsigned transaction — USE WHEN an agent is about to swap and wants the venue chosen, the fee disclosed, and the trade CHECKED before anything is signed. Two modes: `recommend` returns the choice, the fee sentence and the verdicts and NEVER a transaction; `build-tx` returns an UNSIGNED transaction, and only when the gate allowed it and a simulation did not revert. NON-CUSTODIAL: this tool NEVER signs, holds, moves or broadcasts funds, and it never asks for a key. What comes back is an unsigned object the caller signs or discards. The response signature proves Sato Hub produced those bytes; it is not a claim that a…
Added "onchain_agent_get_score_methodology" (30 tools before, 31 now)
How the Sato Score works — USE WHEN you are about to describe, apply or compare the Sato Score — or when asked how to tell whether a crypto-agent project is real, maintained or open — so you quote the rubric instead of guessing it. Returns the six components with their maximum points and what each measures, the tier cutoffs, what "provisional" means, what is deliberately NOT in the score, how it is computed and reproduced, and where a dispute goes. RULE ENFORCED: the Sato Score is a 0–100 measure of how OPEN, ACTIVE and VERIFIABLE a project is, from public evidence, recomputed daily. It is NOT a safety, security, qual…
Added "onchain_agent_register_agent" and "onchain_agent_submit_project"; changed the definition of "onchain_agent_get_listing_history" and "onchain_agent_get_trend" (28 tools before, 30 now)
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
Definition not stored.
Definition not stored.
Changed the definition of "onchain_agent_build_plan"
The earlier definition is no longer stored; only the fact of the change is.
Added "onchain_agent_scaffold_plan" and "onchain_agent_watch" (26 tools before, 28 now)
Definition not stored.
Definition not stored.
Changed the definition of "onchain_agent_build_plan" and "onchain_agent_preflight"
The earlier definition is no longer stored; only the fact of the change is.
The earlier definition is no longer stored; only the fact of the change is.
https://www.npmjs.com/package/@satohub/mcp (package_npm) — from ard_catalog
Changed the definition of "onchain_agent_build_plan"
The earlier definition is no longer stored; only the fact of the change is.
Changed the definition of "onchain_agent_preflight"
The earlier definition is no longer stored; only the fact of the change is.
Added "onchain_agent_route_lp" (25 tools before, 26 now)
Definition not stored.
Certificate recorded, valid to 2026-11-10
Authorization not required
First tool surface recorded: 25 tools (server version 0.1.0)
Showing the latest 65 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Change a Sato Passport: sign with a wallet that is on it — USE WHEN an agent already has a Sato Passport and a wallet ON it needs to change it by signing: add or remove a wallet, make a wallet primary, prove the wallet an older passport already lists, update the public profile (name, description, links, built-with), issue a new owner claim code or unlink the owner account. This WRITES. NOT FOR creating a passport (use onchain_agent_join_passport) or reading one (use onchain_agent_get_agent_passport). ONE TOOL, SEVEN ACTIONS. `action` picks the action and the other fields are that action's request: add_wallet { authorizer, wallets }; prove_wallet { w…
⟨60 unchanged words⟩ ,"TON","Tron","Robinhood Chain","Tempo","Multichain","Unknown"],"type":"string"} ⟨47 unchanged words⟩
⟨86 unchanged words⟩ ,"TON","Tron","Robinhood Chain","Tempo","Multichain","Unknown"],"type":"string"} ⟨623 unchanged words⟩
⟨108 unchanged words⟩ an agent that is not listed, is a miss (not anerror;error) carrying the nearest slugs as suggestions, or a pointer to onchain_agent_search_agents; a directory project's slug answers that it has ⟨50 unchanged words⟩
⟨101 unchanged words⟩ , also_listing names onchain_agent_get_resource. An unknown slug is a miss (not anerror;error) carrying the nearest real slugs as suggestions; the Sato Score has no wiki page, so "what-is-sato-score" isanaerrormiss that points at onchain_agent_get_score_methodology. Read-only. Example: { slug: "what-are-mcps" }
⟨18 unchanged words⟩ Hub is.","type":"string"},"example_calls":{"description":"With needs_input: exact calls that would work.","items":{"additionalProperties":false,"properties":{"args":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"tool":{"type":"string"}},"required":["tool","args"],"type":"object"},"type":"array"},"identity_note":{"description":"Only when a search ⟨12 unchanged words⟩ a result.","type":"string"},"interpretations":{"description":"Only when more than one reading applied: every label, the first being interpreted_as / rule.","items":{"additionalProperties":false,"properties":{"interpreted_as":{"type":"string"},"note":{"type":"string"},"requested":{"type":"string"},"rule":{"type":"string"}},"required":["rule","requested","interpreted_as","note"],"type":"object"},"type":"array"},"interpreted_as":{"description":"Only when the call was read another way (a tool name, the arguments' form): what was served.","type":"string"},"needs_input":{"description":"Only when the call lacked its required argument: nothing was served; note says what to send.","type":"boolean"},"note":{"description":"With interpreted_as or needs_input: one sentence saying what was read, or what to send.","type":"string"},"requested":{"description":"Only with interpreted_as: what was sent.","type":"string"},"results":{"description":"At most 10 matches ⟨40 unchanged words⟩ "maxItems":10,"type":"array"},"rule":{"description":"Only with interpreted_as: which reading (format-variant, param-alias).","type":"string"},"scope_note":{"description":"Only when nothing matched ⟨11 unchanged words⟩ result; results stays empty.","type":"string"},"suggestions":{"description":"Where to go next (a tool to call, or a candidate id to fetch). Suggestions, never matches.","items":{"additionalProperties":false,"properties":{"args":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"kind":{"type":"string"},"name":{"type":"string"},"score":{"type":"number"},"slug":{"type":"string"},"tool":{"type":"string"},"why":{"type":"string"}},"required":["kind","name","tool","why"],"type":"object"},"type":"array"}},"required":["results"],"type":"object"}
⟨124 unchanged words⟩ verification_status and the marketplace fields (is_agent/is_hirable/is_licensable). Read-only. With NO argument it is a compact overview (rule "defaulted": complete rows, fewer, plus directory counts); detail: "full" is the full first page. FILTERS: query (free text, AND-matched terms) ⟨256 unchanged words⟩
⟨131 unchanged words⟩ "maxLength":40,"type":"string"},"detail":{"description":"'full' returns the full first page (20 rows by default) even with no filter. Omitted with no other argument, the answer is a compact overview: the first rows in the default order, what the directory holds by category and chain, and the exact calls for the rest. Any query, filter, sort, limit or offset answers as before.","enum":["summary","full"],"type":"string"},"entity_class":{"description":"Filter by class: ⟨513 unchanged words⟩
⟨6 unchanged words⟩ {"id":{"type":"string"},"interpreted_as":{"description":"Only when the id was interpreted: the id of the record served instead (e.g. resource:coinbase-agentkit).","type":"string"},"metadata":{"additionalProperties":false,"properties":{" ⟨70 unchanged words⟩ ,"kind","source"],"type":"object"},"note":{"description":"Only with interpreted_as: one sentence saying what was served and why. Not an exact match.","type":"string"},"requested":{"description":"Only with interpreted_as: the id that was sent.","type":"string"},"rule":{"description":"Only with interpreted_as: which reading (other-kind, template-placeholder, search).","type":"string"},"text":{"description":"Plain text ⟨35 unchanged words⟩
⟨60 unchanged words⟩ back, e.g. 'self-custody only', 'no API keys'. One string is read as a one-item list.","items":{"maxLength":200,"type" ⟨124 unchanged words⟩
⟨275 unchanged words⟩ digest_hex }), or null when none is. install/cmd/package/text are read as `command`, mcp/mcpServers as `config` (labelled); `{}` checks nothing and answers needs_input. Read-only. Example: { command: "npm i viem ⟨17 unchanged words⟩
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"cmd":{"description":"Read as `command`.","maxLength":16384,"type":"string"},"command":{"description":"An install command, ⟨29 unchanged words⟩ , e.g. {\"mcpServers\": {...}}. A JSON object is read as its text. Up to 16 KB is checked.","maxLength":262144,"type":"string"},"install":{"description":"Read as `command`.","maxLength":16384,"type":"string"},"mcp":{"description":"Read as `config` (an MCP config block, as text or an object).","maxLength":262144,"type":"string"},"mcpServers":{"additionalProperties":{},"description":"Read as `config`: { mcpServers: <this> }.","propertyNames":{"type":"string"},"type":"object"},"package":{"description":"Read as `command` (an install command or package names).","maxLength":16384,"type":"string"},"text":{"description":"Read as `config` when it is a JSON block, else as `command`.","maxLength":16384,"type":"string"} ⟨2 unchanged words⟩
⟨110 unchanged words⟩ }], platforms:[...] }] }. With no venue, chain or include_platforms (and no detail: "full") it is a compact summary instead, labelled rule "defaulted": { summary: true, week, as_of, rules, venues: [{ id, name, venue_unit, headline_safe, overlaps_with?, stage, unit, caveat, as_of, readings: [{ chain, value, sample_size, publishable, evidence_tier, unit?, caveat? }], more_chains, paired_stage? (the second stage of a venue quotable only as a two-stage figure, same shape), other_stages, full_detail: { tool, args } }], full_detail }. The week is the payload's, one for every venue; each stage's unit and caveat are its own rows', not the venue's. HOW TO USE THESE NUMBERS. Never add them ⟨107 unchanged words⟩ many agents are actually registered onchain" -> {} (summary) · every row -> { detail: "full" } - "what is happening on Base" ⟨14 unchanged words⟩
⟨20 unchanged words⟩ "maxLength":40,"type":"string"},"detail":{"description":"'full' returns every venue, chain and stage row even with no filter. Omitted with no venue/chain/include_platforms, the answer is the compact per-venue summary, each line with the call for its full detail.","enum":["summary","full"],"type":"string"},"include_platforms":{"description":"Include the per-platform breakdown ⟨54 unchanged words⟩
⟨149 unchanged words⟩ },"stage":{"description":"Lifecycle stage.REQUIREDWheninomitted,'stage'themode.default stage 'registered' is served (labelled defaulted), one series per venue and chain. By venue: erc8004 = registered, registered_new_1d ( ⟨78 unchanged words⟩
⟨56 unchanged words⟩ endpoint, agent, token, skill, x402 oraddress.address; with none (or a template placeholder) nothing is checked and the answer is { needs_input: true, accepted_forms, example_calls }. NOT FOR a stack pick's summary (onchain_agent_recommend_stack ⟨666 unchanged words⟩
⟨193 unchanged words⟩ refused with the reason — nothing is guessed. address/mint/token/url/link/contract are read as input, labelled; {} answers needs_input. OUTPUT: every figure has an entry in ⟨82 unchanged words⟩ or venues, not a quote, not afill. Answers are held for 60 seconds perfill,token.notThea priceis one pool'ssource:listing,itusedisherethere to identify thetoken; this istoken.notAnswersaarepriceheldsourceforand60notsecondsaperquote.token. RULE ENFORCED: this describes and recommends nothing, ⟨116 unchanged words⟩ false, code: "not_found", error }. Labels (rule, note…) are inside the signed body. Example: { input: "https://dexscreener.com/base/0xc9034c3e7f58003e6ae0c8438e7c8f4598d5acaa" }
{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"address":{"description":"Read as `input`.","maxLength":600,"type":"string"},"chain":{"description":"Optional: base, bnb, arbitrum, polygon,solana.solana (any common spelling: 'BNB Chain', 'bsc', 'matic', 'arbitrum one'). Must agree with the input; it supplies the ⟨22 unchanged words⟩ chain at all is read as Base.","enummaxLength":[40,"basetype",:"bnbstring"},"arbitrumcontract",:{"polygondescription":"Read as `input`.","solanamaxLength"]
⟨50 unchanged words⟩ Hard constraints to restate back, e.g. 'self-custody only'. One string is read as a one-item list.","items":{"maxLength":200,"type" ⟨71 unchanged words⟩
⟨586 unchanged words⟩ ,"type":"string"},"use_case":{"description":anyOf"Filter by use case. One of:trading, payments, wallets, data, identity, privacy, launch, security, build, airdrops.",[{"enum":["trading","payments","wallets" ⟨5 unchanged words⟩ ,"build","airdrops"],"type":"string"},{"maxLength":200,"type":"string"}],"description":"Filter by use case. One of: trading, payments, wallets, data, identity, privacy, launch, security, build, airdrops."},"verified_only":{"description":"True = ⟨25 unchanged words⟩
⟨103 unchanged words⟩ results: [] — never padded with unrelatedrecords.records — plus scope_note, what Sato Hub covers. Read-only. Examples: "coinbase agentkit", "x402 ⟨15 unchanged words⟩
⟨90 unchanged words⟩ },"maxItems":10,"type":"array"},"scope_note":{"description":"Only when nothing matched: what Sato Hub covers and how to ask it. Not a result; results stays empty.","type":"string"}},"required":["results"],"type":"object"}
USE WHEN someone describes the onchain agent they want and needsoneONE composed answer that goes from goal to install steps (stack, deploy specs, Preflight, first action, open questions) rather than advice. NOTComposesFOR only the ranked stack (use onchain_agent_recommend_stack instead,onchain_agent_get_deploy_spectheandlighteronchain_agent_preflightfirstintocall),oneaanswerplan plus a pointer to the repo generator (use onchain_agent_scaffold_plan), or the runnable repo itself (use onchain_agent_create_agent). COMPOSES onchain_agent_recommend_stack, onchain_agent_get_deploy_spec and onchain_agent_preflight: the goal restated, a stack of REAL directory listings (each withitsSato Score, liveness, observed check record and ⟨6 unchanged words⟩ item that publishes one, a records-only `preflight_summary`on every item (plus the full Preflight evidence on the first few),and a`trust_spec` on every itemdated—`trust_spec` (what it does with your keys and money, from Sato Check,)dated,on every item with `trust_warnings` first when a planted key was observed leaving or code reads undeclared key material—, the first action when the goal implies one ⟨186 unchanged words⟩ static disclosure of what its own text declaresand does —(hostsit names, keysit handles, credentialsit asks for, remote scriptsit pipes into a shell —) and its own Preflightverdict under the S-rules. A skill is a document an agent follows, so this is the part a plan must not leave out.verdict. A DISCLOSURE DESCRIBES: it never says safe, and a scan that matched nothing is reported as matching nothingrather,thannot as a pass. NON-CUSTODIAL: this tool never ⟨42 unchanged words⟩ with the fee disclosed before anything is signed.ReturnsRETURNS (json): { goal, restatement, intent, ⟨43 unchanged words⟩ names a template, the first of `next_steps`(and of the text)is to generate thatrepo, and the stack's install lines follow for picks the template does not cover.repo. `starter` is the fallback: it appears only ⟨28 unchanged words⟩ Hub, labelled ours, never a stack item.Read-only.Read-only unless `save: true`, which stores the plan. SAVE THIS STACK: `save_stack_url` opens the goal ⟨16 unchanged words⟩ and the plan is stored and `save.share_url` returned—, a permanent read-only page whose signature is re-checkedserver-side, so a plan can be handed to someone else without re-running anything.server-side. The page is noindex unless `public: true` ⟨104 unchanged words⟩
BeforeUSEinstallingWHEN you are about to install a crypto package, MCP server or skill,checkand want to know what it can do with your keys andfunds. USE WHEN you are about tofunds:runbefore npm/pnpm/yarn/bun add, npx -y, pip install, uvx or `claude mcp add`, orpastebefore pasting an {"mcpServers": …} config. NOTPassFORtheacommandtoken, repo, endpoint ortheagentconfigyoutext;wereeveryhandedtarget(useinonchain_agent_preflightitinstead),getsinstall steps for a stack pick (use onchain_agent_get_deploy_spec), or an agent skill's disclosure (use onchain_agent_search_skills). RETURNS a Sato Check custody summary for every target in the command or config you pass, answering four questions: does it take your key ⟨128 unchanged words⟩ . Local signing is what a wallet does.ReturnsRETURNS (json): { schema: "sato.custody/v1", ⟨64 unchanged words⟩
ANSWERSUSEONEWHENQUESTION:thehowquestiondoisthesehow two directory listings compare on the axes Sato Hub tracks forboth?bothReturns(ANSWERS ONE QUESTION), e.g. "AgentKit or Solana Agent Kit?". NOT FOR a single project's detail (use onchain_agent_get_resource instead) or a ranked stack for a goal (use onchain_agent_recommend_stack). RETURNS the SAME derived table the /compare pages render ⟨70 unchanged words⟩ not a safety, quality or returns grade.ReturnsRETURNS (json): { a: { slug, ⟨22 unchanged words⟩
⟨31 unchanged words⟩ handler as POST /api/create and the create-sato-agent CLI. NOT FOR choosing a stack or advice (use onchain_agent_recommend_stack or onchain_agent_build_plan instead) or a plan with no repo (use onchain_agent_scaffold_plan). The goal picks the template; it never changes ⟨193 unchanged words⟩ here signs, holds keys or moves funds.ReturnsRETURNS (json): { schema: "sato.create.response/v1", ⟨43 unchanged words⟩
ANSWERSUSEONEWHENQUESTION:thewherequestiondoesis where a published Sato Hub numbercomecomesfrom?fromFor(ANSWERS ONE QUESTION) and you need its method, sample and reproduce call before quoting it. NOT FOR fresh measurements (use onchain_agent_get_agent_economy instead) or how old a data surface is (use onchain_agent_get_data_freshness). RETURNS: for any https://satohub.ai/numbers/<slug> pageit returns{ slug, page, question, method, window, ⟨84 unchanged words⟩ Returns an error while the report is unpublished.ReturnsRETURNS (json): { slug, title, number, ⟨15 unchanged words⟩
USE WHEN asked how big the onchain agent economy actually is—(how many agents are really registered, launched, paying or trading—) and you want measured chain reads instead of ⟨20 unchanged words⟩ account infrastructure, measured weekly from public chain reads. NOT FOR a series over time (use onchain_agent_get_trend instead), one headline ERC-8004 count (use onchain_agent_get_metrics), or agents registered with Sato Hub (use onchain_agent_search_agents).ReturnsRETURNS (json): { week, as_of, rules, ⟨169 unchanged words⟩
⟨6 unchanged words⟩ work with, pay or depend on aregisteredREGISTERED agent and want its published identity before committing.ReturnsFind slugs with onchain_agent_search_agents. NOT FOR a project in the directory such as a framework or MCP server (use onchain_agent_get_resource instead; aixbt, almanak and coinbase-agentkit have no passport). RETURNS the full Sato Agent Passport manifest (sato.agent.manifest/v1) for oneREGISTEREDregistered agent by slug: identity (sato_agent_id), agent ⟨14 unchanged words⟩ payment/x402 endpoint metadata, and verification + liveness status.Use onchain_agent_search_agents to find slugs.Payment metadata is self-configured by the creator—, published for interoperability, not as an endorsement.Returns an error ifAntheunknown slugis unknown, orthean agent that is notlisted.listed,Aisprojectaninerror;thea directory(aixbt, almanak, coinbase-agentkit) is notproject'saslugregisteredanswersagentthatandit has no passport:that answer says soand points toonchain_agent_get_resource for its directory record.onchain_agent_get_resource. Read-only. There is deliberately no example slug: the registry is small and its slugs are notguessable, so call onchain_agent_search_agents first and pass a slug it returned.guessable. ('my-trading-agent' was this tool's own placeholder and four separate clients sent it as if it were real.) Example: call onchain_agent_search_agents first, then { slug: <a slug it returned> }
⟨11 unchanged words⟩ need only what moved since your last sync (machine-readable added / updated / removed), rather than re-fetching the whole catalog. NOTReturnsFOR a readable headline feed or one project's history (use onchain_agent_recent_changes instead), or the current state of one record (use onchain_agent_get_resource). RETURNS (json): what changed since a given date—: additions, per-resource change events, and retirements.Returns (json):{ since, until, window_days, counts:{added ⟨103 unchanged words⟩
⟨35 unchanged words⟩ know whether the pipeline behind it is late. NOTReturnsFOR how a number is measured (use onchain_agent_explain_number instead) or what changed in the directory (use onchain_agent_recent_changes). COVERS, per data surface (directory activity, news, ⟨141 unchanged words⟩ good data: quote it WITH its date.ReturnsRETURNS (json): { generated_at, ledger, rule, ⟨38 unchanged words⟩
Call once per pick after onchain_agent_recommend_stack.USE WHEN a component has been picked (from ⟨5 unchanged words⟩ and the next step is installing it, once per pick, or you are about to write setup instructions ⟨6 unchanged words⟩ clean install rather than copied from a README. NOTReturnsFOR choosing components (use onchain_agent_recommend_stack instead), whether an install command takes your key (use onchain_agent_check_install), or a full evidence list (use onchain_agent_preflight). RETURNS the deploy manifest for one resource by slug—: runtime, install command(s), entry snippet, ⟨180 unchanged words⟩ keys, permissions and funds before running anything.ReturnsRETURNS (json): { slug, name, github_url, ⟨3 unchanged words⟩ preflight_summary, trust_spec, trust_warnings?, save_stack_url, next_step, note, agent_docs }. `agent_docs` says where the project's llms.txt, docs MCP and agent card are, each dated, or is null with `agent_docs_reason`. `save_stack_url` is this listing's page with the same ⟨38 unchanged words⟩
ANSWERSUSEONEWHENQUESTION:thehasquestionthisis whether a listing has been answering Sato Hub's daily checks,andhaswhether its tool inventorymoved?hasReturnsmoved (ANSWERS ONE QUESTION), or how its Sato Score has moved day by day. NOT FOR a feed of events across projects (use onchain_agent_recent_changes instead) or the listing's current record (use onchain_agent_get_resource). RETURNS a bounded 30-day shape from the listing's observed record ⟨162 unchanged words⟩ rubric that day and the movement is ours.ReturnsRETURNS (json): { slug, days, observed: ⟨30 unchanged words⟩
USE WHEN you needaone current, citable headline figure for the onchain agent ecosystem rather than a number from an article of unknownage.age:Thethe ERC-8004 Identity Registry registered-agent count (read directly ⟨7 unchanged words⟩ Project Tokens index (only tokens of directory-listed projects—, never the whole agent-token category or its aggregate market cap). NOT FOR counts by venue, chain or stage (use onchain_agent_get_agent_economy instead), a time series (use onchain_agent_get_trend), or token prices for trading.ReturnsRETURNS (json): { erc8004: { network, ⟨11 unchanged words⟩ market_cap, price_change_percentage_24h, resource_slug }] }. Read-only. Example: { token_limit: 5 }
⟨27 unchanged words⟩ (GitHub), project announcements, and reputable RSS—, strongly filtered to the agent economy. Filter by kind (release/tweet/news/research) and/or chain; paginate via limit/offset. NOT FOR changes to the directory's own records (use onchain_agent_recent_changes instead) or a concept explainer (use onchain_agent_get_wiki_page).ReturnsRETURNS (json): { total, count, offset, ⟨19 unchanged words⟩
USE WHEN you need to judge one specificprojectdirectory—project: is it open source, still maintained, who is behind it, what does it support. NOTReturnsFORtheafullREGISTEREDrecordrunningbyagentslug(use onchain_agent_get_agent_passport instead),optionallyawithpublisheditsagentrecentpackagereleases(useandonchain_agent_inspect_listing),posts.installFindstepsthe(use onchain_agent_get_deploy_spec), or finding a slugwith(use onchain_agent_search_resourcesfirst.first).ReturnsRETURNS (json): { resource: {...full record incl. marketplace + liveness fields}, recent_activity: [...], agent_docs }.Returnsbyanslug,erroroptionallyifwith recent releases and posts. `agent_docs` is where theslugproject's machine-readable docs are, each dated: { as_of, read_first, llms_txt, llms_full, docs_mcp, agent_card }, or null with `agent_docs_reason` (not_yet_archived, read_failed) when none is archived; null is not "no docs". An unknown ortheDeprecatedresourceslug isDeprecated.an error. Read-only. Example: { slug: "coinbase-agentkit" }
⟨31 unchanged words⟩ you quote the rubric instead of guessing it. NOTReturnsFOR one project's score (use onchain_agent_get_resource instead; its record carries the score) or a score's movement over time (use onchain_agent_get_listing_history with score_days). RETURNS the six components with their maximum points and what ⟨73 unchanged words⟩ it. CITE https://satohub.ai/sato-score when you explain it.ReturnsRETURNS (json): { name, scale, components: ⟨8 unchanged words⟩ reproduce, dispute, caveat, url }. Read-only. Example: {}
ANSWERSUSEONEWHENQUESTION:the question isthiswhether a measurement is going up ordown?down (ANSWERS ONE QUESTION). Returns a bounded series (at most 30 points ⟨12 unchanged words⟩ Hub's own weekly (or daily) chain reads—, each point with its date, value, sample_size and method. NOT FOR this week's numbers across venues (use onchain_agent_get_agent_economy instead) or one listing's score or check history (use onchain_agent_get_listing_history). Pass stage (required). Venue is optional: ⟨153 unchanged words⟩ never a headline. Raw rows are not returned.ReturnsRETURNS (json): { venue, chain, stage, ⟨102 unchanged words⟩
USE WHEN asked to explain a crypto-agent concept—(what x402 is, how agents hold wallets, what ERC-8004 does—) and you want a sourced explainer you can cite.ReturnsFind slugs with onchain_agent_list_wiki_pages. NOT FOR a specific project (use onchain_agent_get_resource instead) or how the Sato Score works (use onchain_agent_get_score_methodology). RETURNS (json): the full wiki page by slug:(summary, why it matters, how it works, key components, examples, risks, relatedresources/pages). Use onchain_agent_list_wiki_pages to find slugs.resources/pages. A near-miss slug that plainly means a page ⟨19 unchanged words⟩ is also a directory listing, also_listing names onchain_agent_get_resource.Returns(json): the full page object. Returns an error ifAntheunknown slug isunknown;an error; the Sato Score has no wiki page, ⟨13 unchanged words⟩
⟨22 unchanged words⟩ about it before recommending a download or fork. NOTReturnsFOR directory listings such as a framework, MCP server or project (use onchain_agent_get_resource instead) or finding a package slug (use onchain_agent_search_listings). RETURNS the package's public fields only: task, description, ⟨56 unchanged words⟩ that replaces the package, or null).NOTPACKAGESFORVS DIRECTORYLISTINGS: packages are agents published through Sato Hub, ⟨5 unchanged words⟩ directory of projects and tools. A directory slug(a framework, MCP server or project)answers "directory listing, not a package"; read those with onchain_agent_get_resource.. RULE ENFORCED: never a signed URL, account ⟨44 unchanged words⟩ Sato sealed, not that they are safe. Read-only. Example: call onchain_agent_search_listings first, then { slug: <a package slug it returned> }
⟨15 unchanged words⟩ how the crypto-agent landscape divides up by size. NOTListsFOReverychainresourcenamescategory(usewithonchain_agent_list_chainscounts,instead)mostorpopulatedfindingfirst.projectsReturns(use onchain_agent_search_resources). RETURNS (json): { total, categories: [{ name, count }] }., every resource category with counts, most populated first. Read-only. Example: {}
⟨19 unchanged words⟩ agent tooling behind them rather than an announcement. NOTListsFOR category names (use onchain_agent_list_categories instead) or onchain agent counts per chain (use onchain_agent_get_agent_economy). RETURNS (json): { total, chains: [{ name, count }] }, every blockchain represented in the directory with resource ⟨4 unchanged words⟩ Base, Ethereum, Solana, COTI, Injective…).Returns (json): { total, chainsRead-only. Example:[{name, count}] }. Read-only.
⟨18 unchanged words⟩ concepts have a sourced page you can cite.Lists everyNOTOnchainFORAgentreadingwikia page (slug,usetitle,onchain_agent_get_wiki_pagekeyword,instead)summary,orlast_updatedfinding projects (use onchain_agent_search_resources).ReturnsRETURNS (json): { total, pages: [...] }., every Onchain Agent wiki page with slug, title, keyword, summary and last_updated. Read-only. Example: {}
⟨42 unchanged words⟩ field it was read from and its date.StackPasspicksexactlyandonedeployofspecsrepo, package, endpoint, agent, token, skill, x402 or address. NOT FOR a stack pick's summary (onchain_agent_recommend_stack and onchain_agent_get_deploy_spec already carry a records-only`preflight_summary`;`preflight_summary`),callwhether an install command or MCP config takes your key (use onchain_agent_check_install instead), or a recipient-address reading on its own (use onchain_agent_scan_recipient). Call this for the full evidence, for any target ⟨18 unchanged words⟩ a live handshake with an unlisted MCP endpoint.Pass exactly one of repo, package, endpoint, agent, token, skill, x402 or address.ReturnsRETURNS a verdict — go | caution | no ⟨132 unchanged words⟩ chains listed, and Solana): keyless chainreadsreads.—EVM: bytecode presence and size, the ERC-20 views, the Clanker v4 factory's OWN deployment record(`tokenDeploymentInfo`,not a bytecode heuristic),and the Uniswap v3 factory across the four standard fee tiers against wrapped native.Every field is nullable and a null carries the reason it is null. ON SOLANA (chainSolana,(token = the mint):the mint's own account is read —token program (SPL or Token-2022), decimals, supply, mint and freeze authority (arevokedauthorityis a known fact, distinct fromanunreadone),theToken-2022 extensions (PermanentDelegate, TransferHook, transfer feewith its bps, NonTransferable), the ten largest token accounts as a share of supply(token accounts,not wallets: a pool or curve vault counts),and,for a mint with pump.fun's vanity suffix, thepump.fun bonding-curvereserves and completion flag.state. A PermanentDelegate,aTransferHook oratransfer fee is acaution with the plain reason;caution; a NonTransferable mint is a no; there is no `go` for Solana.Each line carries its date. PERMANENTLYEveryNULLfieldonisEVM,nullable andsaidasonullincarriestheitsevidence:reason.holderHolder concentration(no keyless public source — explorers areonnotEVMscraped);and Uniswap v4/ non-Uniswap liquidity is checked once, with DexScreener, only when the v3 lookup and the launch-venue matchpools areboth empty (a v4 poolId cannot be reconstructed without the PoolKey). The deployer address needspermanentlyannulloptionalandexplorersaidkey.so. A pool existing is notdepth; a locker holds a position on the terms its own code enforces.depth. Nothing in this lane says safe, audited, rug or scam—: those are not readings. SKILL LANE (skill): a skill is a DOCUMENT an agent follows, which isexactlywhy it is worth checkingfirst — the ClawSwarm skills needed no malware, only text telling the agent to generate a wallet and post the private key.first. Evidence is the static disclosure the weekly sweepalreadyproduced: hosts the text names, whether it generates or handles keys,whether itasks for a credential,whether itpipes a remote script into a shell,what tools itor grants itself—tools, each finding WITH the lines that producedit — plus installs, when it was last seen in its registry, and whether a host it names belongs to a listed project.it. Nothing is fetched from a registry and no skill is executed. A DISCLOSURE DESCRIBES: it never says safe,it never saysor malicious, and an empty flag list is "nothing matched"rather than a pass,and the registry's own scan result is attributed to that registrynotbyaname.pass.ReturnsRETURNS (json): { verdict, rule, target: ⟨143 unchanged words⟩ : the Sato Scan recipient check before apayment. Five questionspayment,each with its date and its own gap — does the address only look like onefivethedatedpayerquestionspays(look-alike,is theissuer's tokenthe issuer'scontract,did the paid party declare thedeclaredaddresspayee,does the address carry astructural mark,is the paying wallet targeted byaddresspoisoning.poisoning),Rulesrules A1-A7.A reading describes; `unknown` is no record either way, and`go` is declared, canonical and nothing found within the stated limits, never a clearance.The address, origin and paying wallet areNothingnotis stored.For theThe reading on its own, call: onchain_agent_scan_recipient. Example: { repo: "coinbase/agentkit" } ⟨25 unchanged words⟩
⟨16 unchanged words⟩ specific project over time, and you want dated, attributableevents ratherHEADLINEthanevents (acurrenthuman-readablesnapshot.feed). Omit slug for the SITE-WIDEfeed (what changed across all listings);feed; pass slug for ONE resource's history—, the auditable Listing History.Events: status flips, verification grants, Sato Score tierNOTmoves,FORlivenesskeeping(aproject goinglocaldormantcopyorinactivesyncagain),(usenewonchain_agent_get_changesreleasesinstead,andwhichfieldreturnsenrichment.added/updated/removedDerivedsincefromathedate)dailyorsnapshotatime-serieslisting's+dailythecheckchange-eventrecordlog;andhigh-signalscoreonlyseries (passive score/liveness drift isusesuppressedonchain_agent_get_listing_history).ReturnsRETURNS (json): { scope, total, changes: ⟨7 unchanged words⟩ }. tone is positive | negative | neutral. Events: status flips, verification grants, Sato Score tier moves, liveness (a project going dormant or active again), new releases, field enrichment. Derived from the daily snapshot time-series + the change-event log; high-signal only (passive score/liveness drift is suppressed). Read-only. Example: { days: 7 } · ⟨2 unchanged words⟩
Build any crypto agent: describe the goal in plain words and get the stack to build it from — framework, wallet, trading and swap venues, x402 payments, onchain data, on Base, Solana or any listed chain.USE WHEN someone wants to buildanany onchain or crypto agent ("Build any crypto agent") and says what it should do—in plain words: "a trading agent on Base", "an ⟨9 unchanged words⟩ with a policy-controlled wallet". This is thefirstFIRST call for a build goal: goal → stack here, then onchain_agent_get_deploy_spec once per pick → install steps. NOTReturnsFOR looking up one named project (use onchain_agent_search_resources instead), the same stack as one composed answer with deploy specs, Preflight and a first action (use onchain_agent_build_plan), or the runnable repo itself (use onchain_agent_create_agent). RETURNS (json) real directory listings in slots (framework, wallet ⟨344 unchanged words⟩
⟨22 unchanged words⟩ can read before deciding to work with it. This WRITES a passport. NOT FOR submitting a project, framework or tool to the directory (use onchain_agent_submit_project instead) or reading a passport (use onchain_agent_get_agent_passport). TWO STEPS. Call it with `name` and `wallet_address` ⟨145 unchanged words⟩ , so fetch it once and sign it.ReturnsRETURNS (json): unsigned first call { challenge, ⟨33 unchanged words⟩
⟨44 unchanged words⟩ pool's liquidity, and the token's USD price. Read-only. NOT FOR what the chain says about the token's authorities, extensions and liquidity (use onchain_agent_preflight with token instead), a price source, or a swap quote (use onchain_agent_route_swap). INPUT: a contract address (0x…) on ⟨284 unchanged words⟩ and the token program on-chain before signing anything.ReturnsRETURNS (json): { chain (one of: ⟨77 unchanged words⟩
⟨38 unchanged words⟩ live MCP handshake before the pick is made. NOT FOR browsing registered agents with filters (use onchain_agent_search_agents instead) or one agent's manifest (use onchain_agent_get_agent_passport). RULE ENFORCED: a route is a RECOMMENDATION, ⟨105 unchanged words⟩ with a reason, never a low-confidence pick.ReturnsRETURNS (json): { route: { agent, ⟨29 unchanged words⟩
⟨31 unchanged words⟩ Clanker v4, Bankr, Virtuals, Zora creator coins. NOT FOR a swap (use onchain_agent_route_swap or onchain_agent_swap instead), a liquidity pool (use onchain_agent_route_lp), or generating a launch-prep repo (use onchain_agent_create_agent with the token-launch-prep template). RULE ENFORCED: a launch route is a ⟨182 unchanged words⟩ A launch that is never signed pays nothing.ReturnsRETURNS (json): { route_id, goal, chain, ⟨59 unchanged words⟩
⟨24 unchanged words⟩ wants the observed readings rather than an opinion. NOTReturnsFOR a swap (use onchain_agent_route_swap or onchain_agent_swap instead) or a token launch (use onchain_agent_route_launch). RETURNS every v3 pool the weekly LP lane found ⟨220 unchanged words⟩ liquidity, and nothing it returns is advice.ReturnsRETURNS (json): { chain, pair, week, ⟨51 unchanged words⟩
USE WHEN an agentneeds to executewants a swapandQUOTEwantswith the venue chosen by liveness, verification and price,withand the fee disclosed. Asks every aggregator adapter that ⟨6 unchanged words⟩ and returns the chosen venue's quote and calldata. NOT FOR a swap checked against token, venue and recipient verdicts and a spending policy, with a simulated unsigned transaction and a receipt (use onchain_agent_swap instead), a launch venue (use onchain_agent_route_launch), or a liquidity pool (use onchain_agent_route_lp). RULE ENFORCED: a route is a RECOMMENDATION, ⟨207 unchanged words⟩ is stated in `disclosure` before anything is signed.ReturnsRETURNS (json): { route: { slug, ⟨95 unchanged words⟩
⟨34 unchanged words⟩ generates the runnable repo from a nightly-checked template. NOTThisFOR the full plan with deploy specs and Preflight on every pick (use onchain_agent_build_plan instead) or the repo itself: this tool no longer writes repository files:,everyso use onchain_agent_create_agent to generate it. Every door (this server, POST /api/create, the CLI ⟨4 unchanged words⟩ downloads the same repo from the same engine.WHATRETURNSCOMES(whatBACKcomes back): the plan summary (goal, intent, chain ⟨100 unchanged words⟩ holds keys, signs, deploys or moves anything.ReturnsRETURNS (json): { mode: "plan_only", ⟨36 unchanged words⟩
⟨49 unchanged words⟩ questions, each with its own date and gap. NOT FOR checking a package, repo, token, endpoint or agent (use onchain_agent_preflight instead; its address lane wraps this reading in a wider check). WHAT IT READS: (1) does the ⟨162 unchanged words⟩ the chain is. Nothing is signed or sent.ReturnsRETURNS (json): { schema: "sato.scan.recipient/v1", ⟨33 unchanged words⟩
⟨6 unchanged words⟩ agent to work with, hire or pay—(not a tool to build one with—) and want to see who registered it, on which chain, and whether it accepts payment. NOT FOR tools to build an agent from (use onchain_agent_search_resources instead), one agent's full manifest (use onchain_agent_get_agent_passport with a slug from here), or a ranked pick for a task (use onchain_agent_route_agent). RETURNS (json): { total, agents: [{ sato_agent_id, slug, name, description, agent_type, chains_supported, stack, payment/x402 metadata, verification_status, profile_url, manifest_url }] }. Searches the Sato Agent Registry: agents whose creators ⟨26 unchanged words⟩ agent_type, or x402_only. Only human-review-listed agents are returned. Registry agents come first; when the registry has no match for a query, matching agent-type directory listings come back in listings[] with kind "listing" (not passports), and total counts both. A query that names a brand ("aixbt", "olas") also returns brands[]: the identities someone declared for it (ERC-8004 ids, wallets, builder codes), each saying who declared it (the brand, the platform that lists it, or the registrant); brands are not registry results and are not counted in total. Read-only. This is the Sato Agent Registry only: ⟨59 unchanged words⟩ evidence-reviewed Verified/Audited. Nothing here implies safety or performance.Returns (json): { total, agents: [{ sato_agent_id, slug, name, description, agent_type, chains_supported, stack, payment/x402 metadata, verification_status, profile_url, manifest_url }] }. Read-only.Example: { chain: "Base", x402_only: true }
USE WHEN someone wants a ready-made onchain agentpackagePACKAGE to download or fork rather than assemble one. Searches Sato Hub's published agent packages—, each a public view of one sealed, ⟨12 unchanged words⟩ license, and evidence freshness for that exact digest. NOT FOR directory projects such as frameworks or MCP servers (use onchain_agent_search_resources instead), running agents to hire (use onchain_agent_search_agents), or generating a fresh repo from a goal (use onchain_agent_create_agent).ReturnsRETURNS (json): { listings: [{ slug, ⟨73 unchanged words⟩ download URL is ever returned; cite sato_url. Read-only. Example: { query: "treasury", limit: 10 }
USE WHEN you need to look up crypto-agent tooling (frameworks, MCP servers, wallets, payment rails, data tools) by name, chain, standard or what it does, or checkwhetherthat a specific project exists and is maintained.Searches aA daily-rebuilt directoryof onchain agents,frameworks, skills and tooling —each entry scored from public evidence and linking to a citablepage,page. NOTwhichFORisawhybuildthisgoalbeatsin plain words such as "awebtradingsearchagentforontheseBase"questions.(useForonchain_agent_recommend_stack instead), aBUILDRUNNINGGOALagentintoplainhirewordsor pay ("use onchain_agent_search_agents), atradingdownloadable agentonpackageBase"(use onchain_agent_search_listings),callwhatonchain_agent_recommend_stackanfirstagent skill touches (use onchain_agent_search_skills), or one record by slug (use onchain_agent_get_resource). `search` is the one-box version for ChatGPT deep research. RETURNS (json):it{returnstotal,acount,wholeoffset,stackhas_more, next_offset?, resources: [...] }; eachpickresourcewithhasachains,Preflightstatus,summaryliveness, github_stars, verification_status andonchain_agent_get_deploy_spectheturnsmarketplaceafieldspick(is_agent/is_hirable/is_licensable).intoRead-only. FILTERS:installquerysteps.(free text, AND-matched terms), chain, status, liveness, featured, and the taxonomy facets (docs/taxonomy.md) entity_class, resource_type, use_case, standard and iface — closed vocabularies listed in the input schema: anything else is refused with the list, never answered with an empty result. Legacy flags still work: category, is_agent, is_skill, is_harness. Sort by priority (default), newest_release, stars, or name. Paginates via limit/offset. Deprecated resources are never returned.ASTARTING POINTS: a query asking for somewhere to start — "tutorial ⟨89 unchanged words⟩ lists tools, not tutorials, and says so.Filters: query (free text, AND-matched terms), chain, status, liveness, featured, and the taxonomy facets (docs/taxonomy.md) entity_class, resource_type, use_case, standard and iface — closed vocabularies listed in the input schema: anything else is refused with the list, never answered with an empty result. Legacy flags still work: category, is_agent, is_skill, is_harness. Sort by priority (default), newest_release, stars, or name. Paginates via limit/offset. Deprecated resources are never returned. Returns (json): { total, count, offset, has_more, next_offset?, resources: [...] } where each resource includes chains, status, liveness, github_stars, verification_status, and the marketplace fields (is_agent/is_hirable/is_licensable). Read-only.Examples: - "Active hirable agents on Base ⟨82 unchanged words⟩
⟨10 unchanged words⟩ and should know what it will touch first—: keys, credentials, remote scripts, outbound hosts. ⟨60 unchanged words⟩ flag carries evidence lines on the skill's page. NOT FOR finding frameworks, MCP servers or wallets (use onchain_agent_search_resources instead), an npm/pip/MCP install command (use onchain_agent_check_install), or one skill's Preflight verdict (use onchain_agent_preflight with skill).ReturnsRETURNS (json): { total, skills: [{ ⟨122 unchanged words⟩
⟨14 unchanged words⟩ not in the directory and wants it considered. NOT FOR correcting a listing that already exists (that goes through the claim flow on its page), checking whether a project is listed (use onchain_agent_search_resources first), or registering a running agent (use onchain_agent_register_agent). This WRITES: it files the same row the ⟨211 unchanged words⟩ per caller. Nothing is written when it trips.ReturnsRETURNS (json): { ok, duplicate, submission_id ⟨36 unchanged words⟩
⟨50 unchanged words⟩ allowed it and a simulation did not revert. `build-tx` WRITES a receipt row. NOT FOR a plain quote with no policy gate (use onchain_agent_route_swap instead), a token launch (use onchain_agent_route_launch), or a liquidity pool (use onchain_agent_route_lp). NON-CUSTODIAL: this tool NEVER signs, holds, ⟨170 unchanged words⟩ refuse again. A COUNTERPARTY WITH NO PASSPORT IS`no_record`. That is`no_record`: the ordinary caseand is, not a finding against the address.A Passport is self-registered, andwallet_verified proves control of a key, never anything ⟨17 unchanged words⟩ in `disclosure`, per venue, before anything issigned — a fee sentence has to be true for the venue it describes.signed. A trade that is never signed pays nothing. ⟨20 unchanged words⟩ Jupiter and 0x, when exactly one sideof the tradeis a stablecoin or the chain's native asset (in Sato Hub's tables) the fee is taken on THAT side;on other venues, or when neither side is, it is takenotherwise on the leg `disclosure`names, in the token `sato_fee_token`names. They are part of the signed answer. `price_impact` is the venue's own readingof how far the output sits from the input(`reported_bps`where the venue reports one, or `usd_value_gap_bps` from its USD valuations, which include fees ⟨6 unchanged words⟩ VENUE: pass `venue` to quote one venueonly.only;Ifif it cannot answer,is not offered onthechain or is refused, the answerreply names it and sayswhy;why, and no other venue isever tried in its place.tried. RECEIPT: a `build-tx` response is recorded and ⟨17 unchanged words⟩ receipt is not a claim the trade filled.ReturnsRETURNS (json): { mode, lane, route_id, ⟨93 unchanged words⟩
⟨26 unchanged words⟩ a Preflight on a schedule of its own. This WRITES one subscription row. NOT FOR a one-off check now (use onchain_agent_preflight instead) or a record's change history (use onchain_agent_recent_changes). Goes through the SAME path the public form ⟨172 unchanged words⟩ in what was observed — not a warning.ReturnsRETURNS (json): { ok, action, target_kind, ⟨13 unchanged words⟩
SearchUSE WHEN you want one query box over Sato Hub, the daily-rebuilt index of what onchain ⟨26 unchanged words⟩ Not for token prices, trading or investment advice.TakesNOToneFORqueryfilteredstring.orReturnspaginated directory queries (use onchain_agent_search_resources instead) or registered agents (use onchain_agent_search_agents). RETURNS (json): { results: [{ id, title, url }] }, at most 10, bestfirst;first, from one query string; url is the canonical satohub.ai page to cite. ⟨41 unchanged words⟩
One dated card of facts for a chain — USE WHEN you are about to build for or deploy to a chain and want its dated facts in one call: registry entry, USDC and CCTP domain, ERC-8004 registry deployment, which public RPC endpoints support state-override calls and eth_simulateV1, which x402 facilitators list it, and reported activity. NOT FOR one contract's address (use onchain_agent_get_contract_facts instead), the facilitator roster across chains (use onchain_agent_get_x402_facilitators), the agent-economy numbers per venue (use onchain_agent_get_agent_economy), or a list of chains (use onchain_agent_list_chains). RETURNS (json): …
Canonical contract addresses and ids, with source and date — USE WHEN you need the canonical address or id of something on a chain and want it with its source and date instead of from memory: a protocol's deployment (Uniswap Permit2, a Safe singleton, Multicall3, the ERC-4337 EntryPoint, an ERC-8004 registry), the USDC contract and CCTP domain Circle states for a chain, an x402 SDK's default stablecoin, or a chain's registry entry. NOT FOR a whole-chain readiness picture with RPC support and facilitators (use onchain_agent_get_chain_card instead), a recipient check before you pay (use onchain_agent_scan_recipient), or a token price. Token-list rows are…
Which line of an SDK is current, and what replaces it — USE WHEN you are about to write, fix or upgrade code that imports a crypto or agent SDK (viem, ethers, @solana/web3.js, x402, ...) and need to know which major line is current, whether the package or version you were taught is legacy or deprecated, what replaces it, and what breaks on the way. NOT FOR choosing a framework, wallet or payment rail for a build goal (use onchain_agent_recommend_stack instead), install steps (use onchain_agent_get_deploy_spec), whether an install command takes your key (use onchain_agent_check_install), or a project's directory record (use onchain_agent_get_resour…
Which x402 facilitators list a chain, scheme and version — USE WHEN an agent has to pay or charge with x402 and needs to know which facilitator lists a chain, a scheme and a protocol version, how recently each one actually answered, and which ones could not be read (key wall, unreachable), so "none lists it" is never mistaken for "all were checked". NOT FOR finding a paid API to call (use onchain_agent_search_resources instead, with standard "x402"), one chain's wider readiness (use onchain_agent_get_chain_card), or x402 volume and merchant counts (use onchain_agent_get_agent_economy). RETURNS (json): { query, total, facilitators: [{ id, value: { fa…
⟨3 unchanged words⟩ ,"properties":{"chain":{"description":"Optional.Optional: base, bnb, arbitrum, polygon, solana. Must agree with the input; itonlysuppliesathe chaintheainputbare 0x address or a link leaves open (a Uniswap link with no chain). A bare 0x with no chain at all is read as Base.","enum":["base","bnb","arbitrum","polygon","solana"],"type":"string"},"input":{"description":"What to resolve: a contract address (0x…) on Base, BNB Chain, Arbitrum, Polygon and Solana (0x…name the chain; a bare 0x with none is read as Base and says so), a Solana mint (base58), or a link from dexscreener.com, geckoterminal.com, birdeye.so, pump.fun, gmgn.ai, basescan.org, bscscan.com, arbiscan.io, polygonscan.com, solscan.io, jup.ag, app.uniswap.org, aerodrome.finance, zora.co, ⟨46 unchanged words⟩
⟨33 unchanged words⟩ :"Chain display name as the directory writesitit. Swapped for the agent bots: Base,e.g.BNB'Base'Chain,'Ethereum'Arbitrum,'Solana'.Polygon and Solana. A short spelling ('bnb', 'bsc', 'matic', 'arbitrum one') is read as the same chain; other chains the venues quote work by their display name, e.g. 'Ethereum'.","maxLength":40,"minLength":1,"type ⟨238 unchanged words⟩
⟨570 unchanged words⟩ the native coin: swap through USDC orETH/SOLthe chain's own native coin). Example: { chain_in: "Base", ⟨8 unchanged words⟩
⟨42 unchanged words⟩ description":"Source chain as the directory writesitit. The agent bots swap on Base,e.g.BNB'Base'Chain,'Ethereum'Arbitrum,'Solana'.Polygon and Solana; a short spelling ('bnb', 'bsc', 'matic', 'arbitrum one') is read as the same chain, and other chains the venues quote work by their display name, e.g. 'Ethereum'.","maxLength":40,"minLength":1,"type ⟨474 unchanged words⟩
⟨513 unchanged words⟩ sato_fee_bps, sato_fee_recipient, sato_fee_side, sato_fee_token, sato_fee_tier, referral, price_impact, disclosure, chosen_by, alternatives, unavailable_venues, preflight ⟨65 unchanged words⟩
⟨187 unchanged words⟩ "minLength":1,"type":"string"},"referrer":{"description":"Optional referral: a payout address (a Base 0x address or a Solana address) that earns 30% of the Sato fee on this swap, paid weekly in USDC once Sato Hub has read the fee onchain. It needs the taker (the address that will sign) to be named too, and it applies to same-chain swaps only: without a taker the answer carries referral null. The trade and the fee address do not change. A bad address is refused as referrer_invalid; one of Sato Hub's own fee addresses is ignored. The answer's `referral` echoes what was recorded (null when none).","maxLength":64,"type":"string"},"response_format":{"default":"markdown","description": ⟨209 unchanged words⟩
⟨512 unchanged words⟩ amount_out, sato_fee_bps, sato_fee_recipient, sato_fee_side, sato_fee_token, sato_fee_tier, price_impact, disclosure, chosen_by, alternatives, unavailable_venues, preflight ⟨30 unchanged words⟩ answered: { unavailable, tried, checked_at, caveat, code? } (code "fee_side_unavailable" when neither side is a stablecoin or the native coin: swap through USDC or ETH/SOL). Example: { chain_in: "Base", token_in ⟨7 unchanged words⟩
⟨68 unchanged words⟩ for `token`: Base, Ethereum, Arbitrum, RobinhoodChain.Chain, Solana. Anything else(Solana included)answers 'unknown' with the reason, never a guess. ⟨229 unchanged words⟩ ":"An ERC-20 token contract address, e.g.'0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb'.'0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb',Needsor`chain`.withEVMchainonlySolanainav1.mint (base58). Needs `chain`.","maxLength":120,"type":"string"} ⟨78 unchanged words⟩
⟨254 unchanged words⟩ , tx, source_url }, sato_fee_bps, sato_fee_recipient, sato_fee_side ("in" | "out" | null: the leg the fee is taken on), sato_fee_token, price_impact, disclosure, chosen_by: [{ signal, value, source_field ⟨27 unchanged words⟩
⟨355 unchanged words⟩ days of daily observation behind the success rate, counted in the rate window (default 14 when min_observed_success is set).", ⟨24 unchanged words⟩ , over at least min_observed_days (default 14). The rate and the days both count only checks in the rate window: from 2026-09-01 (when the probe stopped counting a bot-block as a failure) if an earlier check failed, else from the first check. This is the share of OUR checks, ⟨200 unchanged words⟩
⟨307 unchanged words⟩ A trade that is never signed pays nothing. `sato_fee_side` ("in" or "out") and `sato_fee_token` say which leg the fee is taken on and in what token: on KyberSwap, Jupiter and 0x, when exactly one side of the trade is a stablecoin or the chain's native asset (in Sato Hub's tables) the fee is taken on THAT side; on other venues, or when neither side is, it is taken on the leg `disclosure` names, in the token `sato_fee_token` names. They are part of the signed answer. `price_impact` is the venue's own reading of how far the output sits from the input (`reported_bps` where the venue reports one, `usd_value_gap_bps` from its USD valuations, which include fees); null is unknown. PINNING A VENUE: pass `venue` to quote ⟨77 unchanged words⟩ token_in, token_out, amount_in, amount_out, sato_fee_bps, sato_fee_recipient, sato_fee_side, sato_fee_token, price_impact, disclosure, chosen_by, alternatives, unavailable_venues, preflight, ⟨47 unchanged words⟩
Resolve an address, a mint or a link to the token it is — USE WHEN a person or an agent has dropped a contract address, a Solana mint or a link and the next step needs to know what it IS before anything else happens: chain, address, name, symbol, decimals, token program, the main pool and that pool's liquidity, and the token's USD price. Read-only. INPUT: a Base contract address (0x…), a Solana mint, or a link from dexscreener.com, geckoterminal.com, birdeye.so, pump.fun, gmgn.ai, basescan.org, solscan.io, jup.ag, app.uniswap.org, aerodrome.finance, zora.co, clanker.world. The token is taken from the link's path with no request for the link itself;…
⟨337 unchanged words⟩ ","minimum":0,"type":"number"},"venue":{"description":"Pin ONE venue. Only it is quoted; if it cannot answer, is not offered on the chain or is refused, the reply names it and says why, and no other venue is tried. Omit and the chooser ranks every venue that quotes.","enum":["0x-protocol","1inch","jupiter-aggregator","odos","kyberswap","relay","debridge","lifi","cow"],"type":"string"}},"required":["chain_in","token_in"," ⟨4 unchanged words⟩
⟨549 unchanged words⟩ ], checked_at, caveat, rules, token?, skill?, solana_receipt? }. `token` and `skill` are the raw reports for thoselanes.lanes; `solana_receipt` (present with a custody reading) is where that reading is recorded on Solana, or null. Read-only. X402 LANE (x402): one unpaid ⟨221 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"budget_usd":{"description": ⟨189 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"command":{"description": ⟨43 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"a":{"description": ⟨45 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"chain":{"description": ⟨128 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨38 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"category":{"description": ⟨146 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"chain":{"description": ⟨78 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨44 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"since":{"description": ⟨31 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨84 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨35 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"days":{"default": ⟨113 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨37 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"chain":{"description": ⟨114 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"include_activity":{"default": ⟨43 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨16 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"chain":{"description": ⟨235 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨30 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨52 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨16 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨16 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"response_format":{"default": ⟨16 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"address":{"description": ⟨362 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"days":{"default": ⟨74 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"chain":{"description": ⟨131 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"agent_type":{"description": ⟨335 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"capability":{"description": ⟨117 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"chain":{"description": ⟨164 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"chain":{"description": ⟨76 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"amount":{"description": ⟨153 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"budget_usd":{"description": ⟨127 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"amount":{"description": ⟨208 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"agent_type":{"description": ⟨109 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"cursor":{"description": ⟨87 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"category":{"description": ⟨13 unchanged words⟩ "Agent Launchpad","Agent Marketplace","Wallet Infrastructure","Payment Rail","DeFi Tool","Trading Tool","DAO ⟨576 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"flag":{"description": ⟨86 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"category":{"description": ⟨24 unchanged words⟩ "Agent Launchpad","Agent Marketplace","Wallet Infrastructure","Payment Rail","DeFi Tool","Trading Tool","DAO ⟨183 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"amount_in":{"description": ⟨342 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"action":{"description": ⟨142 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","properties":{"query":{"description": ⟨35 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"about_url" ⟨91 unchanged words⟩
⟨141 unchanged words⟩ own scan status is attributed to the registry. `slug` is the directory listing a skill targets: a slug that matches no skill comes back empty, and says whether it is a directory listing (onchain_agent_get_resource reads it), a wiki page or Sato Hub's own planner. Read-only. Cite https://satohub.ai/skills. Examples: - "solana ⟨27 unchanged words⟩
⟨82 unchanged words⟩ fork — there is no deploy or buy), and `superseded_by` (the template that replaces the package, or null). NOT FOR DIRECTORY LISTINGS: packages are agents ⟨93 unchanged words⟩
⟨186 unchanged words⟩ planner for the person you are building for.ForWhen a nightly-checked template answers the goal, `create` names it and the first next step is to generate that runnable repo with onchain_agent_create_agent. Only when no template matches, a Base goal with a wallet, swap, trading or x402 payments that names TypeScript/Node or no runtime,`starter` pointscarriesat`starter`, a TypeScript template repo built by Sato Hub ⟨198 unchanged words⟩
⟨61 unchanged words⟩ fork_permitted, evidence_freshness, integrity, acquisition_modes, sato_url, superseded_by, ... }], next_cursor }. `superseded_by` is the id of the nightly-checked template that replaces a package (generate it with onchain_agent_create_agent), or null; the package itself still downloads. RULE ENFORCED: evidence counts only rows recorded ⟨36 unchanged words⟩
⟨138 unchanged words⟩ "template" / "x402 starter" also carry`starter``templates`: aTypeScriptpointer to onchain_agent_create_agent and the templates catalogue (never a result), unless the query names another chain or runtime. Only when the catalogue has no template for Base is it `starter` instead: a TypeScript template built by Sato Hub (labelled ours, not audited, never a result)unless the query names another chain or runtime.. The directory lists tools, not tutorials, and ⟨182 unchanged words⟩
⟨7 unchanged words⟩ , e.g. Base, Ethereum, Gnosis. Required whenthea venue's stage is measured on more than one chain ⟨125 unchanged words⟩ string"},"stage":{"description":"Lifecyclestage,stage.e.g.REQUIRED in 'stage' mode. By venue: erc8004 = registered,launchedregistered_new_1d (daily),settled_to_catalogued_selleractive_7d,mcp_endpoint_answers.mcp_endpoint_answers;Requiredolasin='stage'registered,mode.working; virtuals = launched; virtuals_acp = jobs_created; x402 = settled_to_catalogued_seller, answers_402, facilitator_txs_1d_known (daily).","maxLength":60,"type":"string"},"venue":{"description":"Venue id, e.g.: erc8004, olas, virtuals, virtuals_acp, x402, erc4337_accounts. Optional: when omitted, a stage that one venue reports is read from that venue, and a stage several venues report (registered) returns one separate series per venue. Pass it to read exactly one. See onchain_agent_get_agent_economy for the catalogue.","maxLength": ⟨5 unchanged words⟩
USE WHEN you have apackagePACKAGE slug (from onchain_agent_search_listings) and need what it does, what it needs ⟨66 unchanged words⟩ — there is no deploy or buy). NOT FOR DIRECTORY LISTINGS: packages are agents published through Sato Hub, a separate set from the directory of projects and tools. A directory slug (a framework, MCP server or project) answers "directory listing, not a package"; read those with onchain_agent_get_resource. RULE ENFORCED: never a signed URL, account ⟨52 unchanged words⟩
⟨21 unchanged words⟩ :{"description":"The package slug from onchain_agent_search_listings. This is NOT a directory slug: for a directory listing (a project, framework or tool such as coinbase-agentkit) call onchain_agent_get_resource instead.","maxLength":64,"minLength":3,"type ⟨5 unchanged words⟩
⟨121 unchanged words⟩ aimed at that wallet. FREE WHILE IN PREVIEW.A paid tier will be announced.No price isquoted hereset andnonenoexistspaymenttoisquote.taken. WHAT IS STORED: the normalised target, the ⟨95 unchanged words⟩
⟨127 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨55 unchanged words⟩
⟨31 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨7 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨26 unchanged words⟩
⟨49 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨22 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨32 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨70 unchanged words⟩
⟨42 unchanged words⟩ rather than copied from a README. Returns thestructureddeploy manifest for one resource by slug — ⟨50 unchanged words⟩ key was observed leaving, fund-moving actions, thepackageversion read, the Preflight verdict, what the ⟨41 unchanged words⟩ does not declare. PREFLIGHT COMES WITH IT:every answer carries`preflight_summary`—is the Preflight verdictfor this listingfrom Sato Hub's records (no live handshake),theits rulethat decided itand thetwo or threereadings it turnedon.on; `full_check`namesis the onchain_agent_preflight callthat returnsfor every evidence line. A verdict is not a ⟨16 unchanged words⟩ a safety guarantee: "verified" = theinstalldocumentedpathinstall wasreproduced/confirmedreproducedfromintheaproject'scleandocs;container; "self_reported" = parsed from the project's READMEand, notindependentlyreproduced.Always verifyVerify keys, permissions,and funds before running anything.`save_stack_url` is this listing's page on satohub.ai with the same install steps — a link to hand to the person you are building for.Returns (json): { slug, name, github_url, docs_url, sato_url, deploy_spec: { runtime,install[], entry, requires[], chains[], license, mcp_native, mcp_invocation?, deploy_clarity, deploy_status, source_url, as_of },preflight_summary: { verdict,rule, rule_means, evidence[], checked_at, basis, full_check }, preflight_note,trust_spec: { applies,applies_because[], level: quiet|notice|warning, line, sato_check: { status, subject, check_url, version?, as_of?, key_access?trust_warnings?,key_egress?save_stack_url,fund_action_count?next_step,methods?note }, preflight: {.verdict,`save_stack_url`rule,isas_ofthis},listing'sunknowns[],pagefresh_checkwith},thetrust_warnings?,samesave_stack_url,installnext_stepsteps,note }.and `next_step`is one sentence:names the Preflight call to run before installing,and—thesurfacesave_stack_urlboth togivethe person you are buildingfor — surface both. Returns an error iffor.theA resourcehaswith no manifest yet(they are being rolled out resourcereturnsbyanresource),error with installable alternatives. Read-only. Example: { slug: "solana-agent-kit" }
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨23 unchanged words⟩
⟨30 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨55 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨25 unchanged words⟩
⟨103 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨4 unchanged words⟩
⟨19 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨17 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨4 unchanged words⟩
⟨133 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨40 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨18 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨19 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨4 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨4 unchanged words⟩
⟨5 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨4 unchanged words⟩
⟨253 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨101 unchanged words⟩
⟨41 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨26 unchanged words⟩
⟨87 unchanged words⟩ then onchain_agent_get_deploy_spec once per pick → install steps.It returns a trust-ranked stack ofReturns real directoryresources — bucketedlistingsintoin slots (framework, wallet, payments, trading, ⟨9 unchanged words⟩ are kept out of trading), each pickcarryingwith its Sato Score, liveness, deploy-spec status, github_url and a records-only `preflight_summary` (the Preflightverdictfrom Sato Hub's records,itsruleand, the readings it turned on), plus honestgaps where the directory has no strong match.gaps. A standardthe goal names(x402, ERC-8004, A2A, MCP)and a, runtimeit names(TypeScript/Node, Python)lift the picks that implementorrun on it, and awallet controlit names(apolicy, spending limit, session keys, permissions) the goal names liftswalletsthe picks whose owntags or one-linerrecordnamenamesoneit — quoted in the reason, self-reported. `save_stack_url` ⟨7 unchanged words⟩ planner for the person you are building for.When the goal isForona Base goal with a wallet, swap, trading or x402 paymentsandthat names TypeScript/Node or no runtime, `starter` points at a TypeScriptGitHubtemplate repo built by Sato Hub (holds no ⟨9 unchanged words⟩ goal named the runtime) — never a pick.A goal naming another runtime gets none.KEYS AND MONEY COME WITH IT: every pick ⟨30 unchanged words⟩ can move funds on its own, thepackageversion read, the Preflight verdictand rule, and what the reading does not cover. It is decided by the pick (itscategory,apayment standard, wallet material in its setup), ⟨38 unchanged words⟩ reads key material its setup does not declare.`fresh_check`Forholdsa newer reading, `trust_spec.fresh_check.check_install` is theliveonchain_agent_check_installcallscallforanda`preflight_summary.full_check`newerthereading.onchain_agent_preflight(`trust_step`callisthatdeprecatedreturnsandeverykeptevidenceforlineolder—clients.)runBeforethem before anything is installed, connected, paid ortraded, onchain_agent_preflight with a pick's full_check args returns every evidence line.traded. Ranking reflects openness/activity/verifiability — never a safety, ⟨25 unchanged words⟩
⟨87 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨37 unchanged words⟩
⟨185 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨143 unchanged words⟩
⟨106 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨4 unchanged words⟩
⟨136 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨21 unchanged words⟩
⟨62 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨7 unchanged words⟩
⟨52 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨94 unchanged words⟩
⟨114 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨6 unchanged words⟩
⟨138 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨63 unchanged words⟩
⟨85 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨17 unchanged words⟩
⟨76 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨4 unchanged words⟩
⟨187 unchanged words⟩ , featured, and the taxonomy facets (docs/taxonomy.md):entity_class(resource | agent | reference), resource_type(Framework | Tool/Service | Infrastructure | Venue | Network | Standard), use_case(trading,payments, wallets, data, identity, privacy, launch, security, build),standard(x402, erc-8004, erc-8183, mcp, a2a),and iface(mcp, sdk, rest-api, plugin, cli,—ui,closedcontract).vocabulariesThoselistedthreeinaretheclosedinputvocabulariesschema: anything else is refused with the list, ⟨144 unchanged words⟩
⟨473 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨116 unchanged words⟩
⟨62 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨17 unchanged words⟩
⟨178 unchanged words⟩ ":{"default":"markdown","description":"Output format:Text'markdown'format;(human-readable,structuredContentdefault)isorJSON'json'either(machine-readable).way.","enum":["markdown","json"], ⟨33 unchanged words⟩
⟨192 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨143 unchanged words⟩
⟨57 unchanged words⟩ ":{"default":"markdown","description":"OutputTextformat:format;'markdown'structuredContent(default)isorJSON'json'.either way.","enum":["markdown","json"], ⟨78 unchanged words⟩
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"address":{"description":"A recipient address the caller is about to pay (Sato Scan): 0x + 40 hex on an EVM chain, or a Solana address. Needs `chain`. Never stored.","maxLength":120,"type":"string"},"agent":{"description":"An ERC-8004 agent reference ⟨35 unchanged words⟩ answers 'unknown' with the reason, never a guess. For `address` it is the chain the payment would settle on: Base, Solana, Tempo, Polygon, BNB Chain, Arbitrum, Avalanche, Optimism, Ethereum, SKALE Base, Sei, X Layer, Monad, Robinhood Chain, World Chain, Abstract.","maxLength":40,"type":"string"} ⟨18 unchanged words⟩ initialize + tools/list handshake, capped at 8 seconds.","maxLength":300,"type":"string"},"from":{"description":"With `address`: the paying wallet. Lets the reading compare against its own history and say whether it is being targeted by address poisoning. Never stored.","maxLength":120,"type":"string"},"origin":{"description":"With `address`: the https URL whose 402 response named the address (a public host; no credentials). Lets the reading say whether that origin declared it. Never stored.","maxLength":300,"type":"string"} ⟨149 unchanged words⟩
⟨104 unchanged words⟩ failed check is not news about the target. wallet: get told when Sato Scan sees address poisoning aimed at that wallet. FREE WHILE IN PREVIEW. A paid tier will ⟨114 unchanged words⟩
⟨119 unchanged words⟩ agent (an ERC-8004 reference like 'base:42'), wallet (<Chain>:<address>, e.g. 'Base:0x...').","enum":["repo","package","endpoint","agent","wallet"],"type":"string"}},"required" ⟨5 unchanged words⟩
Check a recipient address before you pay it — USE WHEN an agent is about to pay or transfer to an address: an x402 payTo, a treasury sweep, a top-up. Pass the chain and the recipient; add the token, the origin whose 402 named the address and the paying wallet for a fuller reading. Sato Scan answers five questions, each with its own date and gap. WHAT IT READS: (1) does the recipient only LOOK like an address the payer pays, matching its first and last characters without being it; (2) is the token the issuer's contract, keyed by contract address and never by symbol; (3) did the paid party declare the address, through the origin that serv…
⟨32 unchanged words⟩ ":"Agent framework. Templates exist for agentkit, ai-sdk, claude-agent-sdk, openai-agents, plain-ts; any other answers no_template ⟨88 unchanged words⟩
⟨72 unchanged words⟩ itself an MCP server, and a deploy_status. KEYS AND MONEY COME WITH IT: every answer carries `trust_spec` — what this install does with your keys and money, from Sato Check, dated (key access, whether a planted test key was observed leaving, fund-moving actions, the package version read, the Preflight verdict, what the reading does not cover). A hosted API with no package says so. Show `trust_spec.line` to the person you are building for before installing; `trust_warnings` appears only when a planted key was observed leaving or code reads key material its setup does not declare. PREFLIGHT COMES WITH IT: every answer carries `preflight_summary` ⟨142 unchanged words⟩ [], checked_at, basis, full_check }, preflight_note, trust_spec: { applies, applies_because[], level: quiet|notice|warning, line, sato_check: { status, subject, check_url, version?, as_of?, key_access?, key_egress?, fund_action_count?, methods? }, preflight: { verdict, rule, as_of }, unknowns[], fresh_check }, trust_warnings?, save_stack_url, next_step, note }. `next_step` is ⟨48 unchanged words⟩
⟨283 unchanged words⟩ pick. A goal naming another runtime gets none.WhenKEYStheANDgoalMONEYputsCOME WITH IT: every pick carries `trust_spec` — what it does with your keysorandfundsmoney,infromplaySato(aCheck,walletdated: whether it takes your key, whether a planted test key was observed leaving,policywhether it can move funds on its own,spendingtheorpackageswap)version read,everythe Preflight verdict and rule, and what the reading does not cover. It is decided by the pickalso(itscarriescategory,`trust_step`:a payment standard, wallet material in its setup), not by theonchain_agent_check_installgoal's words, andonchain_agent_preflightneedscallsno extra call. Show each pick's `trust_spec.line` torunthebeforepersoninstallingyouit,areargumentsbuildingfilledfor;in.`trust_warnings` (top of the answer) lists any pick where a planted key was observed leaving or code reads key material its setup does not declare. `fresh_check` holds the live calls for a newer reading. (`trust_step` is deprecated and kept for older clients.) Before anything is installed, connected, paid or ⟨43 unchanged words⟩
TurnBuild abuildplanintoandapointstarterto the repo generator
USE WHEN a plan has been agreed and the nextstepquestion isawhich repositoryrather thantomorestartadvice.from. Builds the plan (same brain as `onchain_agent_build_plan`) andwritesreturns itintowith asmall`create`starterpointerrepoto `onchain_agent_create_agent`,returnedwhichasgeneratesathebase64runnableziprepoplusfrom amanifestnightly-checkednamingtemplate.everyThisfile. WHATtoolISnoINlongerTHEwritesARCHIVErepository files:`README.md`every(thedoorplan(thisrenderedserver,every sourcePOSTURL/api/create, the CLI and thedisclosure thatAgentSatoArchitect)OSdownloadsistheours)same·repo`sato.plan.json`from(theplan,samesignedengine. WHATatCOMESitsBACK:ownthechecked_atplanwhensummarya(goal,signingintent,keychain,isplan_url,configured)checked_at,·stack`.env.example`slugs),(everythe environmentvariablenames the stack's own deploy specs ask for,values BLANK, eachanyunderdocumentedainstallcommentthatnamingpipeswhichalistingremotewantsscriptit)into·a`install.sh`shell (the`quarantined_installs`,documentedtoinstallreadlinesbeforeinrunningorderit),each underandits`create`:Preflighttheverdict)tool·name,`agent.config.json`the(chain,CLItokenscommand and thevenuetemplateSatotheRoutegoalchosemaps to,withor`chosen_by`)null·when`.mcp.json`no(SatotemplateHub'sanswersMCPit. KEPTserverFORplusCOMPATIBILITY:any`files`MCP-nativeisstackanitem)empty·list`docker-compose.yml`andONLY`bytes`whenisevery0;stack`include_zip`itemisdocumentsacceptedaanddockerignored.install.`mode` is "plan_only". RULE ENFORCED: nothing is generated. Everylinevalue is atemplate constant or afield of theplan, copied verbatim.plan. An install line we were not told is neverinvented, and a value we do not hold is left blank with a comment rather than filled with a plausible default. THE ONE SAFETY RULE: a documented install that pipes a remote script into a shell (`curl … | sh`) is written as a COMMENTED line with a warning above it, never as an executable one, and it is reported in `quarantined_installs`. Uncommenting it is the reader's decision to take deliberately. DETERMINISTIC: the same plan produces a byte-identical archive — the timestamps come from the plan's `checked_at`, not the clock.invented. NON-CUSTODIAL:thenothingarchivehere holdsnokeysand no secrets,and nothing heresigns, deploys or moves anything. Returns (json): {name, filesmode:[{ path"plan_only",notename,bytesfiles:}[], env_names, quarantined_installs,zip_base64,bytes: 0, plan: { goal, intent, chain, plan_url, checked_at, stack_slugs }, caveat, create: { tool, command, template, note } }. Example: { goal: "a Base ⟨12 unchanged words⟩
⟨75 unchanged words⟩ , in plain words. The plan is builtfirst,andthenthewrittenmatchingintocreate_agentfiles.template is named.","maxLength":600,"minLength":3,"type":"string"},"include_zip":{"description":"True (default) returnsAcceptedtheforarchivecompatibilitybase64-encodedandalongsideignored:thethismanifest.toolFalseisreturnsplan-only.
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"about_url":{"description":"Only with identity_note: the satohub.ai page that says what Sato Hub is.","type":"string"},"identity_note":{"description":"Only when a search for the Sato name itself matched nothing: Sato Hub's no-token statement. Not a result.","type":"string"},"results":{"description":"At most 10 matches ⟨48 unchanged words⟩
⟨170 unchanged words⟩ lift the picks that implement or run onit.it, and a wallet control it names (a policy, spending limit, session keys, permissions) lifts wallets whose own tags or one-liner name one — quoted in the reason, self-reported. `save_stack_url` opens the goal in the Sato Hub planner for the person you are building for. When the goal isTypeScript/Nodeon Base with a wallet, swap, trading ortradingx402 payments and names TypeScript/Node or no runtime, `starter` points at a TypeScript GitHub template repo built by Sato Hub (holds no key, signs nothing, notauditedaudited; `runtime_basis` says whether the goal named the runtime) — never a pick. A goal naming another runtime gets none. Before anything is installed, connected, paid or ⟨43 unchanged words⟩
⟨111 unchanged words⟩ returns starting points labelled as such: listings named as a starter or template first, then listings whose install Sato Hub reproduced,orplusthatthepublishwikidocsguides.and"starter"an/install"template" / "x402 starter" also carry `starter`: a TypeScript template for Base built by Sato Hub (labelled ours,plusnot audited, never a result) unless thewikiqueryguides.names another chain or runtime. The directory lists tools, not tutorials, and ⟨216 unchanged words⟩
Search Sato Hub — Search Sato Hub, the daily-rebuilt index of what onchain and crypto AI agents are built from (frameworks, MCP servers, wallets, x402 and stablecoin payment rails, data tools), plus its dated answers, agent-economy numbers and wiki. Not for token prices, trading or investment advice. Takes one query string. Returns (json): { results: [{ id, title, url }] }, at most 10, best first; url is the canonical satohub.ai page to cite. Pass an id to `fetch` for the full text. A query nothing matches returns results: [] — never padded with unrelated records. Read-only. Examples: "coinbase agentkit", "x…
⟨197 unchanged words⟩ ","maxLength":120,"type":"string"},"x402":{"description":"An https x402 resource URL. ONE unpaid request reads its 402 payment terms (v1 body or v2 PAYMENT-REQUIRED header); no payment is ever sent or signed.","maxLength":300,"type":"string"}},"type":"object"}
Check what an install can do with your keys and funds — Before installing a crypto package, MCP server or skill, check what it can do with your keys and funds. USE WHEN you are about to run npm/pnpm/yarn/bun add, npx -y, pip install, uvx or `claude mcp add`, or paste an {"mcpServers": …} config. Pass the command or the config text; every target in it gets a Sato Check custody summary answering four questions: does it take your key, does your key leave, can it move funds on its own, what changed. Each answer rests on evidence of one class — declared (the project says so), traced (our static read of the published artifact) or observed (a sandbox ru…
How fresh is the data behind each answer — USE WHEN you are about to quote a Sato Hub number, score, count or feed item and want to know how old it is — or when a figure looks stale and you need to know whether the pipeline behind it is late. Returns, per data surface (directory activity, news, Sato Score, liveness checks, snapshots, ERC-8004 counts, the weekly agent-economy measurements, x402, LP pools, skills, deploy verification and more): when it was last collected successfully, when a collection was last attempted and how that ended, how often it is expected to run, whether it is late, the next scheduled run, and the ledger step …
Get install stepsthatforwereaactuallystackrunpick, with its Preflight attached
Call once per pick after onchain_agent_recommend_stack. USE WHENyouaarecomponentabouthastobeenwritepickedsetup(frominstructionsonchain_agent_recommend_stack, onchain_agent_build_plan orinstallasomethingsearch)forandatheusernext step is installing it, or you are about to write setup instructions and want stepsthatcheckedwereagainstverifieda clean install rather than copied from a README. Returns the structured deploy manifest for one resource by slug —everything needed to install and instantiate it:runtime, install command(s), entry snippet, ⟨7 unchanged words⟩ itself an MCP server, and a deploy_status. PREFLIGHT COMES WITH IT: every answer carries `preflight_summary` — the Preflight verdict for this listing from Sato Hub's records (no live handshake), the rule that decided it and the two or three readings it turned on. `full_check` names the onchain_agent_preflight call that returns every evidence line. A verdict is not a security review, and `unknown` means no record, not a problem. deploy_status is a trust signal, NOT a safety ⟨25 unchanged words⟩ keys, permissions, and funds before running anything. `save_stack_url` is this listing's page on satohub.ai with the same install steps — a link to hand to the person you are building for. Returns (json): { slug, name, github_url, docs_url, sato_url, deploy_spec: { runtime, install[], entry, ⟨5 unchanged words⟩ , deploy_clarity, deploy_status, source_url, as_of }, preflight_summary: { verdict, rule, rule_means, evidence[], checked_at, basis, full_check }, preflight_note, save_stack_url, note }. Returns an error if the resource ⟨4 unchanged words⟩ they are being rolled out resource by resource)., with installable alternatives. Read-only. Example: { slug: "solana-agent-kit" }
⟨27 unchanged words⟩ to know what is on record about itFIRST.FIRST — every evidence line, with the field it was read from and its date. Stack picks and deploy specs already carry a records-only `preflight_summary`; call this for the full evidence, for any target that is not a pick (a repo, package, token, skill or ERC-8004 agent you were handed), or for a live handshake with an unlisted MCP endpoint. Pass exactly one of repo, package, endpoint ⟨480 unchanged words⟩
TurnBuildaanygoalcryptointoagent:agoalbuildin, stack and install steps out
Build any crypto agent: describe the goal in plain words and get the stack to build it from — framework, wallet, trading and swap venues, x402 payments, onchain data, on Base, Solana or any listed chain. USE WHEN someonedescribeswants to build an onchain or crypto agenttheyandwantsaystowhatbuilditandshouldneedsdoconcrete—components"arathertradingthanagentgeneralonadvice.Base",Give"anitElizaOS agent that charges via x402", "a TypeScript agent with a policy-controlled wallet". This is the first call for a build goal:ingoalplain→words;stackithere, then onchain_agent_get_deploy_spec once per pick → install steps. It returns a trust-ranked stack of real directory resources ⟨14 unchanged words⟩ carrying its Sato Score, liveness, deploy-spec status, github_url andgithub_urla `preflight_summary` (the Preflight verdict from Sato Hub's records, its rule and the readings it turned on), plus honest gaps where the directory has no ⟨19 unchanged words⟩ the picks that implement or run on it.Next:`save_stack_url`preflightopensathepickgoal(itsingithub_urltheasSato`repo`)Hub planner for the person you are building for. Before anything is installed,thenconnected,onchain_agent_get_deploy_specpaidfororitstraded,installonchain_agent_preflightsteps.with a pick's full_check args returns every evidence line. Ranking reflects openness/activity/verifiability — never a safety, quality, or returnsjudgment.judgment; a Preflight `unknown` means no record, not a problem. Read-only. Example: { goal: "trading agent ⟨7 unchanged words⟩
Find crypto-agent tooling by name, chain, standard or what it does
USE WHENsomeone asksyouwhatneed tobuild alookcryptouporcrypto-agentonchaintoolingagentbywithname,which toolschain,supportstandardaorchainwhatoritstandarddoes, or check whether a specific project exists and is maintained. ⟨27 unchanged words⟩ this beats a web search for these questions. For a BUILD GOAL in plain words ("a trading agent on Base"), call onchain_agent_recommend_stack first: it returns a whole stack, each pick with a Preflight summary, and onchain_agent_get_deploy_spec turns a pick into install steps. A query asking for somewhere to start — "tutorial", "starter", "beginner", "template", "example", "docs" — returns starting points labelled as such: listings whose install Sato Hub reproduced or that publish docs and an install, plus the wiki guides. The directory lists tools, not tutorials, and says so. Filters: query (free text, AND-matched terms) ⟨208 unchanged words⟩
⟨303 unchanged words⟩ ,"Dormant"],"type":"string"},"mcp_answering":{"description":"True = only listings whose MCP ENDPOINT answered Sato Hub's most recent MCP handshake (one check of ours, not uptime). Use this for 'which MCP servers answer'; min_observed_success alone is mostly a check of a listing's website.","type":"boolean"},"min_observed_days":{"description":"Minimum days of daily ⟨250 unchanged words⟩
⟨46 unchanged words⟩ each pick carrying its Sato Score, liveness,anddeploy-spec status and github_url, plus honest gaps where the directory has no strong match. A standard the goal names (x402, ERC-8004, A2A, MCP) and a runtime it names (TypeScript/Node, Python) lift the picks that implement or run on it. Next: preflight a pick (its github_url as `repo`), then onchain_agent_get_deploy_spec for its install steps. Ranking reflects openness/activity/verifiability — never a safety, ⟨16 unchanged words⟩
⟨105 unchanged words⟩ security, build), standard (x402, erc-8004,…erc-8183, mcp, a2a), iface (mcp, sdk,…rest-api, plugin, cli, ui, contract). Those three are closed vocabularies: anything else is refused with the list, never answered with an empty result. Legacy flags still work: category, is_agent, ⟨117 unchanged words⟩
⟨176 unchanged words⟩ {"description":"Filter by how it isaccessed/integratedaccessed/integrated. One of: mcp, sdk, rest-api, plugin, cli, ui, contract.","maxLengthenum":40["mcp","sdk","rest-api","plugin","cli","ui","contract"],"type":"string"},"integration":{"description" ⟨263 unchanged words⟩ "standard":{"description":"Filter to resourcessupportingimplementing astandardstandard. One of: x402, erc-8004, erc-8183, mcp, a2a.","maxLengthenum":40["x402","erc-8004","erc-8183","mcp","a2a"],"type":"string"},"status":{"description" ⟨12 unchanged words⟩ "use_case":{"description":"Filter by usecasecase. One of: trading, payments, wallets, data, identity, privacy, launch, security, build.","maxLengthenum":40["trading","payments","wallets","data","identity","privacy","launch","security","build"],"type":"string"},"verified_only":{" ⟨28 unchanged words⟩
GetUSE WHEN you are about to work with, pay or depend on a registered agent and want its published identity before committing. Returns the full Sato Agent Passport manifest (sato.agent.manifest/v1) ⟨69 unchanged words⟩
WhatUSEchangedWHENinyouthekeepOnchainaAgentlocal copy of the directorysinceandaneedgivenonlydatewhat—movedadditions,sinceper-resourceyourchangelasteventssync,andratherretirements.thanUsere-fetchingthisthetowholekeepcatalog.aReturnslocalwhatcopychangedinsincesyncainsteadgivenofdatere-fetching—theadditions,wholeper-resourcecatalog.change events, and retirements. Returns (json): { since, until, ⟨106 unchanged words⟩
List all resourceUSEcategoriesWHENwithyoucounts,needmostthepopulatedvalidfirst.categoryUsefulvalues before filtering onchain_agent_search_resources, or want to see how the crypto-agent landscape divides up bycategory.size. Lists every resource category with counts, most populated first. Returns (json): { total, categories: ⟨4 unchanged words⟩
ListUSEallWHENblockchainsyou need the valid chain names before filtering onchain_agent_search_resources, or want to know which chains have real agent tooling behind them rather than an announcement. Lists every blockchain represented in the directory with resource counts, ⟨17 unchanged words⟩
ListUSEallWHEN you need the slug for a crypto-agent explainer before calling onchain_agent_get_wiki_page, or want to see which concepts have a sourced page you can cite. Lists every Onchain Agent wikipagespage (slug, title, keyword, summary, last_updated) ⟨8 unchanged words⟩
GetUSErecordedWHENchangesasked what has changed recently acrossthecrypto-agentdirectorytooling,—orthewhatauditablehasListinghappenedHistory.to one specific project over time, and you want dated attributable events rather than a current snapshot. Omit slug for the SITE-WIDE feed (what changed across all listings); pass slug for ONE resource'shistory.history — the auditable Listing History. Events: status flips, verification grants, Sato ⟨61 unchanged words⟩
SearchUSEREGISTEREDWHENonchainyouagentsneedina RUNNING agent to work with, hire or pay — not a tool to build one with — and want to see who registered it, on which chain, and whether it accepts payment. Searches the Sato Agent Registry— running: agents whose creators registered them for a Sato ⟨72 unchanged words⟩
USE WHEN someone is about to install an agent skill and should know what it will touch first — keys, credentials, remote scripts, outbound hosts. Crypto-relevant agent skills from ClawHub and skills.sh, each ⟨150 unchanged words⟩