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

Sato Hub: Onchain Agents

REMOTE · SATOHUB.AI · SCANNED SEP 23

Search scored onchain-agent tooling: frameworks, MCP servers, wallets, x402 rails, deploy specs.

Available components

+3 this week 80 Trust /100
Trust breakdown (7 categories)

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

Endpoint Security80
Transport & Reachability100
Schema Quality & AI Usability61
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 15908 tokens (~467/item across 34 items; 34 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management77
  • Stability observed for 23 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "onchain_agent_get_deploy_spec" implies "deploy" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
  • An AI judge read all 35 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Sato Hub: Onchain Agents MCP server?

Sato Hub: Onchain Agents is a hosted endpoint at https://satohub.ai/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · satohub.ai

# add to Claude Code
claude mcp add --transport http ai-satohub-onchain-agents 'https://satohub.ai/api/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "ai-satohub-onchain-agents": {
      "url": "https://satohub.ai/api/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ai-satohub-onchain-agents": {
      "type": "http",
      "url": "https://satohub.ai/api/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.ai-satohub-onchain-agents]
url = "https://satohub.ai/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-satohub-onchain-agents": {
      "type": "remote",
      "url": "https://satohub.ai/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ai-satohub-onchain-agents --url 'https://satohub.ai/api/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ai-satohub-onchain-agents:
    url: "https://satohub.ai/api/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ai-satohub-onchain-agents": {
      "Transport": "http",
      "Url": "https://satohub.ai/api/mcp"
    }
  }
}
# add to Vellum
assistant mcp add ai-satohub-onchain-agents -t streamable-http -u 'https://satohub.ai/api/mcp'
// mcp.json
{
  "mcpServers": {
    "ai-satohub-onchain-agents": {
      "type": "http",
      "url": "https://satohub.ai/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

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

  • 23 Sept 26 0
    • Tool “onchain_agent_build_plan” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_recommend_stack” rewrote its description, which is the text the model reads security
    • New tool “onchain_agent_inspect_listing” functional
    • New tool “onchain_agent_search_listings” functional
  • 22 Sept 26 +1
    • Tool “onchain_agent_get_agent_passport” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_search_resources” rewrote its description, which is the text the model reads security
    • “onchain_agent_get_agent_passport” reworded the description of “slug” cosmetic
    • “onchain_agent_search_resources” reworded the description of “iface” cosmetic
    • “onchain_agent_search_resources” reworded the description of “standard” cosmetic
    • “onchain_agent_search_resources” reworded the description of “use_case” cosmetic
  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “onchain_agent_get_agent_economy” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_get_agent_passport” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_get_changes” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_list_categories” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_list_chains” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_list_wiki_pages” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_recent_changes” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_search_agents” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_search_skills” rewrote its description, which is the text the model reads security
  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 +1
    • New tool “onchain_agent_swap” functional
  • 15 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “onchain_agent_get_score_methodology” functional
  • 14 Sept 26 0
    • Tool “onchain_agent_build_plan” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_get_listing_history” rewrote its description, which is the text the model reads security
    • Tool “onchain_agent_preflight” rewrote its description, which is the text the model reads security
    • Schema quality: 391 → 450 functional
    • New tool “onchain_agent_register_agent” functional
    • New tool “onchain_agent_scaffold_plan” functional
    • New tool “onchain_agent_submit_project” functional
    • New tool “onchain_agent_watch” functional
    • “onchain_agent_build_plan” added an optional parameter “public” cosmetic
    • “onchain_agent_build_plan” added an optional parameter “save” cosmetic
    • “onchain_agent_get_listing_history” added an optional parameter “score_days” cosmetic
    • “onchain_agent_get_trend” added an optional parameter “mode” cosmetic
    • “onchain_agent_preflight” added an optional parameter “skill” cosmetic
    • “onchain_agent_get_listing_history” reworded the description of “days” cosmetic
    • “onchain_agent_get_trend” reworded the description of “stage” cosmetic
    • “onchain_agent_get_trend” made “stage” optional cosmetic
    • “onchain_agent_get_trend” made “venue” optional cosmetic
Diagnostics

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

Captured 23 Sept 2026 · Probed https://satohub.ai/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.satohub.ai CN=YR2,O=Let's Encrypt,C=US 15 Sept 2026 14 Dec 2026 RSA 2048 SHA256-RSA 52eb046705d16f2ca05faf15b0a7b75360a
SANs: *.satohub.ai, satohub.ai
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of satohub.ai. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 3799 8 Verified
satohub.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains
content-security-policy frame-ancestors 'none'
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=()

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

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://satohub.ai/api/mcp Verified 200
http (plaintext) http://satohub.ai/api/mcp HTTPS enforced 308 https://satohub.ai/api/mcp
MCP tools · 34 exposed · ~15,548 tokens

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

Tool Tokens
onchain_agent_build_plan ~1,020

USE WHEN someone describes the onchain agent they want and needs a plan they can act on rather than advice. Composes the other tools 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 Preflight verdict per item, 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…

NameTypeReqDescription
budget_usdnumberRough monthly budget in USD. Restated back in the plan; it does not filter the stack.
chainstringChain the agent runs on, e.g. 'Base'. When omitted it is read from the goal, and the plan says which.
constraintsarrayHard constraints to restate back, e.g. 'self-custody only', 'no API keys'.
goalstringyesWhat the user wants to build, in plain words, e.g. 'a Base trading agent that swaps USDC to ETH on a signal'.
publicbooleanOnly meaningful with `save`. True lets the shared page be indexed by search engines. Default false.
response_formatstringOutput format: 'markdown' (default) or 'json'.
savebooleanTrue 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…

No output schema declared.

No examples provided.

onchain_agent_compare_listings ~288

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" }

NameTypeReqDescription
astringyesFirst directory slug, e.g. 'coinbase-agentkit'.
bstringyesSecond directory slug, e.g. 'solana-agent-kit'.
response_formatstringOutput format: 'markdown' (default) or 'json'.

No output schema declared.

No examples provided.

onchain_agent_explain_number ~234

ANSWERS ONE QUESTION: where does a published Sato Hub number come from? 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/<slug>. 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" }

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (default) or 'json'.
slugstringyesThe finding's slug — the last path segment of a satohub.ai/numbers/<slug> URL.

No output schema declared.

No examples provided.

onchain_agent_get_agent_economy ~532

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 }

NameTypeReqDescription
chainstringRestrict to one chain, e.g. Base, BNB Chain, Gnosis. Venue-level rows have no chain.
include_platformsbooleanInclude the per-platform breakdown of who produced the registrations (agentURI attribution). Default false — it roughly doubles the response.
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
venuestringRestrict to one venue: erc8004, olas, virtuals, x402, erc4337_accounts, key_management, singularitynet, morpheus.

No output schema declared.

No examples provided.

onchain_agent_get_agent_passport ~279

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. 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.)

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
slugstringyesThe 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.

No output schema declared.

No examples provided.

onchain_agent_get_changes ~279

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: <your last sync date> }

NameTypeReqDescription
sincestringReturn everything that changed since this ISO date. Defaults to 14 days ago. Clamped to the 90-day supported window.

No output schema declared.

No examples provided.

onchain_agent_get_deploy_spec ~292

USE WHEN you are about to write setup instructions or install something for a user and want steps that were verified rather than copied from a README. Returns the structured deploy manifest for one resource by slug — everything needed to install and instantiate it: runtime, install command(s), entry snippet, required keys/env/wallet/RPC, chains, license, whether it is itself an MCP server, and a deploy_status. deploy_status is a trust signal, NOT a safety guarantee: "verified" = the install path was reproduced/confirmed from the project's docs; "self_reported" = parsed from the project's README and not independently reproduced. Always verify keys, permissions, and funds before running anything. Returns (json): { slug, name, github_url, docs_url, deploy_spec: { runtime, install[], entry, requires[], chains[], license, mcp_native, mcp_invocation?, deploy_clarity, deploy_status, source_url, as_of }, note }. Returns an error if the resource has no manifest yet (they are being rolled out resource by resource). Read-only. Example: { slug: "solana-agent-kit" }

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
slugstringyesThe resource slug to get a deploy manifest for, e.g. 'solana-agent-kit'.

No output schema declared.

No examples provided.

onchain_agent_get_listing_history ~448

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 365 days. 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, current_state, current_streak_days, last_check }, tool_history: [{ date, count, added, removed }], tools_now, tools_peak, trust_score, trust_tier, score_series, rules, sato_url }. Read-only. Example: { slug: "jupiter-mcp", days: 30, score_days: 90 }

NameTypeReqDescription
daysintegerLook-back window in days (1-30, default 30) for the observed record and the tool inventory.
response_formatstringOutput format: 'markdown' (default) or 'json'.
score_daysintegerInclude 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.
slugstringyesThe resource slug, e.g. 'coinbase-agentkit'.

No output schema declared.

No examples provided.

onchain_agent_get_metrics ~183

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 }, top_agent_tokens: [{ symbol, name, current_price, market_cap, price_change_percentage_24h, resource_slug }] }. Read-only.

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
token_limitintegerHow many top project tokens to include (1-25, default 12).

No output schema declared.

No examples provided.

onchain_agent_get_news ~238

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 }

NameTypeReqDescription
chainstringFilter to items tagged with this chain.
kindstringFilter by item kind: release, tweet, news, or research.
limitintegerMax results to return (1-50, default 20).
offsetintegerResults to skip, for pagination (default 0).
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).

No output schema declared.

No examples provided.

onchain_agent_get_resource ~182

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" }

NameTypeReqDescription
include_activitybooleanInclude the resource's recent activity feed (releases/posts).
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
slugstringyesThe resource slug, e.g. 'coinbase-agentkit'.

No output schema declared.

No examples provided.

onchain_agent_get_score_methodology ~259

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.

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).

No output schema declared.

No examples provided.

onchain_agent_get_trend ~580

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. 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. 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 }. Read-only. Examples: - "are ERC-8004 registrations on Base growing" -> { venue: "erc8004", chain: "Base", stage: "registered" } - "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 }

NameTypeReqDescription
chainstringChain, 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.
grainstring'weekly' (the citable series, default) or 'daily' (the trend grain; never a headline).
modestring'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 answ…
pointsintegerHow many most-recent points (1-30, default 8).
response_formatstringOutput format: 'markdown' (default) or 'json'.
stagestringLifecycle stage, e.g. registered, launched, settled_to_catalogued_seller, mcp_endpoint_answers. Required in 'stage' mode.
venuestringVenue id, e.g. erc8004, olas, virtuals, x402, erc4337_accounts. See onchain_agent_get_agent_economy for the catalogue.

No output schema declared.

No examples provided.

onchain_agent_get_wiki_page ~177

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. Returns (json): the full page object. Returns an error if the slug is unknown. Read-only. Example: { slug: "what-are-mcps" }

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
slugstringyesThe wiki page slug, e.g. 'what-are-mcps'.

No output schema declared.

No examples provided.

onchain_agent_inspect_listing ~252

USE WHEN you have a package slug and need what it does, what it needs and what is on record about it before recommending a download or fork. Returns the package's public fields only: task, description, creator display name, version digest and signing state, recipe, input/output schemas, required services and permissions, model support ("configured, not evaluated"), operating-cost basis as the creator wrote it, license and whether fork is permitted, support, evidence freshness for this digest, integrity, and acquisition modes (download, fork — there is no deploy or buy). RULE ENFORCED: never 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.

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
slugstringyesThe package slug from onchain_agent_search_listings.

No output schema declared.

No examples provided.

onchain_agent_list_categories ~97

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.

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).

No output schema declared.

No examples provided.

onchain_agent_list_chains ~119

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.

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).

No output schema declared.

No examples provided.

onchain_agent_list_wiki_pages ~109

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.

NameTypeReqDescription
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).

No output schema declared.

No examples provided.

onchain_agent_preflight ~1,108

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. Pass exactly one of repo, package, endpoint, agent or token. 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=<chain>:<id> 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, EVM only): 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. PERMANENTLY NULL, and said so in the evidence: holder concentration (no keyless public source — explorers are not scraped) and Uniswap v4 / non-Uniswap liquidity (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…

NameTypeReqDescription
agentstringAn ERC-8004 agent reference, <chain>:<id>, e.g. 'base:42'. Chains: Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche, Gnosis, Robinhood Chain.
chainstringChain for `token`: Base, Ethereum, Arbitrum, Robinhood Chain. Anything else (Solana included) answers 'unknown' with the reason, never a guess.
endpointstringAn https MCP endpoint URL. If it is not in the directory it gets a live initialize + tools/list handshake, capped at 8 seconds.
packagestringAn npm or PyPI package name, e.g. 'solana-agent-kit'. A trailing @version is ignored.
repostringA GitHub repository: a URL or bare owner/name, e.g. 'coinbase/agentkit'.
response_formatstringOutput format: 'markdown' (default) or 'json'.
skillstringAn 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 fe…
tokenstringAn ERC-20 token contract address, e.g. '0x1bc0c42215582d5A085795f4baDbaC3ff36d1Bcb'. Needs `chain`. EVM only in v1.

No output schema declared.

No examples provided.

onchain_agent_recent_changes ~287

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" }

NameTypeReqDescription
daysintegerLook-back window in days (1-90, default 14).
limitintegerMax changes to return (1-50, default 20).
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
slugstringLimit to one resource's recorded history by slug. Omit for the site-wide feed across all listings.

No output schema declared.

No examples provided.

onchain_agent_recommend_stack ~345

USE WHEN someone describes an agent they want to build and needs concrete components rather than general advice. Give it the goal in plain words; it returns a trust-ranked stack of real directory resources — bucketed into slots (framework, wallet, payments, trading, data, MCP tooling, security), each pick carrying its Sato Score, liveness, deploy-spec status and github_url, plus honest gaps where the directory has no strong match. A standard the goal names (x402, ERC-8004, A2A, MCP) and a runtime it names (TypeScript/Node, Python) lift the picks that implement or run on it. Next: preflight a pick (its github_url as `repo`), then onchain_agent_get_deploy_spec for its install steps. Ranking reflects openness/activity/verifiability — never a safety, quality, or returns judgment. Read-only. Example: { goal: "trading agent on Base with x402 payments", chain: "Base" }

NameTypeReqDescription
chainstringPreferred chain (e.g. Base, Solana)
goalstringyesWhat the agent should do, in plain words — e.g. 'trading agent on Base with x402 payments'
max_per_slotintegerMax picks per stack slot (default 3)
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
verified_onlybooleanTrue = 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.

No output schema declared.

No examples provided.

onchain_agent_register_agent ~752

USE WHEN an agent wants a public, machine-readable identity: an Agent Passport at satohub.ai/agents/<slug> plus a manifest at /api/agents/<slug>/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: "…" }

NameTypeReqDescription
agent_typearrayWhat kind of work it does. At least one is required to register.
chains_supportedarrayChains it operates on, by display name. At least one is required to register.
contact_emailstringRequired when registering without a signature — an unsigned registration goes to a human, who may need to ask something.
descriptionstringWhat the agent does (20-1000 chars). Required to register; omit it only on the challenge step.
endpoint_urlstringAn MCP or A2A endpoint the agent serves. Probed once on registration; a declaration is not a working service.
namestringyesThe agent's name. Bound into the signed challenge — changing it invalidates a signature.
repo_urlstringThe agent's source repository, if public.
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
signed_atstringThe `signed_at` value returned with the challenge. Valid for 15 minutes.
stackarrayDirectory slugs the agent is built from. Unknown slugs are an error, not silently dropped — the join is the point.
standardsarrayStandards the agent DECLARES support for. Declared, never verified.
wallet_addressstringThe AGENT's own wallet: EVM (0x…) or a Solana-style base58 address. Required for the signature path — signature verification is EVM-only for now.
wallet_signaturestringAn EIP-191 personal_sign signature over the exact challenge this tool returns when called without one. Present: the passport issues immediately.
website_urlstringThe agent's public page.

No output schema declared.

No examples provided.

onchain_agent_route_agent ~485

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 }

NameTypeReqDescription
capabilitystringWhat 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.
chainstringChain the agent must claim, e.g. 'Base'. Filters the passport pool; it does not pull ERC-8004 registry rows (none are enumerable keyless).
requires_mcpbooleanOnly candidates that DECLARE an MCP service. A declaration is not a working service — the top candidates get one live handshake.
requires_x402booleanOnly candidates that DECLARE x402 payment support. Declared, never settled or observed.
response_formatstringOutput format: 'markdown' (default) or 'json'.

No output schema declared.

No examples provided.

onchain_agent_route_launch ~706

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…" }

NameTypeReqDescription
chainstringyesChain display name as the directory writes it, e.g. 'Base', 'Arbitrum'.
deployerstringThe 0x address that will sign the deploy and hold the creator reward share. Without it no config is prepared — it cannot be inferred.
goalstringyesWhat is being launched. Matched against what each venue's own documentation covers.
max_pool_fee_pctnumberReject venues whose PUBLISHED pool fee exceeds this percentage. A venue that publishes no fee is not excluded — unknown is not disqualifying.
namestringToken name. Required for a prepared deploy config; the caller's to choose, never invented here.
require_programmable_fee_splitbooleanOnly venues documenting a programmable third-party recipient split.
response_formatstringOutput format: 'markdown' (default) or 'json'.
symbolstringToken symbol. Required for a prepared deploy config.

No output schema declared.

No examples provided.

onchain_agent_route_lp ~636

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…

NameTypeReqDescription
chainstringyesChain the pool is on. Collected: Base, Ethereum. Anything else answers `unavailable` with the covered list — unknown, never an empty result presented as none.
pairstringyesThe pair, either way round: 'WETH-USDC', 'usdc/weth', 'WBTC_WETH'. Only the pairs Sato Route quotes are collected.
response_formatstringOutput format: 'markdown' (default) or 'json'.

No output schema declared.

No examples provided.

onchain_agent_route_swap ~623

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 Sato fee (3 bps stable-to-stable, 15 bps on any volatile leg) is a parameter on the aggregator's own quote, taken inside the swap transaction by the router, and is stated in `disclosure` before anything is signed. A failed, reverted or unsigned trade pays nothing. 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, 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" }

NameTypeReqDescription
amountstringyesSell amount in the INPUT token's base units (e.g. 1000000 = 1 USDC at 6 decimals).
chainstringyesChain display name as the directory writes it, e.g. 'Base', 'Ethereum', 'Solana'.
response_formatstringOutput format: 'markdown' (default) or 'json'.
slippage_bpsintegerSlippage tolerance in basis points. Passed through to the venue.
takerstringThe address that would sign. Some venues only return calldata when it is given; nothing is ever signed here.
token_instringyesInput token: a contract address (or Solana mint), or a symbol for the well-known stablecoins.
token_outstringyesOutput token: a contract address (or Solana mint), or a symbol.

No output schema declared.

No examples provided.

onchain_agent_scaffold_plan ~648

USE WHEN a plan has been agreed and the next step is a repository rather than more advice. Builds the plan (same brain as `onchain_agent_build_plan`) and writes it into a small starter repo, returned as a base64 zip plus a manifest naming every file. WHAT IS IN THE ARCHIVE: `README.md` (the plan rendered, every source URL, and the disclosure that Sato OS is ours) · `sato.plan.json` (the plan, signed at its own checked_at when a signing key is configured) · `.env.example` (every environment variable the stack's own deploy specs ask for, values BLANK, each under a comment naming which listing wants it) · `install.sh` (the documented install lines in order, each under its Preflight verdict) · `agent.config.json` (chain, tokens and the venue Sato Route chose, with `chosen_by`) · `.mcp.json` (Sato Hub's MCP server plus any MCP-native stack item) · `docker-compose.yml` ONLY when every stack item documents a docker install. RULE ENFORCED: nothing is generated. Every line is a template constant or a field of the plan, copied verbatim. An install line we were not told is never invented, and a value we do not hold is left blank with a comment rather than filled with a plausible default. THE ONE SAFETY RULE: a documented install that pipes a remote script into a shell (`curl … | sh`) is written as a COMMENTED line with a warning above it, never as an executable one, and it is reported in `quarantined_installs`. Uncommenting it is the reader's decision to take deliberately. DETERMINISTIC: the same plan produces a byte-identical archive — the timestamps come from the plan's `checked_at`, not the clock. NON-CUSTODIAL: the archive holds no keys and no secrets, and nothing here signs, deploys or moves anything. Returns (json): { name, files: [{ path, note, bytes }], env_names, quarantined_installs, zip_base64, bytes, plan: { goal, intent, chain, plan_url, checked_at, stack_slugs }, caveat }. Example: { goal: "a Base trading agent that swaps USDC to ETH on a signal", chain:…

NameTypeReqDescription
budget_usdnumberRough monthly budget in USD. Restated in the plan; it does not filter the stack.
chainstringChain the agent runs on, e.g. 'Base'. When omitted it is read from the goal.
constraintsarrayHard constraints to restate back, e.g. 'self-custody only'.
goalstringyesWhat the user wants to build, in plain words. The plan is built first, then written into files.
include_zipbooleanTrue (default) returns the archive base64-encoded alongside the manifest. False returns each file's contents inline instead.
response_formatstringOutput format: 'markdown' (default) or 'json'.

No output schema declared.

No examples provided.

onchain_agent_search_agents ~319

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. 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 }

NameTypeReqDescription
agent_typestringFilter by agent utility type: trading, research, defi, payments, security, social, workflow, gaming, data, coding.
chainstringFilter to agents supporting this chain.
querystringFree-text search across agent name, description, creator, stack, and type.
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
x402_onlybooleanTrue = only agents exposing an x402 payment endpoint.

No output schema declared.

No examples provided.

onchain_agent_search_listings ~299

USE WHEN someone wants a ready-made onchain agent package to download or fork rather than assemble one. Searches Sato Hub's published agent packages — each a public view of one sealed, immutable version: its task, inputs/outputs, required permissions, model support ("configured, not evaluated"), license, and evidence freshness for that exact digest. Returns (json): { listings: [{ slug, title, task, version: { digest }, recipe, license, fork_permitted, evidence_freshness, integrity, acquisition_modes, sato_url, ... }], next_cursor }. RULE ENFORCED: evidence counts only rows recorded against 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.

NameTypeReqDescription
cursorstringThe next_cursor from a previous page.
licensestringOnly packages under this SPDX license id, e.g. 'MIT'.
limitinteger
querystringFree text over a published package's title, task and description.
recipestringOnly packages built from this recipe id, e.g. 'treasury-balance-monitor'.
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).

No output schema declared.

No examples provided.

onchain_agent_search_resources ~1,174

USE WHEN someone asks what to build a crypto or onchain agent with, which tools support a chain or standard, or 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. Filters: query (free text, AND-matched terms), chain, status, liveness, featured, and the taxonomy facets (docs/taxonomy.md): entity_class (resource | agent | reference), resource_type (Framework | Tool/Service | Infrastructure | Venue | Network | Standard), use_case (trading, payments, wallets, data, identity, privacy, launch, security, build), standard (x402, erc-8004, erc-8183, mcp, a2a), iface (mcp, sdk, rest-api, plugin, cli, ui, contract). Those three are closed vocabularies: anything else is refused with the list, never answered with an empty result. Legacy flags still work: category, is_agent, 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" -> { iface: "mcp", min_observed_success: 95 } - "only installs Sato Hub has reproduced" -> { verified_only: true }

NameTypeReqDescription
categorystringFilter to a resource category.
chainstringFilter to resources supporting this chain.
creatorstringFilter by who built it (prefix match on creator name), e.g. 'Coinbase', 'Privy'.
deploys_asstringFilter by deployment shape: npm, pip, docker, mcp server, hosted, self-hosted, cli, sdk, claude code plugin.
entity_classstringFilter by class: 'resource' = things you build/deploy WITH (frameworks, tools, infra, venues, standards); 'agent' = curated, live onchain agents; 'reference' = editorial.
featuredbooleanTrue = only editorially featured resources.
ifacestringFilter by how it is accessed/integrated. One of: mcp, sdk, rest-api, plugin, cli, ui, contract.
integrationstringFilter to resources that integrate with a client or framework, e.g. 'claude code', 'cursor', 'langchain', 'openclaw'. Case-insensitive exact match.
is_agentbooleanTrue = only resources that are themselves onchain agents.
is_harnessbooleanTrue = only agent frameworks/harnesses (OpenClaw, Codex, Claude Code…).
is_skillbooleanTrue = only agent-skill resources (skill repos/marketplaces).
limitintegerMax results to return (1-50, default 20).
livenessstringFilter by activity recency: Active (≤30d), Recent (≤90d), Quiet (≤1y), Dormant (>1y).
min_observed_daysintegerMinimum days of daily observation behind the success rate (default 14 when min_observed_success is set).
min_observed_successnumberOnly 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.
offsetintegerResults to skip, for pagination (default 0).
querystringFree-text search across name, description, tags, chains, and agent type. Space-separated terms are AND-matched.
resource_typestringFilter resources by role. Venue = DEX/launchpad/marketplace; Network = an L1/L2.
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
sortstringSort order: priority (default), newest_release, stars, or name.
standardstringFilter to resources implementing a standard. One of: x402, erc-8004, erc-8183, mcp, a2a.
statusstringFilter by lifecycle status.
use_casestringFilter by use case. One of: trading, payments, wallets, data, identity, privacy, launch, security, build.
verified_onlybooleanTrue = only listings whose documented install was reproduced in a container by Sato Hub (deploy_status verified). Says nothing about runtime safety.

No output schema declared.

No examples provided.

onchain_agent_search_skills ~435

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. 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" }

NameTypeReqDescription
flagstringOnly 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_pa…
limitinteger
querystringFree text over skill name, description, owner/repo and hosts contacted.
registrystringRestrict to one registry.
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
slugstringOnly skills that target this directory listing.

No output schema declared.

No examples provided.

onchain_agent_submit_project ~608

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"] }

NameTypeReqDescription
categorystringyesThe directory category it belongs in. Pick the closest; triage corrects it if you are wrong.
chainsarrayChains it supports, by display name, e.g. ['Base','Solana'].
contact_emailstringWhere the one approval reply goes. Optional — without it nothing is ever sent, and there is no other notification.
descriptionstringyesWhat 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.
namestringyesThe project's name, as its own site writes it.
repo_urlstringThe public source repository, when there is one: github.com/<owner>/<name>.
response_formatstringOutput format: 'markdown' (human-readable, default) or 'json' (machine-readable).
website_urlstringyesThe project's own https site. Not a GitHub URL unless the repository IS the project's home.

No output schema declared.

No examples provided.

onchain_agent_swap ~1,064

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. RECEIPT: a `build-tx` response is recorded and `receipt_url` points at the public record of what was checked, under which polic…

NameTypeReqDescription
amount_instringyesSell 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_instringyesSource chain as the directory writes it, e.g. 'Base', 'Ethereum', 'Solana'.
chain_outstringDestination 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.
deadlineintegerUnix seconds the quote should stay good until. Omit for the venue's own default.
modestring`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.
recipientstringWhere 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.
response_formatstringOutput format: 'markdown' (default) or 'json'.
slippage_bpsintegerSlippage tolerance in basis points, passed through to the venue. A policy may cap it, and then the refusal states the cap and the value.
takerstringThe address that would sign. Some venues only return a transaction when it is given; nothing is ever signed here.
token_instringyesInput token: a contract address (or Solana mint), or a symbol for the well-known stablecoins.
token_outstringyesOutput token: a contract address (or Solana mint), or a symbol.
usd_notionalnumberUSD notional of amount_in, when YOU already hold a price. Omitted is unknown, never zero — a USD cap simply does not bite without it.

No output schema declared.

No examples provided.

onchain_agent_watch ~491

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. FREE WHILE IN PREVIEW. A paid tier will be announced. No price is quoted here and none exists to quote. 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" }

NameTypeReqDescription
actionstringsubscribe (default) arms the watch; unsubscribe stops the mail for this address and target.
notify_tostringyesThe email address the change notice goes to. Stored once for delivery and counted by an HMAC; it never enters telemetry or logs.
response_formatstringOutput format: 'markdown' (default) or 'json'.
targetstringyesThe thing itself, in the spelling that kind takes. It is normalised, so two spellings of one repository become one watch.
target_kindstringyesWhat 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').

No output schema declared.

No examples provided.

Common questions

What is the Sato Hub: Onchain Agents MCP server?

Sato Hub: Onchain Agents is an MCP server listed in the public MCP registry as ai.satohub/onchain-agents. Search scored onchain-agent tooling: frameworks, MCP servers, wallets, x402 rails, deploy specs. This page covers its hosted endpoint (https://satohub.ai/api/mcp).

Is the Sato Hub: Onchain Agents MCP server safe to use?

Sato Hub: Onchain Agents scores 80 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Sato Hub: Onchain Agents MCP server expose?

Sato Hub: Onchain Agents exposes 34 tools: onchain_agent_search_resources, onchain_agent_get_resource, onchain_agent_get_deploy_spec, onchain_agent_recent_changes, onchain_agent_list_categories, and 29 more. Their descriptions and schemas cost roughly 15,548 tokens of context every time the server is loaded.

Does the Sato Hub: Onchain Agents MCP server require authentication?

No. We connected to Sato Hub: Onchain Agents without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Sato Hub: Onchain Agents MCP server still maintained?

Sato Hub: Onchain Agents is still listed as active in the MCP registry. We last reached this channel on 23 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.