Sato Hub: Onchain Agents
Server Details
Search scored onchain-agent tooling: frameworks, MCP servers, wallets, x402 rails, deploy specs.
- Status
- Healthy
- Uptime
- 100.0% over 41 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- satohubai/onchain-agents
- GitHub Stars
- 0
TDQS
Scored across 41 tools
Most tools are carefully scoped and the descriptions cross-reference each other ('not for X, call Y'), but several clusters genuinely overlap: build_plan vs scaffold_plan (an explicit compatibility shim), get_changes vs recent_changes (both report what changed), route_swap vs swap (venue picking vs venue picking + gate), and the four search_* tools plus get_resource/inspect_listing invite misselection. The preflight / check_install / scan_recipient trio is also separable only by reading the fine print about lanes. Descriptions rescue most cases, but boundaries are not self-evident from names.
39 of 41 tools follow a strict onchain_agent_<verb>_<noun> pattern (search_resources, get_deploy_spec, route_swap, list_chains), which is highly predictable. The only deviations are the two top-level entry points 'search' and 'fetch', which are unprefixed — a deliberate two-tier design but still an inconsistency. No camelCase/snake_case mixing or verb-style drift beyond that.
41 tools is well past the 25+ threshold and the surface shows real bloat rather than pure breadth: scaffold_plan is explicitly 'kept for compatibility' and generates nothing new, and 'search'/'fetch' duplicate onchain_agent_search_resources/get_* paths. The domain (directory, packages, agent registry, skills, numbers, routes, safety, writes) is legitimately large, but several tools could be merged or retired without losing coverage.
Coverage is unusually deep for the stated purpose: discovery (search/fetch/get/list vocabularies), provenance (explain_number, methodology, freshness), monitoring (watch, changes, listing history), build (recommend_stack through create_agent), routing (swap/launch/lp/agent) and safety lanes (preflight, scan_recipient, check_install) are all present with write paths for registration and submission. The only thin spots are lifecycle management of writes — no update/deregister/edit for listings, submissions or registrations — which agents can partly work around via the website claim flow.
Available Tools
42 toolsfetchFetch one Sato Hub recordRead-onlyIdempotentInspect
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 date. url is the canonical satohub.ai page to cite. An unknown id is an error, never a guess. Read-only.
Example: { id: "resource:coinbase-agentkit" }
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | An id returned by `search`: resource:<slug>, answer:<slug>, number:<slug> or wiki:<slug>. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | The canonical satohub.ai page to cite. |
| text | Yes | Plain text to quote: the facts, each with its date, and the source URL. |
| title | Yes | |
| metadata | Yes |
onchain_agent_build_planTurn a build goal into a full plan: stack, install steps, PreflightRead-onlyIdempotentInspect
USE WHEN someone describes the onchain agent they want and needs one answer that goes from goal to install steps rather than advice. Composes onchain_agent_recommend_stack, onchain_agent_get_deploy_spec and onchain_agent_preflight into one answer: the goal restated, a stack of REAL directory listings (each with its Sato Score, liveness, observed check record and sato_url), the deploy spec for every item that publishes one, a records-only preflight_summary on every item (plus the 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 (a swap route, or a prepared token-launch config), the questions the user still has to answer, and the next steps.
RULE ENFORCED: nothing in a plan is invented. Every component is a listing that exists; every number names the field it was read from; null is unknown and never zero. A Sato Score measures how open, active and verifiable a project is — it is not a security review, a quality judgment or a statement about returns. A Preflight unknown means Sato Hub holds no record, not that something is wrong.
OURS, LABELLED: on a trading or swap goal the plan also carries an execution block for Sato OS — Sato Hub's OWN self-hosted trading OS, which we sell. It always carries ours: true and says "built by Sato Hub". It is NOT a stack pick: it fills the execution layer (where the stack runs), it is never ranked against a directory listing, and no listing loses a position to it. On any other intent execution is null.
SKILLS: a plan also carries up to three crypto-relevant agent SKILLS matching the goal, each with the static disclosure of what its own text declares and does — hosts it names, keys it handles, credentials it asks for, remote scripts it pipes into a shell — and its own Preflight verdict under the S-rules. A skill is a document an agent follows, so this is the part a plan must not leave out. A DISCLOSURE DESCRIBES: it never says safe, and a scan that matched nothing is reported as matching nothing rather than as a pass.
NON-CUSTODIAL: this tool never holds keys, signs, deploys or moves funds. A swap first-action carries a quote taken at a NOMINAL size — never the caller's size, which is the caller's to choose — and a launch first-action carries a config to read and sign yourself, with the fee disclosed before anything is signed.
Returns (json): { goal, restatement, intent, chain, constraints, stack: [{ slot, slug, name, sato_url, trust_score, trust_tier, liveness_ok, install_verified, why, deploy_spec, preflight, preflight_summary, trust_spec }], trust_warnings, skills: [{ id, name, registry, findings, disclosure, preflight }], execution, gaps, first_action, open_questions, 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, swap, trading or x402 payments that names TypeScript/Node or no runtime: a TypeScript template built by Sato Hub, labelled ours, never a stack item. Read-only.
SAVE THIS STACK: save_stack_url opens the goal in the Sato Hub planner for the person you are building for. Or pass save: true and the plan is stored and save.share_url returned — a permanent read-only page whose signature is re-checked server-side, so a plan can be handed to someone else without re-running anything. The page is noindex unless public: true is passed too. That signature proves Sato Hub produced those bytes on that date; it is not 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 that swaps USDC to ETH on a signal", chain: "Base" }
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | What the user wants to build, in plain words, e.g. 'a Base trading agent that swaps USDC to ETH on a signal'. | |
| save | No | True stores the plan and returns `share_url`, a permanent read-only page at satohub.ai/plan/<id> with the plan's signature re-checked on it. The page is noindex unless `public` is also true — a goal is the caller's to publish, not ours. Nothing else about the plan changes. | |
| chain | No | Chain the agent runs on, e.g. 'Base'. When omitted it is read from the goal, and the plan says which. | |
| public | No | Only meaningful with `save`. True lets the shared page be indexed by search engines. Default false. | |
| budget_usd | No | Rough monthly budget in USD. Restated back in the plan; it does not filter the stack. | |
| constraints | No | Hard constraints to restate back, e.g. 'self-custody only', 'no API keys'. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_check_installCheck what an install can do with your keys and fundsRead-onlyIdempotentInspect
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 run with planted test keys). A stored profile answers first; an unstored target is read live within a bounded budget. Targets that could not be profiled are listed in unresolved with the reason. has_observed_key_egress is true only when a planted test key was seen leaving — the one fact to stop on.
RULE ENFORCED: a profile describes what was read and run, with dates. It is not a safety rating, an audit or an endorsement; "unknown" means we could not look, and "none found" is not "not there". Local signing is what a wallet does.
Returns (json): { schema: "sato.custody/v1", subjects: [{ subject, summary: { key_access, key_egress, fund_action_count, notable, version, as_of, check_url }, answers: { 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 viem @goat-sdk/core" } · { config: "{"mcpServers":{"wallet":{"command":"npx","args":["-y","some-wallet-mcp"]}}}" }
| Name | Required | Description | Default |
|---|---|---|---|
| config | No | An MCP config block as text, e.g. {"mcpServers": {...}}. | |
| command | No | An install command, e.g. "npm i @solana/web3.js viem" or "claude mcp add wallet -- npx -y some-wallet-mcp". |
onchain_agent_compare_listingsCompare two listings on the same axesRead-onlyIdempotentInspect
ANSWERS ONE QUESTION: how do these two directory listings compare on the axes Sato Hub tracks for both? Returns the SAME derived table the /compare pages render — category, chains, interfaces, standards, open-source status, listing status, last activity, last release, install proof, verification, Sato Score, GitHub stars — every cell read off the live records, never typed.
RULE ENFORCED: there is NO winner field and none can be derived from the table; caveat is mandatory and names what the data cannot settle (for a curated pair, the comparison page's own caveat). The Sato Score is openness/activity/verifiability, not a safety, quality or returns grade.
Returns (json): { a: { slug, name, liveness, observed_success_pct, sato_url }, b: {...}, rows: [{ label, a, b, note? }], caveat, rules, comparison_page, source }. Read-only.
Example: { a: "coinbase-agentkit", b: "solana-agent-kit" }
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | First directory slug, e.g. 'coinbase-agentkit'. | |
| b | Yes | Second directory slug, e.g. 'solana-agent-kit'. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_create_agentCreate a runnable agent repo from a checked templateRead-onlyIdempotentInspect
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 — 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, ai-sdk, claude-agent-sdk, openai-agents, plain-ts); persona-agent (general, payments: claude-agent-sdk); research-report (data, research: plain-ts); solana-guarded-swapper (trading, swap: plain-ts); token-launch-prep (launch: plain-ts); treasury-monitor (data, treasury: plain-ts); x402-seller (payments: plain-ts). Any other intent × framework pair answers no_template.
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). It generates for a local fork by default and testnet on request; mainnet is refused unless network is "mainnet" and mainnet_risk_accepted is true, and a template that does not run on the network says so.
RULE ENFORCED: the goal is not stored or logged. A refusal names its error code and, where one applies, the rule. last_green is the day the template last passed its nightly checks, or null — never invented. Nothing is audited, and nothing here signs, holds keys or moves funds.
Returns (json): { schema: "sato.create.response/v1", ok: true, template: { id, version, digest, framework }, files: [{ path, encoding, content }], zip_base64?, env_names, next_commands, manifest, last_green, status_url, cli } or { ok: false, error, message, rule?, nearest?, blocked? }. Writes nothing.
Example: { goal: "swap USDC to ETH on Base with a per-trade cap", framework: "plain-ts" }
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | What the agent should do, in plain words, e.g. 'swap USDC to ETH on Base with a per-trade cap'. Not stored. | |
| chain | No | Chain the agent runs on. | |
| format | No | files (default) or zip (adds zip_base64). | |
| network | No | Where it may sign. Default fork. mainnet needs mainnet_risk_accepted: true. | |
| template | No | Pin a template id. | |
| framework | No | Agent framework. Templates exist for agentkit, ai-sdk, claude-agent-sdk, openai-agents, plain-ts; any other answers no_template with the nearest. | |
| mainnet_risk_accepted | No | Explicit acceptance of mainnet risk. Only read when network is mainnet. |
onchain_agent_explain_numberWhere does this number come from?Read-onlyIdempotentInspect
ANSWERS ONE QUESTION: where does a published Sato Hub number come from? For any https://satohub.ai/numbers/ 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 report by slug — the figure with its stage, method, sample, as-of date, the SQL query that reproduces it, and its citable page at https://satohub.ai/numbers/.
RULE ENFORCED: a number never travels without its stage, method, sample and date; it is never summed across venues, chains or stages. CITE THE URL in the payload, not this response. Returns an error while the report is unpublished.
Returns (json): { slug, title, number, unit, stage, method, sample, lines, query, as_of, url, cite, rules }. Read-only.
Example: { slug: "erc-8004-agents-registered-on-base" }
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The finding's slug — the last path segment of a satohub.ai/numbers/<slug> URL. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_find_x402_serviceFind a paid x402 service for a need, ranked by observed evidenceRead-onlyIdempotentInspect
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 payout address on Base in the last seven days from several outside payers, not machine noise (counted when the transaction carries a signed USDC authorization, EIP-3009, the settlement x402's exact scheme uses; some non-x402 gasless sends use it too); (2) the listed URL answered HTTP 402 with a payment payload when we asked; (3) everything else, unknown before no. All USDC received at a payout address is context only and never ranks. Ties go to the lower per-call price. Each hit carries both readings with their dates and method, and links to the one canonical page for its payout address. unknown means we hold no reading, never that the service failed. A price is what the seller registered, not a charge we observed; price_usd appears only where the asset is USDC on Base or Solana. A hit is a description of what was observed, not an endorsement, and nothing here pays for or calls a service.
NO HIT IS INVENTED: when nothing matches, the answer says so and names how to broaden (fewer words, drop a filter, another category).
Returns (json): { hits: [{ url, network, chain, description, category, price_usd, merchant: { slug, display_host, pay_to, answers_402, payments, claimed_at, is_ours }, sato_url }], matched, capped, match_mode, evidence_as_of, ranking, guidance, unavailable }. merchant.payments carries the x402-style reading (the x402_* fields, which rank) and, as context only, the all-USDC reading. sato_url is the canonical page for the payout address. Read-only.
Example: { need: "token prices", chain: "Base", max_price_usd: 0.01 }
| Name | Required | Description | Default |
|---|---|---|---|
| need | Yes | What the service should do, in plain words, e.g. 'token prices for ETH' or 'scrape a web page to text'. Matched against the listing text, host and URL. | |
| chain | No | Narrow to a chain by name, e.g. Base or Solana. | |
| limit | No | Hits to return (1-20, default 10). | |
| category | No | Narrow to one category: market-data, onchain-data, web-data, search, inference, media, security, identity, dev-tools, commerce, agents, other. | |
| max_price_usd | No | Per-call price ceiling in USD. Listings with no decodable per-call price are left out when this is set. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_agent_economyMeasure the onchain agent economyRead-onlyIdempotentInspect
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 a figure from a deck or an announcement. Covers the agent venues Sato Hub tracks: registries, launchpads, payment rails and account infrastructure, measured weekly from public chain reads.
Returns (json): { week, as_of, rules, evidence_tiers, venues: [{ id, name, unit, entry_cost, measurable, overlaps_with, headline_safe, contracts:[...], chains:[{ chain, stages:[{ stage, value, unit, method, evidence_tier, sample_size, denominator, covered_days, publishable, caveat }] }], platforms:[...] }] }.
HOW TO USE THESE NUMBERS. Never add them together: an ERC-8004 registration, an Olas staked service, a Virtuals launch and a Mech task are four different objects, and each venue's unit says which. Every number names its stage — "19,180 launched, 1,233 graduated" is true, "58,400 agents" is not. A null value means UNKNOWN, never zero. A rate whose sample_size is below 20 is returned with publishable: false and should not be quoted. Solana identity registries are covered as UPPER BOUNDS (program-account counts, the unit says so); Solana payment settlement is not covered by any row, and by transaction count x402 mostly settles there.
Read-only. Cite https://satohub.ai/agent-economy.
Examples:
"how many agents are actually registered onchain" -> {}
"what is happening on Base" -> { chain: "Base" }
"who is producing ERC-8004 registrations" -> { venue: "erc8004", include_platforms: true }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Restrict to one chain, e.g. Base, BNB Chain, Gnosis. Venue-level rows have no chain. | |
| venue | No | Restrict to one venue: erc8004, olas, virtuals, x402, erc4337_accounts, key_management, singularitynet, morpheus. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
| include_platforms | No | Include the per-platform breakdown of who produced the registrations (agentURI attribution). Default false — it roughly doubles the response. |
onchain_agent_get_agent_passportLook up one registered agentRead-onlyIdempotentInspect
USE 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) for one REGISTERED agent by slug: identity (sato_agent_id), agent types, chains, model/framework, the stack of Sato Hub directory resources it runs on, links, 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 if the slug 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 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.)
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The registered agent's slug — <slug from onchain_agent_search_agents>. Call onchain_agent_search_agents first; the registry is small and slugs are not guessable. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_changesSync a copy of the directoryRead-onlyIdempotentInspect
USE WHEN you keep a local copy of the directory and need only what moved since your last sync, rather than re-fetching the whole catalog. Returns what changed since a given date — additions, per-resource change events, and retirements.
Returns (json): { since, until, window_days, counts:{added,changed,removed}, added:[...], changed:[{slug,name,url,events:[...]}], removed:[...], coverage:{...}, full_export }.
COVERAGE (also stated in the response): added is exact. updated is a field-level diff of every catalog field between the snapshot on baseline_date and the live record — complete at daily resolution, so a quiet copy edit IS caught; store baseline_date as your cursor. changed is the richer event log (score moves, releases, verification) and explains WHY. removed is approximate. Mirror from added + updated + removed. Read-only.
Examples:
"what's new this week" -> { since: "2026-08-23" }
"sync my copy" -> { since: }
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Return everything that changed since this ISO date. Defaults to 14 days ago. Clamped to the 90-day supported window. |
onchain_agent_get_data_freshnessHow fresh is the data behind each answerRead-onlyIdempotentInspect
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 it was read from.
RULE ENFORCED: late = now − last success > 1.5 × the expected cadence (daily 36h, weekly 252h). A surface built from several pipeline steps is as fresh as its stalest step, and one of its steps never succeeding makes it late. A surface with no recorded success at all returns last_success_at: null and late: null — unknown, never an invented date. If the ledger cannot be read, every surface is unknown, never "fresh". A late surface still serves its last good data: quote it WITH its date.
Returns (json): { generated_at, ledger, rule, surfaces: [{ surface, what, expected_every, last_success_at, last_attempt_at, last_status, late, state, age_hours, late_after_hours, next_update, source, steps: [{ step, last_success_at, last_attempt_at, last_status }], served_by }], note, source_url, sato_url }. Timestamps and statuses of data jobs only — no usage figures. Read-only.
Example: { surface: "sato_score" }
| Name | Required | Description | Default |
|---|---|---|---|
| surface | No | One data surface to check. Omit for all of them. Surfaces: directory_activity, news, erc8004_count, agent_tokens, liveness, sato_score, snapshots, x402_bazaar, x402_answers_daily, erc8004_endpoints_daily, 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, skills, deploy_verification, custody_observed, dead_project_sweep. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_deploy_specGet install steps for a stack pick, with its Preflight attachedRead-onlyIdempotentInspect
Call once per pick after onchain_agent_recommend_stack. USE WHEN a component has been picked (from onchain_agent_recommend_stack, onchain_agent_build_plan or a search) and the next step is installing it, or you are about to write setup instructions and want steps checked against a clean install rather than copied from a README. Returns the deploy manifest for one resource by slug — runtime, install command(s), entry snippet, required keys/env/wallet/RPC, chains, license, whether it is 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 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: preflight_summary is the Preflight verdict from Sato Hub's records (no live handshake), its rule and the readings it turned on; full_check is the onchain_agent_preflight call for 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 guarantee: "verified" = the documented install was reproduced in a clean container; "self_reported" = parsed from the project's README, not reproduced. Verify keys, permissions and funds before running anything.
Returns (json): { slug, name, github_url, docs_url, sato_url, deploy_spec, preflight_summary, trust_spec, trust_warnings?, save_stack_url, next_step, note }. save_stack_url is this listing's page with the same install steps, and next_step names the Preflight call to run before installing — surface both to the person you are building for. A resource with no manifest yet returns an error with installable alternatives. Read-only.
Example: { slug: "solana-agent-kit" }
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The resource slug to get a deploy manifest for, e.g. 'solana-agent-kit'. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_listing_historyHas this tool been answering?Read-onlyIdempotentInspect
ANSWERS ONE QUESTION: has this listing been answering Sato Hub's daily checks, and has its tool inventory moved? Returns a bounded 30-day shape from the listing's observed record — days observed, share of OUR checks that succeeded, current state and streak — plus the MCP tool-inventory changes in the window (date, count after the change, added, removed) and the current Sato Score.
RULE ENFORCED: success_rate_pct is the share of Sato Hub's own checks that succeeded, never "uptime" — a failure can be on our side. At most 30 entries; the daily rows are not returned (rule 24: shape, not rows). Absence of a record is unknown, not down.
Pass score_days to add score_series: the daily Sato Score readings we captured for this listing, up to 90 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//history page). A day nobody measured is ABSENT from the array rather than carried forward — a gap is a gap — and every move is labelled project or methodology, the latter meaning Sato Hub revised the scoring rubric that day and the movement is ours.
Returns (json): { slug, days, observed: { days_observed, window_days, success_rate_pct, rate_days, rate_window_start, current_state, current_streak_days, last_check }, tool_history: [{ date, count, added, removed }], tools_now, tools_peak, trust_score, trust_tier, score_series, score_series_window, rules, sato_url }. Read-only.
Example: { slug: "jupiter-mcp", days: 30, score_days: 90 }
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days (1-30, default 30) for the observed record and the tool inventory. | |
| slug | Yes | The resource slug, e.g. 'coinbase-agentkit'. | |
| score_days | No | Include the daily Sato Score series over this many days (2-365; up to 90 days are served without a key, a longer request is answered with 90 and says so in score_series_window). A day nobody measured is absent from the series, never carried forward. Omit for no series. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_metricsLive ecosystem numbers, read from chainRead-onlyIdempotentInspect
USE WHEN you need a current, citable figure for the onchain agent ecosystem rather than a number from an article of unknown age. The ERC-8004 Identity Registry registered-agent count (read directly from Ethereum mainnet) and the curated Top Project Tokens index (only tokens of directory-listed projects — never the whole agent-token category or its aggregate market cap).
Returns (json): { erc8004: { network, registered_agents, live, checked_at, other_chains: { tool, args, note } }, top_agent_tokens: [{ symbol, name, current_price, market_cap, price_change_percentage_24h, resource_slug }] }. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| token_limit | No | How many top project tokens to include (1-25, default 12). | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_newsRecent crypto-agent releases and newsRead-onlyIdempotentInspect
USE WHEN asked what is new or what shipped recently in crypto AI agents, and you want dated, source-attributed items rather than undated blog posts. Official releases (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.
Returns (json): { total, count, offset, has_more, next_offset?, news: [{ kind, title, summary, url, source, author_handle, chains, resource_slug, published_at }] }. Read-only.
Example: { kind: "release", limit: 10 }
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter by item kind: release, tweet, news, or research. | |
| chain | No | Filter to items tagged with this chain. | |
| limit | No | Max results to return (1-50, default 20). | |
| offset | No | Results to skip, for pagination (default 0). | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_resourceCheck one project in detailRead-onlyIdempotentInspect
USE WHEN you need to judge one specific project — is it open source, still maintained, who is behind it, what does it support. Returns the full record by slug, optionally with its recent releases and posts. Find the slug with onchain_agent_search_resources first.
Returns (json): { resource: {...full record incl. marketplace + liveness fields}, recent_activity: [...] }. Returns an error if the slug is unknown or the resource is Deprecated. Read-only.
Example: { slug: "coinbase-agentkit" }
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The resource slug, e.g. 'coinbase-agentkit'. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
| include_activity | No | Include the resource's recent activity feed (releases/posts). |
onchain_agent_get_score_methodologyHow the Sato Score worksRead-onlyIdempotentInspect
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, quality, legitimacy or returns grade, and this tool says so in the payload. Self-reported claims earn nothing in it. CITE https://satohub.ai/sato-score when you explain it.
Returns (json): { name, scale, components: [{ key, label, max, measures }], tiers, provisional, not_in_score, computed, reproduce, dispute, caveat, url }. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_trendIs this going up or down?Read-onlyIdempotentInspect
ANSWERS ONE QUESTION: is this measurement going up or down? Returns a bounded series (at most 30 points, default 8) for ONE venue, ONE chain and ONE stage from Sato Hub's own weekly (or daily) chain reads — each point 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.
RULE ENFORCED: points are never summed across venues, chains or stages — the tool refuses to blend chains and tells you which chains exist when you omit one, and several venues are never combined. A null point is UNKNOWN for that period, never zero. The weekly point is the citable one; daily points feed a trend and never a headline. Raw rows are not returned.
Returns (json): { venue, chain, stage, grain, unit, points: [{ date, value, sample_size, method, evidence_tier }], direction_first_to_last, known_points, rules, as_of, source } — or, when a stage several venues report is asked without a venue, { stage, grain, series: [that same object per venue], needs_chain?, no_reading?, rules }. Read-only.
Examples:
"are ERC-8004 registrations on Base growing" -> { venue: "erc8004", chain: "Base", stage: "registered" }
"how is registered trending on Base" (no venue) -> { stage: "registered", chain: "Base" }
"x402 sellers week over week" -> { venue: "x402", chain: "Base", stage: "settled_to_catalogued_seller", points: 12 }
"do registered endpoints answer, day by day" -> { venue: "erc8004", chain: "Base", stage: "mcp_endpoint_answers", grain: "daily", points: 30 }
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 'stage' (default) is one venue/chain/stage series. 'movers' is the week's Sato Score movement across the directory — which listings rose, fell, crossed a tier, were scored for the first time, or answered our daily checks differently. In movers mode venue, chain and stage are ignored. | stage |
| chain | No | Chain, e.g. Base, Ethereum, Gnosis. Required when a venue's stage is measured on more than one chain — series are never blended across chains. Omit for venue-level rows. | |
| grain | No | 'weekly' (the citable series, default) or 'daily' (the trend grain; never a headline). | weekly |
| stage | No | Lifecycle stage. REQUIRED in 'stage' mode. By venue: erc8004 = registered, registered_new_1d (daily), active_7d, mcp_endpoint_answers; olas = registered, working; virtuals = launched; virtuals_acp = jobs_created; x402 = settled_to_catalogued_seller, answers_402, facilitator_txs_1d_known (daily). | |
| venue | No | Venue id: 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. | |
| points | No | How many most-recent points (1-30, default 8). | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_get_wiki_pageExplain a crypto-agent conceptRead-onlyIdempotentInspect
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. Returns a full wiki page by slug (summary, why it matters, how it works, key components, examples, risks, 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" or the bare "erc-8004" for "what-is-erc-8004") serves that page and says which one in alias_of; when the slug is also a directory listing, also_listing names onchain_agent_get_resource.
Returns (json): the full page object. Returns an error if the slug is 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" }
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The wiki page slug, e.g. 'what-are-mcps'. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_inspect_listingInspect one published agent packageRead-onlyIdempotentInspect
USE WHEN you have a PACKAGE slug (from onchain_agent_search_listings) 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), and superseded_by (the template that replaces the package, or null).
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 id or project id. "integrity: stale_evidence" means the stored artifact no longer matches 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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_list_categoriesSee how the directory is organisedRead-onlyIdempotentInspect
USE WHEN you need the valid category values before filtering onchain_agent_search_resources, or want to see how the crypto-agent landscape divides up by size. Lists every resource category with counts, most populated first. Returns (json): { total, categories: [{ name, count }] }. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_list_chainsSee which chains are coveredRead-onlyIdempotentInspect
USE WHEN you 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, spotlight chains first (Base, Ethereum, Solana, COTI, Injective…). Returns (json): { total, chains: [{ name, count }] }. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_list_wiki_pagesSee what concepts are explainedRead-onlyIdempotentInspect
USE WHEN 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 wiki page (slug, title, keyword, summary, last_updated). Returns (json): { total, pages: [...] }. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_preflightCheck a target before you install, connect, pay or tradeRead-onlyIdempotentInspect
USE WHEN you are about to install a package, clone a repo, connect to an MCP endpoint, pay an agent, or trade a token, and you want to know what is on record about it 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, agent, token, skill, x402 or address.
Returns a verdict — go | caution | no | unknown — with one evidence line per check, each naming the field it was read from and when that field was written. The rules are written down in lib/preflight.ts and cited by id in rule.
RULE ENFORCED: a verdict names WHAT WAS CHECKED AND WHEN. It is never a security review, a quality judgment or a statement about returns, and unknown means Sato Hub holds no record — not that something is wrong. An unlisted endpoint gets ONE live handshake (initialize + tools/list, 8 s cap) and can never come back go: a handshake is not a record. For agent=: we confirm the ERC-8004 registration exists, fetch its registration file, and report the services it DECLARES; only a declared MCP service is probed.
TOKEN LANE (token + chain; the EVM chains listed, and Solana): keyless chain reads — 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 (chain Solana, token = the mint): the mint's own account is read — token program (SPL or Token-2022), decimals, supply, mint and freeze authority (a revoked authority is a known fact, distinct from an unread one), the Token-2022 extensions (PermanentDelegate, TransferHook, transfer fee with 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, the bonding-curve reserves and completion flag. A PermanentDelegate, a TransferHook or a transfer fee is a caution with the plain reason; a NonTransferable mint is a no; there is no go for Solana. Each line carries its date. PERMANENTLY NULL on EVM, and said so in the evidence: holder concentration (no keyless public source — explorers are not scraped); Uniswap v4 / non-Uniswap liquidity is checked once, with DexScreener, only when the v3 lookup and the launch-venue match are both empty (a v4 poolId cannot be reconstructed without the PoolKey). The deployer address needs an optional explorer key. A pool existing is not depth; a locker holds a position on the terms its own code enforces. 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 is exactly why it is worth checking first — the ClawSwarm skills needed no malware, only text telling the agent to generate a wallet and post the private key. Evidence is the static disclosure the weekly sweep already produced: hosts the text names, whether it generates or handles keys, whether it asks for a credential, whether it pipes a remote script into a shell, what tools it grants itself — each finding WITH the lines that produced it — plus installs, when it was last seen in its registry, and whether a host it names belongs to a listed project. Nothing is fetched from a registry and no skill is executed. A DISCLOSURE DESCRIBES: it never says safe, it never says malicious, an empty flag list is "nothing matched" rather than a pass, and the registry's own scan result is attributed to that registry by name.
Returns (json): { verdict, rule, target: { kind, value, slug, name, sato_url, verify_url }, evidence: [{ check, result, source_field, checked_at }], checked_at, caveat, rules, token?, skill?, solana_receipt? }. token and skill are the raw reports for those 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 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.
ADDRESS LANE (address + chain, optional origin and from): the Sato Scan recipient check before a payment. Five questions, each with its date and its own gap — does the address only look like one the payer pays, is the token the issuer's contract, did the paid party declare the address, does the address carry a structural mark, is the paying wallet targeted by address poisoning. Rules 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 are not stored. For the reading on its own, call onchain_agent_scan_recipient.
Example: { repo: "coinbase/agentkit" } · { endpoint: "https://mcp.example.com/v1" } · { x402: "https://api.example.com/paid" } · { agent: "base:42" } · { token: "0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb", chain: "Base" } · { skill: "clawhub/solana-wallet" } · { address: "0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb", chain: "Base" }
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | 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. | |
| repo | No | A GitHub repository: a URL or bare owner/name, e.g. 'coinbase/agentkit'. | |
| x402 | No | 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. | |
| agent | No | An ERC-8004 agent reference, <chain>:<id>, e.g. 'base:42'. Chains: Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche, Gnosis, Robinhood Chain, Celo. | |
| chain | No | Chain for `token`: Base, Ethereum, Arbitrum, Robinhood Chain, Solana. Anything else 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. | |
| skill | No | An agent skill: '<registry>/<id>' (registries: clawhub, skillssh, skills.sh, skills-sh, github), or the skill id alone when it is unique. Reads the static disclosure already on record — nothing is fetched from a registry and no skill is ever executed. | |
| token | No | An ERC-20 token contract address, e.g. '0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb', or with chain Solana a mint (base58). Needs `chain`. | |
| origin | No | 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. | |
| address | No | 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. | |
| package | No | An npm or PyPI package name, e.g. 'solana-agent-kit'. A trailing @version is ignored. | |
| endpoint | No | An https MCP endpoint URL. If it is not in the directory it gets a live initialize + tools/list handshake, capped at 8 seconds. | |
| x402_method | No | 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. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_recent_changesWhat changed in the ecosystemRead-onlyIdempotentInspect
USE WHEN asked what has changed recently across crypto-agent tooling, or what has happened 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's history — the auditable Listing History. Events: status flips, verification grants, Sato Score tier moves, liveness (a project going dormant or active again), new releases, and field enrichment. Derived from the daily snapshot time-series + the change-event log; high-signal only (passive score/liveness drift is suppressed).
Returns (json): { scope, total, changes: [{ date, kind, slug, name, title, detail?, tone }] }. tone is positive | negative | neutral. Read-only.
Example: { days: 7 } · { slug: "coinbase-agentkit" }
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days (1-90, default 14). | |
| slug | No | Limit to one resource's recorded history by slug. Omit for the site-wide feed across all listings. | |
| limit | No | Max changes to return (1-50, default 20). | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_recommend_stackBuild any crypto agent: goal in, stack and install steps outRead-onlyIdempotentInspect
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 build an onchain or crypto agent and says what it should do — "a trading agent on Base", "an ElizaOS agent that charges via x402", "a TypeScript agent with a policy-controlled wallet". This is the first call for a build goal: goal → stack here, then onchain_agent_get_deploy_spec once per pick → install steps. Returns real directory listings in slots (framework, wallet, payments, trading, data, MCP tooling, security; live agents someone else runs are kept out of trading), each pick with its Sato Score, liveness, deploy-spec status, github_url and a records-only preflight_summary (verdict, rule, the readings it turned on), plus honest gaps. A standard (x402, ERC-8004, A2A, MCP), runtime (TypeScript/Node, Python) or wallet control (policy, spending limit, session keys, permissions) the goal names lifts the picks whose own record names it — 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 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 carries starter, a TypeScript template repo built by Sato Hub (holds no key, signs nothing, not audited; runtime_basis says whether the goal named the runtime) — never a pick.
KEYS AND MONEY COME WITH IT: every pick carries trust_spec — what it does with your keys and money, from Sato Check, dated: whether it takes your key, whether a planted test key was observed leaving, whether it can move funds on its own, the version read, the Preflight verdict, and what the reading does not cover. It is decided by the pick (category, payment standard, wallet material in its setup), not by the goal's words, and needs no extra call. Show each pick's trust_spec.line to the person you are building for; 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. For a newer reading, trust_spec.fresh_check.check_install is the onchain_agent_check_install call and preflight_summary.full_check the onchain_agent_preflight call that returns every evidence line — run them before anything is installed, connected, paid or traded. Ranking reflects openness/activity/verifiability — never a safety, quality, or returns judgment; a Preflight unknown means no record, not a problem. Read-only.
Example: { goal: "trading agent on Base with x402 payments", chain: "Base" }
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | What the agent should do, in plain words — e.g. 'trading agent on Base with x402 payments' | |
| chain | No | Preferred chain (e.g. Base, Solana) | |
| max_per_slot | No | Max picks per stack slot (default 3) | |
| verified_only | No | True = only picks whose documented install was reproduced in a container by Sato Hub. Slots with no verified pick are reported in `gaps` rather than widened. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_register_agentRegister an Agent Passport (self-issue with a wallet signature)Inspect
USE WHEN an agent wants a public, machine-readable identity: an Agent Passport at satohub.ai/agents/ plus a manifest at /api/agents//manifest that another agent can read before deciding to work with it.
TWO STEPS. Call it with name and wallet_address and no signature, and it returns the exact challenge to sign (EIP-191 personal_sign) and the signed_at that goes with it — the same string GET /api/agents/challenge returns, deterministic, valid 15 minutes. Call it again with wallet_signature and signed_at plus the registration fields, and the passport issues immediately.
WITHOUT A SIGNATURE the registration is accepted and lands PENDING for human review; contact_email is required on that path. Signature verification is EVM-only for now — a Solana wallet can register, unsigned.
WHAT THE SIGNATURE PROVES: control of the key. Nothing else. verification_status is Self-Reported on every passport issued here and no input can change it. Declared standards, endpoints and stack are claims; the endpoint gets one live probe and the wallet one on-chain lookup, and both are reported as what was observed, not as approval.
LIMIT: 5 write calls an hour per caller. The challenge step counts, so fetch it once and sign it.
Returns (json): unsigned first call { challenge, signed_at, expires_in_seconds, next }; registration { ok, slug, sato_agent_id, status, wallet_verified, passport_url, manifest_url, note }.
Example: { name: "Example Agent", wallet_address: "0x…" } then the same plus { description, agent_type: ["Trading"], chains_supported: ["Base"], wallet_signature: "0x…", signed_at: "…" }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The agent's name. Bound into the signed challenge — changing it invalidates a signature. | |
| stack | No | Directory slugs the agent is built from. Unknown slugs are an error, not silently dropped — the join is the point. | |
| repo_url | No | The agent's source repository, if public. | |
| signed_at | No | The `signed_at` value returned with the challenge. Valid for 15 minutes. | |
| standards | No | Standards the agent DECLARES support for. Declared, never verified. | |
| agent_type | No | What kind of work it does. At least one is required to register. | |
| description | No | What the agent does (20-1000 chars). Required to register; omit it only on the challenge step. | |
| website_url | No | The agent's public page. | |
| endpoint_url | No | An MCP or A2A endpoint the agent serves. Probed once on registration; a declaration is not a working service. | |
| contact_email | No | Required when registering without a signature — an unsigned registration goes to a human, who may need to ask something. | |
| wallet_address | No | The AGENT's own wallet: EVM (0x…) or a Solana-style base58 address. Required for the signature path — signature verification is EVM-only for now. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
| chains_supported | No | Chains it operates on, by display name. At least one is required to register. | |
| wallet_signature | No | An EIP-191 personal_sign signature over the exact challenge this tool returns when called without one. Present: the passport issues immediately. |
onchain_agent_resolve_tokenResolve an address, a mint or a link to the token it isRead-onlyIdempotentInspect
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; a DexScreener or GeckoTerminal pool link is resolved through their public API to the pool's BASE token (not the quote token). A link on another chain or another site, a profile page, or a bare symbol is refused with the reason — nothing is guessed.
OUTPUT: every figure has an entry in sources naming where it was read and when; every null has an entry in gaps saying why (null is unknown, never zero). Decimals and the token program come from the chain when it answers. On Solana the mint's mint authority, freeze authority and Token-2022 extensions are read from the chain ({ set: false } is a revoked authority). Price and liquidity are ONE pool's listing from DexScreener (GeckoTerminal as a fallback) at the time given — never summed across pools or venues, not a quote, not a fill. Answers are held for 60 seconds per token. The price is one pool's listing, used here to identify the token; this is not a price source and not a quote.
RULE ENFORCED: this describes and recommends nothing, and says nothing about whether a token is safe. It is the step BEFORE evidence: run onchain_agent_preflight on the same token for what the chain says about its authorities, extensions and liquidity, and re-read decimals and the token program on-chain before signing anything.
Returns (json): { chain, chain_assumed (true only when a bare 0x address named no chain and Base was assumed), address, name, symbol, decimals, program: "erc20" | "spl" | "token-2022" | null, price_usd, liquidity_usd, main_pool: { venue, labels, address, quote_token: { address, symbol } } | null, mint_authority?, freeze_authority?, token2022_extensions? (Solana), sources: [{ field, source, as_of }], gaps: [{ field, reason }], resolved_from: { via, pool? }, checked_at, caveat, meta: { signature } }. Nothing at the address returns { resolved: false, code: "not_found", error }.
Example: { input: "https://dexscreener.com/base/0xc9034c3e7f58003e6ae0c8438e7c8f4598d5acaa" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Optional. Must agree with the input; it only supplies a chain the input leaves open (a Uniswap link with no chain). | |
| input | Yes | What to resolve: a contract address on Base (0x…), a Solana mint (base58), 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. A DexScreener or GeckoTerminal POOL link resolves to the pool's base token. A bare symbol is refused, never guessed. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_route_agentChoose an agent for a task, with the pick explainedRead-onlyIdempotentInspect
USE WHEN an agent needs another agent for a task and wants the pick explained by registration, answering service, feedback and liveness. Candidates are the listed Sato Agent Passports; the top 3 by the static ranking get one live MCP handshake before the pick is made.
RULE ENFORCED: a route is a RECOMMENDATION, chosen by the listed fields at checked_at. chosen_by names every signal, its value and the exact field it was read from. An ERC-8004 registration proves a claim was made on-chain, not that the agent works; wallet_verified proves the key, not the product; a probe proves the declared service answered once. A null feedback count is unknown and ranks below every number, including zero. No job-outcome data exists yet.
COVERAGE: agents registered on-chain but holding no Sato passport are absent from the pool — there is no keyless ERC-8004 enumeration callable from a request. Absent means unseen, not unqualified. When nothing qualifies the answer is unknown with a reason, never a low-confidence pick.
Returns (json): { route: { agent, chosen_by: [{ signal, value, source_field }], checked_at, alternatives: [{ id, name, source, behind_on }], caveat } | { unknown, reason }, preflight, candidates_considered, probed, coverage, rules, caveat, checked_at }.
Example: { capability: "trading", chain: "Base", requires_mcp: true }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Chain the agent must claim, e.g. 'Base'. Filters the passport pool; it does not pull ERC-8004 registry rows (none are enumerable keyless). | |
| capability | No | What the work needs, in a word or two, e.g. 'trading', 'research', 'payments'. Matched against the candidate's name, declared agent types and declared services. | |
| requires_mcp | No | Only candidates that DECLARE an MCP service. A declaration is not a working service — the top candidates get one live handshake. | |
| requires_x402 | No | Only candidates that DECLARE x402 payment support. Declared, never settled or observed. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_route_launchChoose a launch venue, with the fee disclosed and a config preparedRead-onlyIdempotentInspect
USE WHEN an agent or a builder is about to launch a token and wants the venue chosen on published facts, with the fee disclosed before anything is signed. Venues covered: Clanker v4, Bankr, Virtuals, Zora creator coins.
RULE ENFORCED: a launch route is a RECOMMENDATION. chosen_by names every fact it was chosen on, each with the venue page it was read from and the date it was read (facts_as_of). A fee schedule says nothing about what a token will do after it launches, and nothing here is a security review or an audit. null is unknown and never zero — a venue that publishes no per-party fee split is unread, not generous.
NON-CUSTODIAL: this tool NEVER deploys, signs, holds keys or moves funds. For the Clanker lane it returns a PREPARED CONFIG in the documented clanker-sdk v4 deploy() shape (the SDK is deliberately not a dependency of this service) which the caller reads and signs itself. Other venues are recommend-only: named, with a stated reason why no config is emitted.
THE FEE: Sato's slice is one entry in the venue's own reward-recipient list — the deployer takes 10000 - bps, Sato takes bps, and the two always total 10000. It is disclosed in fee on EVERY response, including when it is 0, and at 0 no Sato recipient appears in the config at all. A launch that is never signed pays nothing.
Returns (json): { route_id, goal, chain, venue: { slug, name, lane, pool_fee_pct, creator_share_pct, programmable_fee_split, facts: [{ fact, source_url, as_of }], unconfirmed, docs_url }, reason, chosen_by: [{ signal, value, source_field }], checked_at, alternatives: [{ slug, name, behind_on }], fee: { bps, recipient, basis, disclosed }, prepared_deploy, prepared_deploy_unavailable, facts_as_of, caveat, rules }. When no venue documents the chain: { unavailable, tried, supported_chains, supported_goals, checked_at, caveat }.
Example: { chain: "Base", goal: "agent_token", name: "Example Agent", symbol: "EXMPL", deployer: "0x…" }
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | What is being launched. Matched against what each venue's own documentation covers. | |
| name | No | Token name. Required for a prepared deploy config; the caller's to choose, never invented here. | |
| chain | Yes | Chain display name as the directory writes it, e.g. 'Base', 'Arbitrum'. | |
| symbol | No | Token symbol. Required for a prepared deploy config. | |
| deployer | No | The 0x address that will sign the deploy and hold the creator reward share. Without it no config is prepared — it cannot be inferred. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
| max_pool_fee_pct | No | Reject venues whose PUBLISHED pool fee exceeds this percentage. A venue that publishes no fee is not excluded — unknown is not disqualifying. | |
| require_programmable_fee_split | No | Only venues documenting a programmable third-party recipient split. |
onchain_agent_route_lpCompare the Uniswap pools for a pair, with the evidence and the gap namedRead-onlyIdempotentInspect
USE WHEN an agent is deciding which Uniswap pool and fee tier to provide liquidity to for a pair Sato Route already quotes, and wants the observed readings rather than an opinion. Returns every v3 pool the weekly LP lane found across the four standard fee tiers, each with its in-range liquidity, the swaps and volume actually counted, the window that count covered, and a fee-revenue proxy.
RULE ENFORCED: a route is a RECOMMENDATION. chosen_by names every field the pick was made on and where each was read. THE LARGEST TERM IS MISSING ON PURPOSE: impermanent loss is not modelled, not approximated and not bounded, and it appears in chosen_by as an explicit null rather than being quietly omitted. A fee-revenue figure here is a PROXY — the pool's published fee rate multiplied by volume we counted, in token0's own units — and is never called revenue, an APR or a yield. Readings are never scaled up from the window covered to a full week.
THE PICK: highest observed fee-revenue proxy per day per unit of in-range liquidity, among pools whose window could be read. When nothing is rankable the answer is chosen: null with a reason per pool, never a low-confidence pick.
COVERAGE: Uniswap v3 on Base and Ethereum, for the pairs the router quotes. Uniswap v4 rows come back null WITH THEIR REASON — v4 is a singleton PoolManager and publishes no per-pair pool id — and null is unknown, never zero. Every non-Uniswap venue is outside the reading entirely.
NON-CUSTODIAL: this tool never signs, holds, moves or provides liquidity, and nothing it returns is advice.
Returns (json): { chain, pair, week, pools: [{ venue, pool, fee_tier_ppm, fee_tier_pct, liquidity, swaps_observed, volume_token0_observed, fee_revenue_proxy, fee_revenue_proxy_per_day, proxy_per_day_per_liquidity, token0, token1, covered_days, window_days, window_complete, method, evidence_tier, caveat, as_of, unknown_reason }], chosen: { pool, venue, fee_tier_ppm, because, chosen_by } | null, unranked, as_of, checked_at, caveat, rules }. When the pair is not collected: { unavailable, supported, checked_at, caveat }.
Example: { chain: "Base", pair: "WETH-USDC" }
| Name | Required | Description | Default |
|---|---|---|---|
| pair | Yes | The pair, either way round: 'WETH-USDC', 'usdc/weth', 'WBTC_WETH'. Only the pairs Sato Route quotes are collected. | |
| chain | Yes | Chain the pool is on. Collected: Base, Ethereum. Anything else answers `unavailable` with the covered list — unknown, never an empty result presented as none. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_route_swapChoose a venue for a swap, with the fee disclosedRead-onlyIdempotentInspect
USE WHEN an agent needs to execute a swap and wants the venue chosen by liveness, verification and price, with the fee disclosed. Asks every aggregator adapter that quotes on the chain, in parallel, and returns the chosen venue's quote and calldata.
RULE ENFORCED: a route is a RECOMMENDATION, not a verdict and not an assurance. chosen_by names every field it was chosen on — liveness, the observed record of Sato Hub's OWN daily checks (never "uptime"), verification state, then quoted price — with the field each was read from and checked_at. Nothing here is called best, safe or guaranteed. A quote is a quote, not a fill.
NON-CUSTODIAL: this tool NEVER signs, holds, moves or broadcasts funds. It returns calldata the caller may sign. THE FEE: Sato Route 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 any other token and 25 bps cross-chain (75 bps when either side is any other token), taken as a parameter on the aggregator's own quote inside the transaction you sign; a failed, reverted or unsigned trade pays nothing. A token launch carries a disclosed share of the creator's LP fee, stated as fee.bps on every launch response, including when it is 0. Sato OS charges 3 / 15 bps on its own spot swap rail and a 3 bps perp builder fee, with no cross-chain tier. Some venues keep a share or pay later, and every quote says which. It is stated in disclosure before anything is signed.
Returns (json): { route: { slug, name, listed, sato_url, liveness, observed_success_pct, install_verified }, quote: { venue, amount_in, amount_out, token_in, token_out, chain, calldata, 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, sato_fee_tier ("stable" | "major" | "token" | "cross_chain" | null: 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, source_field }], checked_at, alternatives, caveat, preflight, unavailable_venues, rules }. When no adapter answered: { unavailable, tried: [{ venue, reason }], checked_at, caveat }.
Example: { chain: "Solana", token_in: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", token_out: "So11111111111111111111111111111111111111112", amount: "1000000" }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain display name as the directory writes it, e.g. 'Base', 'Ethereum', 'Solana'. | |
| taker | No | The address that would sign. Some venues only return calldata when it is given; nothing is ever signed here. | |
| amount | Yes | Sell amount in the INPUT token's base units (e.g. 1000000 = 1 USDC at 6 decimals). | |
| referrer | No | 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). | |
| token_in | Yes | Input token: a contract address (or Solana mint), or a symbol for the well-known stablecoins. | |
| token_out | Yes | Output token: a contract address (or Solana mint), or a symbol. | |
| slippage_bps | No | Slippage tolerance in basis points. Passed through to the venue. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_scaffold_planBuild a plan and point to the repo generatorRead-onlyIdempotentInspect
USE WHEN a plan has been agreed and the next question is which repository to start from. Builds the plan (same brain as onchain_agent_build_plan) and returns it with a create pointer to onchain_agent_create_agent, which generates the runnable repo from a nightly-checked template. This tool no longer writes repository files: every door (this server, POST /api/create, the CLI and the Agent Architect) downloads the same repo from the same engine.
WHAT COMES BACK: the plan summary (goal, intent, chain, plan_url, checked_at, stack slugs), the environment names the stack's own deploy specs ask for, any documented install that pipes a remote script into a shell (quarantined_installs, to read before running it), and create: the tool name, the CLI command and the template the goal maps to, or null when no template answers it.
KEPT FOR COMPATIBILITY: files is an empty list and bytes is 0; include_zip is accepted and ignored. mode is "plan_only".
RULE ENFORCED: nothing is generated. Every value is a field of the plan. An install line we were not told is never invented.
NON-CUSTODIAL: nothing here holds keys, signs, deploys or moves anything.
Returns (json): { mode: "plan_only", name, files: [], env_names, quarantined_installs, bytes: 0, plan: { goal, intent, chain, plan_url, checked_at, stack_slugs }, caveat, create: { tool, command, template, note } }.
Example: { goal: "a Base trading agent that swaps USDC to ETH on a signal", chain: "Base" }
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | What the user wants to build, in plain words. The plan is built and the matching create_agent template is named. | |
| chain | No | Chain the agent runs on, e.g. 'Base'. When omitted it is read from the goal. | |
| budget_usd | No | Rough monthly budget in USD. Restated in the plan; it does not filter the stack. | |
| constraints | No | Hard constraints to restate back, e.g. 'self-custody only'. | |
| include_zip | No | Accepted for compatibility and ignored: this tool is plan-only. The repo comes from onchain_agent_create_agent. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_scan_recipientCheck a recipient address before you pay itRead-onlyIdempotentInspect
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 served it or an identity that names it; (4) does the address carry a structural mark from what it did onchain; (5) is the paying wallet itself the target of address poisoning.
RULES: a reading describes what was looked at inside the stated limits, on the date given. unknown means Sato Hub holds no record either way. go means the payee was declared, the token is the issuer's contract and nothing was found within the limits: it is never a clearance. caution and no name the rule and the observed fact that decided them. A mark describes what an address did, not who controls it. The recipient, token, paying wallet, origin and amount are not stored; only the chain is. Nothing is signed or sent.
Returns (json): { schema: "sato.scan.recipient/v1", verdict: go | caution | no | unknown, rule, reason, answers: { token, lookalike, declared, marks, targeted }, limits, limits_text, as_of, method_version, caveat }. Read-only.
Example: { chain: "Base", to: "0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb", token: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", origin: "https://api.example.com/paid" }
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The recipient address the agent is about to pay: the x402 payTo, the treasury address, the top-up target. | |
| from | No | The paying wallet. Lets the reading compare against that wallet's own history and say whether it is being targeted by address poisoning. | |
| chain | Yes | 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. | |
| token | No | The token contract (or Solana mint) the payment would use. Lets the reading say whether it is the issuer's contract. Keyed by address, never by symbol. | |
| amount | No | Amount in the token's base units. Read for context only; never stored. | |
| origin | No | The https URL whose 402 response named `to` (a public host; no credentials). Lets the reading say whether that origin declared the address. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_search_agentsFind live registered agentsRead-onlyIdempotentInspect
USE WHEN you need a 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: agents whose creators registered them for a Sato Agent Passport (distinct from the resource directory, which lists the things agents are built FROM). Filter by free-text query, chain, agent_type, 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/.
Trust rule: registration is self-reported by the creator; verification_status distinguishes Self-Reported from 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 }
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Filter to agents supporting this chain. | |
| query | No | Free-text search across agent name, description, creator, stack, and type. | |
| x402_only | No | True = only agents exposing an x402 payment endpoint. | |
| agent_type | No | Filter by agent utility type: trading, research, defi, payments, security, social, workflow, gaming, data, coding. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_search_listingsFind a published agent packageRead-onlyIdempotentInspect
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, 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 against the package's exact digest — "not_checked" means none exist. A result is scoped to its test; it is not a safety, security or returns claim. No signed download URL is ever returned; cite sato_url. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Free text over a published package's title, task and description. | |
| cursor | No | The next_cursor from a previous page. | |
| recipe | No | Only packages built from this recipe id, e.g. 'treasury-balance-monitor'. | |
| license | No | Only packages under this SPDX license id, e.g. 'MIT'. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_search_resourcesFind crypto-agent tooling by name, chain, standard or what it doesRead-onlyIdempotentInspect
USE WHEN you need to look up crypto-agent tooling by name, chain, standard or what it does, or check whether a specific project exists and is maintained. Searches a daily-rebuilt directory of onchain agents, frameworks, skills and tooling — each entry scored from public evidence and linking to a citable page, which is why 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 named as a starter or template first, then listings whose install Sato Hub reproduced, plus the wiki guides. "starter" / "template" / "x402 starter" also carry templates: a pointer 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). The directory 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" -> { chain: "Base", is_agent: true, liveness: "Active" }
"newest releases" -> { sort: "newest_release", limit: 10 }
"wallet tooling" -> { query: "wallet" }
"MCP servers I can use from Claude Code" -> { integration: "claude code", iface: "mcp" }
"things I can run in Docker" -> { deploys_as: "docker" }
"MCP servers that actually answer" -> { mcp_answering: true } (the MCP endpoint answered our last handshake)
"...with a sustained record" -> { mcp_answering: true, min_observed_success: 95 }
"only installs Sato Hub has reproduced" -> { verified_only: true }
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order: priority (default), newest_release, stars, or name. | priority |
| chain | No | Filter to resources supporting this chain. | |
| iface | No | Filter by how it is accessed/integrated. One of: mcp, sdk, rest-api, plugin, cli, ui, contract. | |
| limit | No | Max results to return (1-50, default 20). | |
| query | No | Free-text search across name, description, tags, chains, and agent type. Space-separated terms are AND-matched. | |
| offset | No | Results to skip, for pagination (default 0). | |
| status | No | Filter by lifecycle status. | |
| creator | No | Filter by who built it (prefix match on creator name), e.g. 'Coinbase', 'Privy'. | |
| category | No | Filter to a resource category. | |
| featured | No | True = only editorially featured resources. | |
| is_agent | No | True = only resources that are themselves onchain agents. | |
| is_skill | No | True = only agent-skill resources (skill repos/marketplaces). | |
| liveness | No | Code activity (commit or release, not posts): Active ≤30d, Recent ≤90d, Quiet ≤1y, Dormant >1y. | |
| standard | No | Filter to resources implementing a standard. One of: x402, erc-8004, erc-8183, mcp, a2a. | |
| use_case | No | Filter by use case. One of: trading, payments, wallets, data, identity, privacy, launch, security, build, airdrops. | |
| deploys_as | No | Filter by deployment shape: npm, pip, docker, mcp server, hosted, self-hosted, cli, sdk, claude code plugin. | |
| is_harness | No | True = only agent frameworks/harnesses (OpenClaw, Codex, Claude Code…). | |
| integration | No | Filter to resources that integrate with a client or framework, e.g. 'claude code', 'cursor', 'langchain', 'openclaw'. Case-insensitive exact match. | |
| entity_class | No | Filter by class: 'resource' = things you build/deploy WITH (frameworks, tools, infra, venues, standards); 'agent' = curated, live onchain agents; 'reference' = editorial. | |
| mcp_answering | No | 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. | |
| resource_type | No | Filter resources by role. Venue = DEX/launchpad/marketplace; Network = an L1/L2. | |
| verified_only | No | True = only listings whose documented install was reproduced in a container by Sato Hub (deploy_status verified). Says nothing about runtime safety. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
| min_observed_days | No | Minimum days of daily observation behind the success rate, counted in the rate window (default 14 when min_observed_success is set). | |
| min_observed_success | No | Only listings whose share of Sato Hub's daily checks that succeeded is at least this percent, 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, not uptime. |
onchain_agent_search_skillsCheck what a crypto agent skill does before installing itRead-onlyIdempotentInspect
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 with a static DISCLOSURE: hosts it contacts, whether it generates or handles private keys, whether it asks the user to paste a credential, whether it pipes a remote script into a shell, whether it grants itself unrestricted tools, whether it registers the agent with a third-party host, whether it schedules itself. Each flag carries evidence lines on the skill's page.
Returns (json): { total, skills: [{ id, name, registry, canonical_url, installs, stars, disclosure_flags, hosts_contacted, declared_env, registry_scan, belongs_to_slug, skill_md_sha256, as_of }], note }.
A disclosure is a description, not a safety verdict — a wallet skill that generates keys is doing its job, and no flags is not a clearance. The registry's 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 skills that don't touch keys" -> { query: "solana" } then filter disclosure_flags
"which skills phone home" -> { flag: "registers_with_third_party" }
"skills for Coinbase AgentKit" -> { slug: "coinbase-agentkit" }
| Name | Required | Description | Default |
|---|---|---|---|
| flag | No | Only skills carrying this disclosure flag: pipes_remote_to_shell, executes_fetched_code, generates_or_handles_keys, solicits_credentials, reads_secret_paths, broad_tool_grant, registers_with_third_party, schedules_persistence. | |
| slug | No | Only skills that target this directory listing. | |
| limit | No | ||
| query | No | Free text over skill name, description, owner/repo and hosts contacted. | |
| registry | No | Restrict to one registry. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_submit_projectSubmit a project to the Sato Hub directoryIdempotentInspect
USE WHEN an agent has found, built or maintains a crypto-agent project that is not in the directory and wants it considered. This WRITES: it files the same row the /submit form files, into the same queue, and the daily triage run evaluates it through the same single apply path — probe the public evidence, validate against the listing schema, list it or hold it or decline it with a reason.
WHAT HAPPENS NEXT: the website, the repository and any declared endpoint are probed from public sources. A project that clears that evidence is listed; one that does not is held for a person, or declined with the reason. If contact_email is given you get exactly ONE email, and only if it is listed. A hold sends nothing — silence means a person is looking.
SUBMISSION IS NOT VERIFICATION. It is a request to be looked at. Being listed says what was observed about a project on a date, not that it is safe, audited, profitable or endorsed. Copy carrying profit, safety or risk claims is refused here rather than quietly cleaned up.
DEDUPE: the website host and the repository are checked against the live directory and against submissions already waiting. A match returns that existing entry instead of filing a second row — correcting a listing that already exists goes through the claim flow on its page, which proves control of the domain first.
LIMIT: 5 write calls an hour per caller. Nothing is written when it trips.
Returns (json): { ok, duplicate, submission_id | slug, next, caveat }.
Example: { name: "Example Agent Kit", website_url: "https://example.dev", repo_url: "https://github.com/example/kit", category: "Agent Framework", description: "A TypeScript toolkit for wiring agents to Base with viem and an MCP server.", chains: ["Base"] }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The project's name, as its own site writes it. | |
| chains | No | Chains it supports, by display name, e.g. ['Base','Solana']. | |
| category | Yes | The directory category it belongs in. Pick the closest; triage corrects it if you are wrong. | |
| repo_url | No | The public source repository, when there is one: github.com/<owner>/<name>. | |
| description | Yes | What it does, in plain words: what it is, who it is for, what it connects to. No profit, safety or performance claims — they are refused at the door. | |
| website_url | Yes | The project's own https site. Not a GitHub URL unless the repository IS the project's home. | |
| contact_email | No | Where the one approval reply goes. Optional — without it nothing is ever sent, and there is no other notification. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_swapQuote a swap, check it against a policy, and get an unsigned transactionInspect
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 anyone authorised a transfer.
WHAT IS CHECKED, and under what: four targets — token_in, token_out, the venue endpoint, and the recipient — each with its own verdict, the rule id that produced it and the reason. Then the caller's policy (caps per trade and per period, allowed chains, tokens, venues, recipients, slippage and deadline). Manage policies at https://satohub.ai/api/swap/policies; with no stored policy the default applies.
UNKNOWN REFUSES BY DEFAULT. A target we could not read, or a simulation that could not run, WITHHOLDS the transaction unless the policy says otherwise — and the response says which lane could not be read. "We did not check" and "we checked and it is fine" never look alike. A refusal is an ANSWER: it is not an error, and retrying it unchanged will refuse again.
A COUNTERPARTY WITH NO PASSPORT IS no_record. That is the ordinary case and is not a finding against the address. A Passport is self-registered, and wallet_verified proves control of a key, never anything about the product behind it. There is no list of trusted counterparties here.
THE FEE: disclosed verbatim in disclosure, per venue, before anything is signed — a fee sentence has to be true for the venue it describes. 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 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.
RECEIPT: a build-tx response is recorded and receipt_url points at the public record of what was checked, under which policy, at what instant. A receipt is not a claim the trade filled.
Returns (json): { mode, lane, route_id, pinned_venue (only when venue was set), venue, chain, token_in, token_out, amount_in, amount_out, 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, gate: { verdict, refusals, policy_id, policy_version }, gate_result: { allowed, verdicts, verdicts_digest, counterparty, policy }, simulation, tx | null, withheld: { reason, rule } | null, receipt_url, non_custodial, checked_at, caveat, meta: { signature } }. When no adapter 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: "USDC", token_out: "WETH", amount_in: "1000000", mode: "recommend" }
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | `recommend` (default) never returns a transaction, whatever the gate said. `build-tx` returns an unsigned one, and only when the gate allowed it AND the simulation did not revert. | |
| taker | No | The address that would sign. Some venues only return a transaction when it is given; nothing is ever signed here. | |
| venue | No | 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. | |
| chain_in | Yes | Source chain as the directory writes it, e.g. 'Base', 'Ethereum', 'Solana'. | |
| deadline | No | Unix seconds the quote should stay good until. Omit for the venue's own default. | |
| referrer | No | 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). | |
| token_in | Yes | Input token: a contract address (or Solana mint), or a symbol for the well-known stablecoins. | |
| amount_in | Yes | Sell amount in the INPUT token's base units (1000000 = 1 USDC at 6 decimals). A string, because a uint256 does not survive a JSON number. | |
| chain_out | No | Destination chain. Omit, or repeat chain_in, for a same-chain swap. A different value is the cross-chain lane, and the two lanes are never compared with each other. | |
| recipient | No | Where the output goes. Omit to send to the taker. A recipient we hold no record of is `no_record` — an absence of evidence, and on its own never a refusal. | |
| token_out | Yes | Output token: a contract address (or Solana mint), or a symbol. | |
| slippage_bps | No | Slippage tolerance in basis points, passed through to the venue. A policy may cap it, and then the refusal states the cap and the value. | |
| usd_notional | No | USD notional of amount_in, when YOU already hold a price. Omitted is unknown, never zero — a USD cap simply does not bite without it. | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
onchain_agent_watchWatch a repo, package, endpoint or agent for a Preflight verdict changeIdempotentInspect
USE WHEN an agent (or the person it works for) wants to be told if something in its stack stops checking out — rather than re-running a Preflight on a schedule of its own. Goes through the SAME path the public form uses: same validation, same normalisation, same rate limit, one row per address and target.
WHAT HAPPENS: the target is re-checked once a day by the public Preflight path, and an email is sent ONLY when the verdict CHANGES. Never on a schedule, never a digest. A transition INTO unknown (a check that failed to run) is recorded and never mailed — a 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. No price is set and no payment is taken.
WHAT IS STORED: the normalised target, the address (a notice has to be delivered), an HMAC of it for counting, and the baseline verdict. No IP address and no name. Asking twice is idempotent; action: "unsubscribe" stops the mail and answers the same way whether a row existed or not.
RULE ENFORCED: a verdict describes what was checked and when. It is not a safety, security or returns judgment, and a CHANGE is a change in what was observed — not a warning.
Returns (json): { ok, action, target_kind, target, watch_id, verdict, notice, caveat }.
Example: { target_kind: "package", target: "solana-agent-kit", notify_to: "me@example.com" }
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | subscribe (default) arms the watch; unsubscribe stops the mail for this address and target. | |
| target | Yes | The thing itself, in the spelling that kind takes. It is normalised, so two spellings of one repository become one watch. | |
| notify_to | Yes | The email address the change notice goes to. Stored once for delivery and counted by an HMAC; it never enters telemetry or logs. | |
| target_kind | Yes | What is being watched: repo (owner/name or a GitHub URL), package (npm name), endpoint (an https URL), agent (an ERC-8004 reference like 'base:42'), wallet (<Chain>:<address>, e.g. 'Base:0x...'). | |
| response_format | No | Text format; structuredContent is JSON either way. | markdown |
searchSearch Sato HubRead-onlyIdempotentInspect
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", "x402 payment rails on Base", "how many ERC-8004 agents by chain", "MCP servers that answer".
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to look for, in plain words: a project name, a chain, a standard, or a question about building onchain agents. Matched on its first 200 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | At most 10 matches, best first. Empty when nothing matches — never padded. |
| about_url | No | Only with identity_note: the satohub.ai page that says what Sato Hub is. |
| identity_note | No | Only when a search for the Sato name itself matched nothing: Sato Hub's no-token statement. Not a result. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
onchain_agent_route_swap1 field changed- added
Input schema / properties / referrerAdded value: +{ + "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" +}
- Changed
onchain_agent_swap1 field changed- added
Input schema / properties / referrerAdded value: +{ + "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" +}
3 tool updates
- Changed
onchain_agent_preflight2 fields changed- changed
Input schema / properties / chain / descriptionPrevious value: -"Chain for `token`: Base, Ethereum, Arbitrum, Robinhood Chain. Anything else (Solana included) 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."New value: +"Chain for `token`: Base, Ethereum, Arbitrum, Robinhood Chain, Solana. Anything else 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." - changed
Input schema / properties / token / descriptionPrevious value: -"An ERC-20 token contract address, e.g. '0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb'. Needs `chain`. EVM only in v1."New value: +"An ERC-20 token contract address, e.g. '0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb', or with chain Solana a mint (base58). Needs `chain`."
- Added
onchain_agent_resolve_token - Changed
onchain_agent_search_resources2 fields changed- changed
Input schema / properties / min_observed_days / descriptionPrevious value: -"Minimum days of daily observation behind the success rate (default 14 when min_observed_success is set)."New value: +"Minimum days of daily observation behind the success rate, counted in the rate window (default 14 when min_observed_success is set)." - changed
Input schema / properties / min_observed_success / descriptionPrevious value: -"Only listings whose share of Sato Hub's daily checks that succeeded is at least this percent, over at least min_observed_days (default 14). This is the share of OUR checks, not uptime."New value: +"Only listings whose share of Sato Hub's daily checks that succeeded is at least this percent, 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, not uptime."
1 tool update
- Changed
onchain_agent_preflight1 field changed- added
Input schema / properties / x402_methodAdded value: +{ + "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" +}
1 tool update
- Changed
onchain_agent_swap1 field changed- added
Input schema / properties / venueAdded value: +{ + "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" +}
1 tool update
- Changed
onchain_agent_create_agent1 field changed- changed
Input schema / properties / chain / enumPrevious value: -[ - "base", - "base-sepolia" -]New value: +[ + "base", + "base-sepolia", + "solana" +]
41 tool updates
- Changed
fetch2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_build_plan1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_check_install1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_compare_listings1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_create_agent1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_explain_number1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_find_x402_service1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_agent_economy1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_agent_passport1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_changes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_data_freshness1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_deploy_spec1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_listing_history1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_metrics1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_news1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_resource1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_score_methodology1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_trend1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_get_wiki_page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_inspect_listing1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_list_categories1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_list_chains1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_list_wiki_pages1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_preflight1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_recent_changes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_recommend_stack1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_register_agent1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_route_agent1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_route_launch1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_route_lp1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_route_swap1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_scaffold_plan1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_scan_recipient1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_search_agents1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_search_listings1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_search_resources2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / category / enumPrevious value: -[ - "Onchain Agent", - "MCP", - "Skill Repo", - "Agent Framework", - "Agent Launchpad", - "Agent Marketplace", - "Wallet Infrastructure", - "DeFi Tool", - "Trading Tool", - "DAO Tool", - "Research Tool", - "Data Tool", - "Security Tool", - "Developer Tool", - "API / SDK", - "Research Paper", - "Newsletter", - "Community", - "Other" -]New value: +[ + "Onchain Agent", + "MCP", + "Skill Repo", + "Agent Framework", + "Agent Launchpad", + "Agent Marketplace", + "Wallet Infrastructure", + "Payment Rail", + "DeFi Tool", + "Trading Tool", + "DAO Tool", + "Research Tool", + "Data Tool", + "Security Tool", + "Developer Tool", + "API / SDK", + "Research Paper", + "Newsletter", + "Community", + "Other" +]
- Changed
onchain_agent_search_skills1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_submit_project2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / category / enumPrevious value: -[ - "Onchain Agent", - "MCP", - "Skill Repo", - "Agent Framework", - "Agent Launchpad", - "Agent Marketplace", - "Wallet Infrastructure", - "DeFi Tool", - "Trading Tool", - "DAO Tool", - "Research Tool", - "Data Tool", - "Security Tool", - "Developer Tool", - "API / SDK", - "Research Paper", - "Newsletter", - "Community", - "Other" -]New value: +[ + "Onchain Agent", + "MCP", + "Skill Repo", + "Agent Framework", + "Agent Launchpad", + "Agent Marketplace", + "Wallet Infrastructure", + "Payment Rail", + "DeFi Tool", + "Trading Tool", + "DAO Tool", + "Research Tool", + "Data Tool", + "Security Tool", + "Developer Tool", + "API / SDK", + "Research Paper", + "Newsletter", + "Community", + "Other" +]
- Changed
onchain_agent_swap1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
onchain_agent_watch1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
search2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
1 tool update
- Changed
onchain_agent_search_resources2 fields changed- changed
Input schema / properties / use_case / descriptionPrevious value: -"Filter by use case. One of: trading, payments, wallets, data, identity, privacy, launch, security, build."New value: +"Filter by use case. One of: trading, payments, wallets, data, identity, privacy, launch, security, build, airdrops." - changed
Input schema / properties / use_case / enumPrevious value: -[ - "trading", - "payments", - "wallets", - "data", - "identity", - "privacy", - "launch", - "security", - "build" -]New value: +[ + "trading", + "payments", + "wallets", + "data", + "identity", + "privacy", + "launch", + "security", + "build", + "airdrops" +]
1 tool update
- Changed
onchain_agent_search_resources1 field changed- changed
Input schema / properties / liveness / descriptionPrevious value: -"Filter by activity recency: Active (≤30d), Recent (≤90d), Quiet (≤1y), Dormant (>1y)."New value: +"Code activity (commit or release, not posts): Active ≤30d, Recent ≤90d, Quiet ≤1y, Dormant >1y."
1 tool update
- Added
onchain_agent_find_x402_service
2 tool updates
- Changed
onchain_agent_get_trend3 fields changed- changed
Input schema / properties / chain / descriptionPrevious value: -"Chain, e.g. Base, Ethereum, Gnosis. Required when the stage is measured on more than one chain — series are never blended across chains. Omit for venue-level rows."New value: +"Chain, e.g. Base, Ethereum, Gnosis. Required when a venue's stage is measured on more than one chain — series are never blended across chains. Omit for venue-level rows." - changed
Input schema / properties / stage / descriptionPrevious value: -"Lifecycle stage, e.g. registered, launched, settled_to_catalogued_seller, mcp_endpoint_answers. Required in 'stage' mode."New value: +"Lifecycle stage. REQUIRED in 'stage' mode. By venue: erc8004 = registered, registered_new_1d (daily), active_7d, mcp_endpoint_answers; olas = registered, working; virtuals = launched; virtuals_acp = jobs_created; x402 = settled_to_catalogued_seller, answers_402, facilitator_txs_1d_known (daily)." - changed
Input schema / properties / venue / descriptionPrevious value: -"Venue id, e.g. erc8004, olas, virtuals, x402, erc4337_accounts. See onchain_agent_get_agent_economy for the catalogue."New value: +"Venue id: 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."
- Changed
onchain_agent_inspect_listing1 field changed- changed
Input schema / properties / slug / descriptionPrevious value: -"The package slug from onchain_agent_search_listings."New value: +"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."
1 tool update
- Changed
onchain_agent_get_listing_history1 field changed- changed
Input schema / properties / score_days / descriptionPrevious value: -"Include the daily Sato Score series over this many days (2-365). A day nobody measured is absent from the series, never carried forward. Omit for no series."New value: +"Include the daily Sato Score series over this many days (2-365; up to 90 days are served without a key, a longer request is answered with 90 and says so in score_series_window). A day nobody measured is absent from the series, never carried forward. Omit for no series."
2 tool updates
- Changed
onchain_agent_get_data_freshness2 fields changed- changed
Input schema / properties / surface / descriptionPrevious value: -"One data surface to check. Omit for all of them. Surfaces: directory_activity, news, erc8004_count, agent_tokens, liveness, sato_score, snapshots, x402_bazaar, x402_answers_daily, erc8004_endpoints_daily, mcp_alive_daily, 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, dead_project_sweep."New value: +"One data surface to check. Omit for all of them. Surfaces: directory_activity, news, erc8004_count, agent_tokens, liveness, sato_score, snapshots, x402_bazaar, x402_answers_daily, erc8004_endpoints_daily, 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, skills, deploy_verification, custody_observed, dead_project_sweep." - changed
Input schema / properties / surface / enumPrevious value: -[ - "directory_activity", - "news", - "erc8004_count", - "agent_tokens", - "liveness", - "sato_score", - "snapshots", - "x402_bazaar", - "x402_answers_daily", - "erc8004_endpoints_daily", - "mcp_alive_daily", - "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", - "dead_project_sweep" -]New value: +[ + "directory_activity", + "news", + "erc8004_count", + "agent_tokens", + "liveness", + "sato_score", + "snapshots", + "x402_bazaar", + "x402_answers_daily", + "erc8004_endpoints_daily", + "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", + "skills", + "deploy_verification", + "custody_observed", + "dead_project_sweep" +]
- Changed
onchain_agent_preflight1 field changed- changed
Input schema / properties / agent / descriptionPrevious value: -"An ERC-8004 agent reference, <chain>:<id>, e.g. 'base:42'. Chains: Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche, Gnosis, Robinhood Chain."New value: +"An ERC-8004 agent reference, <chain>:<id>, e.g. 'base:42'. Chains: Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche, Gnosis, Robinhood Chain, Celo."
35 tool updates
- Changed
onchain_agent_build_plan1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_compare_listings1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_explain_number1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_agent_economy1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_agent_passport1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_data_freshness1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_deploy_spec1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_listing_history1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_metrics1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_news1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_resource1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_score_methodology1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_trend1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_get_wiki_page1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_inspect_listing1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_list_categories1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_list_chains1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_list_wiki_pages1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_preflight1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_recent_changes1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_recommend_stack1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_register_agent1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_route_agent1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_route_launch1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_route_lp1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_route_swap1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_scaffold_plan1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_scan_recipient1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_search_agents1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_search_listings1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_search_resources1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_search_skills1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_submit_project1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (human-readable, default) or 'json' (machine-readable)."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_swap1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
- Changed
onchain_agent_watch1 field changed- changed
Input schema / properties / response_format / descriptionPrevious value: -"Output format: 'markdown' (default) or 'json'."New value: +"Text format; structuredContent is JSON either way."
4 tool updates
- Changed
onchain_agent_get_data_freshness2 fields changed- changed
Input schema / properties / surface / descriptionPrevious value: -"One data surface to check. Omit for all of them. Surfaces: directory_activity, news, erc8004_count, agent_tokens, liveness, sato_score, snapshots, x402_bazaar, x402_answers_daily, erc8004_endpoints_daily, mcp_alive_daily, erc8004_router_pool, passports, erc8004_census, x402_throughput, custody_profiles, agent_economy, x402_settlement, lp_pools, skills, deploy_verification, custody_observed, dead_project_sweep."New value: +"One data surface to check. Omit for all of them. Surfaces: directory_activity, news, erc8004_count, agent_tokens, liveness, sato_score, snapshots, x402_bazaar, x402_answers_daily, erc8004_endpoints_daily, mcp_alive_daily, 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, dead_project_sweep." - changed
Input schema / properties / surface / enumPrevious value: -[ - "directory_activity", - "news", - "erc8004_count", - "agent_tokens", - "liveness", - "sato_score", - "snapshots", - "x402_bazaar", - "x402_answers_daily", - "erc8004_endpoints_daily", - "mcp_alive_daily", - "erc8004_router_pool", - "passports", - "erc8004_census", - "x402_throughput", - "custody_profiles", - "agent_economy", - "x402_settlement", - "lp_pools", - "skills", - "deploy_verification", - "custody_observed", - "dead_project_sweep" -]New value: +[ + "directory_activity", + "news", + "erc8004_count", + "agent_tokens", + "liveness", + "sato_score", + "snapshots", + "x402_bazaar", + "x402_answers_daily", + "erc8004_endpoints_daily", + "mcp_alive_daily", + "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", + "dead_project_sweep" +]
- Changed
onchain_agent_preflight4 fields changed- added
Input schema / properties / addressAdded value: +{ + "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" +} - changed
Input schema / properties / chain / descriptionPrevious value: -"Chain for `token`: Base, Ethereum, Arbitrum, Robinhood Chain. Anything else (Solana included) answers 'unknown' with the reason, never a guess."New value: +"Chain for `token`: Base, Ethereum, Arbitrum, Robinhood Chain. Anything else (Solana included) 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." - added
Input schema / properties / fromAdded value: +{ + "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" +} - added
Input schema / properties / originAdded value: +{ + "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" +}
- Added
onchain_agent_scan_recipient - Changed
onchain_agent_watch2 fields changed- changed
Input schema / properties / target_kind / descriptionPrevious value: -"What is being watched: repo (owner/name or a GitHub URL), package (npm name), endpoint (an https URL), agent (an ERC-8004 reference like 'base:42')."New value: +"What is being watched: repo (owner/name or a GitHub URL), package (npm name), endpoint (an https URL), agent (an ERC-8004 reference like 'base:42'), wallet (<Chain>:<address>, e.g. 'Base:0x...')." - changed
Input schema / properties / target_kind / enumPrevious value: -[ - "repo", - "package", - "endpoint", - "agent" -]New value: +[ + "repo", + "package", + "endpoint", + "agent", + "wallet" +]
1 tool update
- Changed
onchain_agent_create_agent1 field changed- changed
Input schema / properties / framework / descriptionPrevious value: -"Agent framework. Templates exist for agentkit, claude-agent-sdk, openai-agents, plain-ts; any other answers no_template with the nearest."New value: +"Agent framework. Templates exist for agentkit, ai-sdk, claude-agent-sdk, openai-agents, plain-ts; any other answers no_template with the nearest."
1 tool update
- Changed
onchain_agent_scaffold_plan2 fields changed- changed
Input schema / properties / goal / descriptionPrevious value: -"What the user wants to build, in plain words. The plan is built first, then written into files."New value: +"What the user wants to build, in plain words. The plan is built and the matching create_agent template is named." - changed
Input schema / properties / include_zip / descriptionPrevious value: -"True (default) returns the archive base64-encoded alongside the manifest. False returns each file's contents inline instead."New value: +"Accepted for compatibility and ignored: this tool is plan-only. The repo comes from onchain_agent_create_agent."
Related MCP Connectors
Free search over ~50k agent tools: paid x402 APIs and MCP servers. Price, networks, how to call.
21Search, vet & assemble MCP servers from your agent: verified tools, risk labels, and trust scores.
Find, compare, and audit software for AI agents. Scored registry of tools and MCP servers.
Search a curated directory of agent tools, MCP servers, APIs, protocols and skills. No auth.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceDiscover and rank ERC-8004 AI agents by archetype, chain, trust score, and verified on-chain performance. Free search tools + paid analytics via x402 micropayments.MIT
- AlicenseAqualityAmaintenanceOpen-source MCP server exposing the Agent402.Tools catalog: 500+ pay-per-call tools for AI agents, including browser rendering, web search, PDFs, OCR, LLM inference, code execution, live financial/crypto/macro data, SEC EDGAR, and wallet-keyed memory. Free via proof-of-work, or pay per call in USDC across ten chains via the x402 protocol. No API keys, no signups21541AGPL 3.0
- AlicenseNot gradedqualityFmaintenanceUnified crypto tool directory MCP server enabling AI agents to discover, evaluate, and install crypto tools across multiple sources with trust scoring and x402 payment support.1MIT
- AlicenseAqualityCmaintenancePaid web research MCP tools for autonomous agents: search, page extraction, citations, and diff monitoring through a live x402 API. Unpaid calls return the Base USDC payment requirement so agents can pay and retry safely.41MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.