Sato Hub: Onchain Agents
Build any crypto agent: get frameworks, wallets, x402 payments and DeFi tools for your goal, with install steps and a Preflight check before you install or pay.
Hosted MCP Server
npx add-mcp 'https://satohub.ai/api/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
Sato Hub MCP
Connect your agent to Sato Hub's index over MCP. No key, no account.
Two steps
Install
5 clients install in one click
-
Step 1: Add the server
Paste the endpoint, or pick your client below. EndpointStreamable HTTPno key42 read-only · 4 can change Sato Hub statehttps://satohub.ai/api/mcpCopy URL Claude Code$ claude mcp add --transport http onchain-agent https://satohub.ai/api/mcpCopy EditorsCursor
one click Add to Cursor Copy config Show config Format read from their docs · 2026-09-29VS Code
one click Add to VS Code Copy config Show config The top-level key is `servers`, not `mcpServers`. Format read from their docs · 2026-09-29VS Code Insiders
one click Add to VS Code Insiders Copy config Show config Format read from their docs · 2026-09-29Windsurf
Copy Show config The key is `serverUrl`. Windsurf's own deep link resolves against its registry and cannot carry an arbitrary URL, so there is no one-click here yet. Format read from their docs · 2026-09-13Zed
Copy Show config The top-level key is `context_servers`. Settings → AI → MCP Servers → Add Remote Server does the same thing. Format read from their docs · 2026-09-13Cline
Copy Show config `streamableHttp` is camelCase here and hyphenated in Continue. They are not interchangeable. The CLI (`npx @cline/cli`, binary `clite`) reads the same file; its `mcp` subcommand is an interactive wizard with no flags, so a scripted install writes this JSON directly. Format read from their docs · 2026-09-13Continue
Copy Show config `mcpServers` is a list here, and the type is hyphenated. Format read from their docs · 2026-09-13JetBrains AI Assistant
Copy Show config Pasted into the dialog — there is no user-editable config file. Format read from their docs · 2026-09-13 CLIClaude Code
Show config `type: "http"` is required — a bare `url` is read as a stdio config. Format read from their docs · 2026-09-13claude mcp add --transport http satohub https://satohub.ai/api/mcpCodex CLI
Show config Format read from their docs · 2026-09-13codex mcp add satohub --url https://satohub.ai/api/mcpGemini CLI
Show config The key is `httpUrl`. A plain `url` here means SSE, which this endpoint does not serve. Format read from their docs · 2026-09-13 Desktop & terminalgemini mcp add --transport http --scope user satohub https://satohub.ai/api/mcpLM Studio
one click Show config The deep link needs LM Studio 0.3.17 or newer. Format read from their docs · 2026-09-13Goose
one click Show config The deep link passes `url`; the config file wants `uri`. Goose has an open report of streamable-HTTP deep links failing quietly — if nothing appears, use `goose configure` and the block above. Format read from their docs · 2026-09-13Claude Desktop
Copy Show config Paste the URL, not a JSON block — `claude_desktop_config.json` takes local servers only. The connection is made from Anthropic's servers, not your machine. On the free plan you get one custom connector. Format read from their docs · 2026-09-13Warp
Copy Show config Warp's docs describe a `url` server as SSE. This endpoint serves Streamable HTTP and has SSE disabled, so we have not confirmed Warp connects. Reported as untested rather than left to fail quietly. Format unconfirmed — see their docs ChatGPT, Le Chat and other hosted appsAdd it by URLShowHide No editor needed. These apps add a remote server by URL in their own settings. Paste the endpoint, choose no authentication, and ask for a crypto agent build to check it works.ChatGPT
Copy Show config Business, Enterprise and Edu plans only, and a workspace admin must allow developer mode. Paste the URL as the endpoint, choose no authentication, then Scan Tools. Format read from their docs · 2026-09-25Mistral Le Chat
Copy Show config Admin only (on Free and Pro the account owner is the admin). Connector name: `satohub` (no spaces); Server URL: the endpoint. Authentication is detected — it will find none. Format read from their docs · 2026-09-25Dify
Copy Show config Use `satohub` as the server identifier and keep it: apps reference the server by it, and changing it breaks the tools in apps that used the old one. Format read from their docs · 2026-09-25Langflow
Copy Show config Then drag the server from the MCP sidebar onto the canvas to get its MCP Tools component. Format read from their docs · 2026-09-25Relevance AI
Copy Show config Paste the URL and label the connection `satohub`; no authentication. The label shows in tool descriptions as (MCP: satohub). Format read from their docs · 2026-09-25Composio
Copy Show config Custom MCP is experimental at Composio and API-only for now. Tools sync into a project-scoped CUSTOM_SATOHUB toolkit you add to a session. Format read from their docs · 2026-09-25Flowise
Copy Show config Flowise's Streamable HTTP example is `{url, headers}`; `headers` is only for auth, and this server takes none, so `url` alone is the whole config. Format read from their docs · 2026-09-29n8n
Copy Show config n8n's page for the MCP Client Tool node still shows only an "SSE Endpoint" field. That is node version 1: from version 1.2 (n8n PR #15454, merged 2025-07-18) the node has an Endpoint field and a Server Transport option that defaults to HTTP Streamable. On an older workflow, add a fresh node or set Server Transport to HTTP Streamable — SSE is off on this server. Format read from their docs · 2026-09-29 Other ways to connectSkill, plugin, framework package or raw configShowHide As a skill Adds the tool guide, a curl fallback and this server to Claude Code, Codex, Cursor or Hermes.
Source: github.com/satohubai/sato-hub-skill · discovery index at /.well-known/skills/index.json As a Claude Code plugin The server and the skill together.npx skills add satohubai/sato-hub-skill
Source: github.com/satohubai/sato-plugins In your framework Four of these tools ship as a plugin for each framework. Each one wraps this server and the signed REST routes, passes the payload through as-is and checks the Ed25519 signature on the way. Nothing is signed./plugin marketplace add satohubai/sato-plugins /plugin install sato-hub@sato-plugins
Source, plus hosted-MCP configs for the Claude Agent SDK and the OpenAI Agents SDK: github.com/satohubai/sato-hub-integrations. Any client, native HTTP Most current clients speak Streamable HTTP. Drop this into your MCP config.npm i elizaos-plugin-satohub # elizaOS — four actions npm i satohub-ai-sdk-tools # Vercel AI SDK — four tool() exports npm i satohub-langchain-tools # LangChain.js — four tool() exports npm i satohub-core # anything with fetch, + the signature verifier
Older clients Only if your client has no native HTTP transport: bridge with mcp-remote.{ "mcpServers": { "onchain-agent": { "type": "http", "url": "https://satohub.ai/api/mcp" } } }
Inspect it live Point the MCP Inspector at the endpoint and browse the tools.{ "mcpServers": { "onchain-agent": { "command": "npx", "args": ["-y", "mcp-remote", "https://satohub.ai/api/mcp"] } } }
No MCP at all: pin satohub.ai in web search If your agent uses a model's built-in web search, limit it to satohub.ai for onchain-agent questions. Each answer then comes with a Sato Score, a liveness date and a page to cite. Claude API · web_searchnpx @modelcontextprotocol/inspector # transport: Streamable HTTP → https://satohub.ai/api/mcp
OpenAI Responses · web_search{ "type": "web_search_20260209", "name": "web_search", "allowed_domains": ["satohub.ai"] }
xAI Grok · web_search{ "type": "web_search", "filters": { "allowed_domains": ["satohub.ai"] } }
Also listed on Smithery and the Official MCP Registry as ai.satohub/onchain-agents. Machine-readable install list: /api/install.json.xai.tools.webSearch({ allowedDomains: ["satohub.ai"] }) -
Step 2: Tell your agent to use it
A connected server still needs a rule in your repo, or the model answers from memory. [ Agent Instructions Drop-in rules for the file your client already reads.- AGENTS.md
- CLAUDE.md
- .cursor/rules/satohub.mdc
- .windsurfrules Get the rules](https://satohub.ai/instructions) Start from a template Built by Sato Hub Building a TypeScript agent on Base? satohubai/base-agent-starter runs Preflight on its own dependencies before installing them, reads Base market data, checks every intent against a spending policy and asks for one swap quote. npm run setup && npm start, no key or account needed. Use this template. It holds no private key, never builds, signs or broadcasts a transaction, and the quote is unsigned. It has not been audited: read it before you build on it.
Live endpoint
Try it
Pick a tool and press Run. The call goes to the live endpoint, and you see what your client would get.
Loading the tool catalogue…
8 domains
Tools
46
42 are read-only and 4 can change Sato Hub state. None signs, holds or broadcasts funds.
- Read-only Writes
- slug required
- chain optional
⬡
Library
Search the directory and read any listing in full.
6
-
search_resources
Read-only Find crypto-agent tooling by name, chain, standard or what it does- query
- chain
- category
- status
- +19 Details and example call Search and filter the directory by free text, chain, category, status, liveness, and the agent / skill / framework flags. Sortable and paginated.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_search_resources", "arguments": { "query": "wallet", "chain": "Base" } } } - query
-
get_resource
Read-only Check one project in detail- slug
- include_activity Details and example call The full record for one resource by slug, with its recent release and post activity.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_resource", "arguments": { "slug": "coinbase-agentkit" } } } - slug
-
list_categories
Read-only See how the directory is organised No inputs Details and example call Every resource category with counts, most populated first.{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_list_categories", "arguments": {} } } -
list_chains
Read-only See which chains are covered No inputs Details and example call Every blockchain represented in the directory, with resource counts.{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_list_chains", "arguments": {} } } -
search
Read-only Search Sato Hub- query Details and example call The search half of the pair ChatGPT deep research and company knowledge require: one query string → {results:[{id,title,url}]} over listings, answers, numbers and wiki pages. At most 10, never padded.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "search", "arguments": { "query": "x402 payments on Base" } } } -
fetch
Read-only Fetch one Sato Hub record- id Details and example call The fetch half of that pair: an id from search → {id,title,text,url,metadata}, plain text with dated facts, the evidence behind each claim, and the canonical satohub.ai URL to cite.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "fetch", "arguments": { "id": "resource:coinbase-agentkit" } } }
⚡
Build
Plan a stack, check each piece, and get code or a route.
19
-
get_deploy_spec
Read-only Get install steps for a stack pick, with its Preflight attached- slug Details and example call The structured deploy manifest for one resource — runtime, install commands, entry snippet, required keys/env, and a verified vs self-reported deploy status.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_deploy_spec", "arguments": { "slug": "solana-agent-kit" } } } -
recent_changes
Read-only What changed in the ecosystem- slug
- days Details and example call The auditable Listing History — status flips, verification grants, Sato Score tier moves, releases — site-wide or for one resource.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_recent_changes", "arguments": {} } } - slug
-
recommend_stack
Read-only Build any crypto agent: goal in, stack and install steps out- goal
- chain
- max_per_slot
- verified_only Details and example call Given a goal in plain words, a trust-ranked build stack — bucketed by slot (framework, wallet, payments, trading, data, MCP tooling, security), each pick with its Sato Score, liveness, and deploy-spec status, plus honest gaps.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_recommend_stack", "arguments": { "goal": "trading agent on Base with x402 payments" } } } - goal
-
compare_listings
Read-only Compare two listings on the same axes Details and example call Two listings on the same axes — the derived table the /compare pages render, read live off both records. A mandatory caveat names what the data cannot settle; no winner field exists.{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_compare_listings", "arguments": { "a": "coinbase-agentkit", "b": "solana-agent-kit" } } } -
get_listing_history
Read-only Has this tool been answering?- slug
- days
- score_days Details and example call Has this tool been answering? A 30-day shape from one listing's observed record — share of our checks that succeeded, current state and streak — plus its MCP tool-inventory changes and Sato Score. Shape, never rows.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_listing_history", "arguments": { "slug": "coinbase-agentkit" } } } - slug
-
get_score_methodology
Read-only How the Sato Score works No inputs Details and example call How the Sato Score works: the six components with their maximum points and what each measures, the tier cutoffs, what "provisional" means, what is deliberately not in the score, and how to reproduce or dispute one. Call it before describing or applying the score, so the rubric is quoted rather than guessed. Not a safety, quality or returns grade — the payload says so.{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_score_methodology", "arguments": {} } } -
preflight
Read-only Check a target before you install, connect, pay or trade- repo
- package
- endpoint
- agent
- +8 Details and example call Run this BEFORE you install, connect or pay. One repo, package, MCP endpoint or ERC-8004 agent id in; a verdict (go / caution / no / unknown) out, with one evidence line per check naming the field it came from. An unlisted endpoint gets one live handshake and can never come back "go" — a handshake is not a record. A verdict names what was checked, never that anything is safe.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_preflight", "arguments": { "repo": "coinbase/agentkit" } } } - repo
-
check_install
Read-only Check what an install can do with your keys and funds- command
- config
- install
- cmd
- +4 Details and example call Check before you install. An install command or MCP config in; per target, what it can do with your keys and funds — does it take your key, does your key leave, can it move funds on its own, what changed — each reading with its evidence class and date. Describes, never rates.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_check_install", "arguments": { "command": "npm i @solana/web3.js viem" } } } - command
-
scan_recipient
Read-only Check a recipient address before you pay it- chain
- to
- token
- amount
- +2 Details and example call Check a recipient before you pay it. An address on a chain in; five dated answers out — does it only look like an address you pay, is the token the issuer's contract, did the paid party declare it, does it carry a structural mark, is your own wallet being targeted by address poisoning. Describes what was looked at within stated limits; unknown is no record either way, and go is never a clearance.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_scan_recipient", "arguments": { "chain": "Base", "to": "<recipient address>" } } } - chain
-
route_swap
Read-only Choose a venue for a swap, with the fee disclosed- chain
- token_in
- token_out
- amount
- +3 Details and example call Where should a swap go? Every aggregator that quotes on the chain is asked in parallel; the venue is a recommendation chosen by liveness, the observed record of our own daily checks, verification state and then price, with chosen_by naming every field. Returns the quote and calldata with the Sato fee disclosed before anything is signed. 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 never signs, holds or moves funds — you sign.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_route_swap", "arguments": { "chain": "Base", "token_in": "USDC", "token_out": "<token address>", "amount": "1000000" } } } - chain
-
route_launch
Read-only Choose a launch venue, with the fee disclosed and a config prepared- chain
- goal
- name
- symbol
- +3 Details and example call Where should a token launch? Clanker v4, Bankr, Virtuals and Zora creator coins, each fact carrying the venue page it was read from and the date it was read. The Clanker lane returns a prepared clanker-sdk v4 deploy config you sign yourself; the rest are named, with the reason no config is emitted. Sato's share of the creator reward split is disclosed on every response, including when it is zero.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_route_launch", "arguments": { "chain": "Base", "goal": "agent_token" } } } - chain
-
route_agent
Read-only Choose an agent for a task, with the pick explained- capability
- chain
- requires_mcp
- requires_x402 Details and example call Need another agent for a task? Candidates are the listed Sato Agent Passports, filtered by capability, chain and declared MCP/x402 support, then ranked by registration, whether the declared service answered a live handshake, published feedback count and liveness — chosen_by names every signal and the field it was read from. Nothing qualifying returns unknown with a reason, not a low-confidence pick.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_route_agent", "arguments": { "capability": "research", "chain": "Base" } } } - capability
-
route_lp
Read-only Compare the Uniswap pools for a pair, with the evidence and the gap named- chain
- pair Details and example call Which Uniswap pool and fee tier? Every v3 pool we found for a pair across the four standard tiers, each with its in-range liquidity, the swaps and volume actually counted, the window that count covered, and a fee-revenue PROXY — the published fee rate × the volume we saw, never revenue, an APR or a yield. The pick is the highest proxy per day per unit of liquidity, and impermanent loss is NOT modelled: it appears in chosen_by as an explicit null rather than being quietly left out. v4 comes back unknown with its reason, because a singleton pool manager publishes no per-pair pool id.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_route_lp", "arguments": { "chain": "Base", "pair": "WETH-USDC" } } } - chain
-
build_plan
Read-only Turn a build goal into a full plan: stack, install steps, Preflight- goal
- chain
- budget_usd
- constraints
- +2 Details and example call A goal in plain words in, a plan you can act on out: the goal restated, a stack of real listings each with its Sato Score, liveness and observed record, the deploy spec and Preflight verdict for every item, the first action when the goal implies one, and the questions still open. Nothing in a plan is invented — every component is a listing that exists, and Sato OS appears only as a labelled execution layer, never ranked against a listing.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_build_plan", "arguments": { "goal": "a Base trading agent that swaps USDC to ETH on a signal" } } } - goal
-
scaffold_plan
Read-only Build a plan and point to the repo generator- goal
- chain
- budget_usd
- constraints
- +1 Details and example call The plan, with a pointer to the repo. Takes a goal, builds the plan, and names the create_agent template and CLI command that generate the runnable repo — the one engine every door downloads from. It returns the stack, its declared env names and any install that pipes a remote script into a shell; it no longer writes files itself.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_scaffold_plan", "arguments": { "goal": "a Base trading agent that swaps USDC to ETH on a signal" } } } - goal
-
create_agent
Read-only Create a runnable agent repo from a checked template- goal
- framework
- chain
- network
- +2 Details and example call The goal, as a runnable repo. A goal in plain words in; a TypeScript agent repo out, generated from a template that is re-checked every night, with its policy file, dependency custody lock and manifest. A goal no template answers gets the nearest templates, never improvised code. Fork by default; mainnet only with explicit risk acceptance. The goal is not stored.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_create_agent", "arguments": { "goal": "swap USDC to ETH on Base with a per-trade cap" } } } - goal
-
swap
Writes Quote a swap, check it against a policy, and get an unsigned transaction- chain_in
- token_in
- token_out
- amount_in
- +10 Details and example call The swap, checked before it is built. Chooses the venue, discloses that venue's own fee sentence verbatim, then checks four targets — both tokens, the venue endpoint and the recipient — against the caller's policy. `recommend` never returns a transaction; `build-tx` returns an UNSIGNED one, and only when the gate allowed it and a simulation did not revert. Unknown refuses by default and says which lane could not be read. A recipient with no Passport is `no_record`, which is the ordinary case and not a finding. Sato Hub holds no keys and signs nothing.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_swap", "arguments": { "chain_in": "Base", "token_in": "USDC", "token_out": "<token address>", "amount_in": "1000000", "mode": "recommend" } } } - chain_in
-
resolve_token
Read-only Resolve an address, a mint or a link to the token it is- input
- chain
- address
- mint
- +4 Details and example call What is this address? A Base contract address, a Solana mint or a link (DexScreener, GeckoTerminal, Birdeye, pump.fun, GMGN, Basescan, Solscan, Jupiter, Uniswap, Aerodrome, Zora, Clanker) in; chain, address, name, symbol, decimals, token program, the main pool with its own liquidity and the USD price out, each with the source and time it was read. A pool link resolves to the pool's base token. On Solana the mint's authorities and Token-2022 extensions come from the chain. Describes only: a null says why, and nothing here says a token is safe. Read-only.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_resolve_token", "arguments": { "input": "<contract address, mint or link>", "chain": "base" } } } - input
-
watch
Writes Watch a repo, package, endpoint or agent for a Preflight verdict change- target_kind
- target
- notify_to
- action Details and example call Tell me if this changes. Subscribe a repo, package, MCP endpoint or ERC-8004 agent to a daily Preflight re-check; an email goes out ONLY when the verdict changes — never on a schedule, never a digest. Free while in preview. No IP is stored, and the address is kept once for delivery and counted by an HMAC.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_watch", "arguments": { "target_kind": "repo", "target": "coinbase/agentkit", "notify_to": "you@example.com" } } } - target_kind
✦
Registry
Find registered agents and read their passports.
2
-
search_agents
Read-only Find live registered agents- query
- chain
- agent_type
- x402_only Details and example call Search the Agent Registry — registered onchain agents with Sato Agent Passports — by text, chain, agent type, or x402 support.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_search_agents", "arguments": { "query": "trading", "chain": "Base" } } } - query
-
get_agent_passport
Read-only Look up one registered agent- slug Details and example call One registered agent's full passport manifest: identity, chains, stack, links, payment/x402 metadata, and verification + liveness status.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_agent_passport", "arguments": { "slug": "<slug from search_agents>" } } }
▣
Packages
Find and inspect published agent packages.
2
-
search_listings
Read-only Find a published agent package- query
- recipe
- license Details and example call Search published agent packages — each a public view of one sealed version: task, inputs/outputs, permissions, license, and evidence freshness for that exact digest.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_search_listings", "arguments": { "query": "treasury" } } } - query
-
inspect_listing
Read-only Inspect one published agent package- slug Details and example call One published package's public fields: version digest, recipe, model support (configured, not evaluated), license and fork permission, evidence freshness, integrity and acquisition modes (download, fork). Never a signed URL.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_inspect_listing", "arguments": { "slug": "<slug from search_listings>" } } }
▲
Intake
List a project or give your agent a passport.
2
-
submit_project
Writes Submit a project to the Sato Hub directory- name
- website_url
- description
- category
- +3 Details and example call Put a project in front of the directory. Files the same row the /submit form files, into the same queue, evaluated by the same daily triage — probed from public sources, then listed, held for a person, or declined with the reason. A duplicate returns the entry that already exists instead of a second row. Submission is not verification, and copy carrying profit or safety claims is refused at the door.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_submit_project", "arguments": { "name": "Your project", "website_url": "https://example.com", "description": "What it does, who it is for and what it connects to.", "category": "MCP" } } } - name
-
register_agent
Writes Register an Agent Passport (self-issue with a wallet signature)- name
- description
- agent_type
- chains_supported
- +9 Details and example call An agent issues itself a passport. Call it once for the challenge, sign it with the agent's wallet key, call it again and the passport and its manifest go live. Unsigned registration is accepted and waits for a person. The signature proves control of the key and nothing else — every passport is Self-Reported.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_register_agent", "arguments": { "name": "my-agent" } } } - name
◈
Signals
News, trends, and where each number comes from.
12
-
get_news
Read-only Recent crypto-agent releases and news- kind
- chain Details and example call The filtered news feed — official releases, project announcements, and reputable RSS — by kind or chain.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_news", "arguments": { "chain": "Base" } } } - kind
-
get_metrics
Read-only Live ecosystem numbers, read from chain- token_limit Details and example call Live ecosystem metrics: the ERC-8004 registered-agent count (read from Ethereum mainnet) and the curated project-token index.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_metrics", "arguments": {} } } -
get_changes
Read-only Sync a copy of the directory- since
- detail Details and example call What changed since a date — additions, per-resource events, retirements. Keep a local copy in sync without re-fetching the whole catalog.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_changes", "arguments": { "since": "2026-09-01" } } } - since
-
get_agent_economy
Read-only Measure the onchain agent economy- venue
- chain
- include_platforms
- detail Details and example call What is actually happening on-chain across the agent venues we track — registries, launchpads, payment rails, account infrastructure — measured weekly per venue, per chain and per lifecycle stage. Every figure carries its evidence tier, method and sample size, and nothing in the payload can be added up.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_agent_economy", "arguments": { "venue": "erc8004" } } } - venue
-
search_skills
Read-only Check what a crypto agent skill does before installing it- query
- registry
- flag
- slug Details and example call Crypto-relevant agent skills from ClawHub and skills.sh with their static disclosures — hosts contacted, key generation, credential requests, remote-to-shell. Filter by registry, flag or text. A disclosure describes; it never says safe.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_search_skills", "arguments": { "query": "wallet" } } } - query
-
get_trend
Read-only Is this going up or down?- mode
- venue
- chain
- stage Details and example call Is this going up or down? A bounded series (≤30 points) for one venue, one chain and one stage — each point with its date, value, sample size and method. Never blended across chains; a null point is unknown, not zero.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_trend", "arguments": { "venue": "erc8004", "stage": "registered" } } } - mode
-
explain_number
Read-only Where does this number come from?- slug Details and example call Where does this number come from? One finding from the State of Onchain Agents report — figure, stage, method, sample, as-of date, the query that reproduces it, and its citable /numbers page.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_explain_number", "arguments": { "slug": "<slug from satohub.ai/numbers>" } } } -
get_sdk_lineage
Read-only Which line of an SDK is current, and what replaces it- package
- version
- ecosystem Details and example call Which line of an SDK is current? A package (and version) in; its status (current, legacy, deprecated), what replaces it, the vendor's migration guide and the breaking changes that make old code fail, each with its source and date, plus what npm or PyPI showed and where it disagrees.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_sdk_lineage", "arguments": { "package": "x402" } } } - package
-
get_contract_facts
Read-only Canonical contract addresses and ids, with source and date- chain
- contract
- protocol
- token
- +2 Details and example call A canonical address or id with its source and date: Uniswap, Safe, Multicall3, ERC-4337 and ERC-8004 deployments, the USDC contract and CCTP domain Circle states, x402 default stablecoins, a chain's registry entry. Testnets left out; where two sources disagree both claims are kept.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_contract_facts", "arguments": { "chain": "base" } } } - chain
-
get_chain_card
Read-only One dated card of facts for a chain- chain Details and example call One dated card per chain: registry entry, USDC and CCTP domain, ERC-8004 registry, which public RPC endpoints support state-override calls and eth_simulateV1, which x402 facilitators list it, and reported activity with its source. No rank, no score.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_chain_card", "arguments": { "chain": "base" } } } -
get_x402_facilitators
Read-only Which x402 facilitators list a chain, scheme and version- chain
- scheme
- x402_version Details and example call Which x402 facilitators list a chain, scheme and protocol version, when each last answered, and which could not be read (key wall, unreachable), so an empty list is never mistaken for a full check.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_x402_facilitators", "arguments": { "chain": "base" } } } - chain
-
get_data_freshness
Read-only How fresh is the data behind each answer- surface Details and example call How fresh is this number? Per data surface — directory activity, news, Sato Score, liveness checks, agent-economy measurements, x402, skills and more — the last successful collection read from the pipeline ledger, the last attempt and how it ended, the expected cadence, and whether it is late (older than 1.5× that cadence). No recorded success is unknown, never an invented date.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_data_freshness", "arguments": { "surface": "sato_score" } } }
◇
Knowledge
Plain explainers for crypto-agent concepts.
2
-
get_wiki_page
Read-only Explain a crypto-agent concept- slug Details and example call A full wiki explainer by slug — summary, how it works, key components, risks, related resources.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_get_wiki_page", "arguments": { "slug": "what-are-mcps" } } } -
list_wiki_pages
Read-only See what concepts are explained No inputs Details and example call Every wiki page with its title, keyword, and summary.{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_list_wiki_pages", "arguments": {} } }
⬢
x402 Merchants
Find a paid API your agent can pay per call.
1
-
find_x402_service
Read-only Find a paid x402 service for a need, ranked by observed evidence- need
- category
- chain
- max_price_usd Details and example call Describe the paid API or data service an agent needs and get indexed x402 services back, ranked by what Sato Hub observed (x402-style payments from outside payers, then whether the URL answered HTTP 402), each with its readings, dated, and a link to its canonical page. Zero matches return guidance, never an invented hit.
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_agent_find_x402_service", "arguments": { "need": "token prices", "chain": "Base" } } } - need
How the tools behaveShowHide
Most tools only read. 4 can change Sato Hub state: watch creates a monitor, submit_project queues a submission, register_agent creates or pends a self-reported passport, and swap in build-tx mode records a receipt for an unsigned transaction. Submissions and registrations land in the queues the website forms feed, reviewed the same way. No transaction is ever signed here.
The one most worth a confirm prompt is onchain_agent_swap (Sato Swap). It declares readOnlyHint false, so a client that gates writes will ask before calling it. It still holds no keys, signs nothing and broadcasts nothing: what comes back is an unsigned transaction you sign yourself, or the rule under which one was withheld. The method.
Every list tool paginates and accepts response_format of markdown (default) or json.
Same data, same rules: the tools return what the site shows, with no new claims. Self-reported stays labelled; retired projects are never returned.
No key and no daily count. A burst of tool calls from one address can be answered HTTP 429 with Retry-After and JSON-RPC error -32029; wait the stated seconds and retry. The pricing page lists the limits.
Decision tools
Sato Route
Ask which one, and get the choice with every field it was chosen on and the date each was read.
- What should I build this agent with? build_plan
- Should I install, connect or pay this? preflight
- Where should this swap go? route_swap
- Hand me a swap I can sign. swap ▲
- Which agent should do the work? route_agent
- Where should this token launch? route_launch
- Which pool and fee tier? route_lp
- Where is the repo for this plan? scaffold_plan
- Give me this goal as runnable code. create_agent
- Tell me if this changes. watch ▲
- List my project in the directory. submit_project ▲
- Give my agent a passport. register_agent ▲ How each one choosesShowHide
Most of these return a chosen_by list: every signal, its value, and the exact field it was read from. So the answer reads as “chosen by these fields, as they read on this date” and you can re-check it. When nothing qualifies they answer unknown with a reason. build_plan composes the rest into one answer, holding no keys and signing nothing.
onchain_agent_build_plan: The whole thing in one call. A goal in plain words in; a build plan out — the stack of real listings with their scores, a deploy spec and a Preflight verdict per item, the first action when the goal implies one, and what you still have to decide.onchain_agent_preflight: Before you install, connect or pay: one repo, package, endpoint or ERC-8004 agent id in, a verdict out with one evidence line per check.onchain_agent_route_swap: Where a swap goes. Chosen by liveness, our own observed check record, verification state, then quoted price, with the Sato fee disclosed on the quote.onchain_agent_swap: A swap that can refuse. The venue chosen and its fee sentence quoted verbatim, four targets checked under your policy, a simulation run — then an unsigned transaction, or the reason there is none. Unknown refuses by default. Nothing here is signed, held or broadcast by us.onchain_agent_route_agent: Which agent does the work. Chosen by registration, whether the declared service answered a live handshake, published feedback count and liveness.onchain_agent_route_launch: Where a token launch goes. Chosen on each venue's published fee schedule, every fact carrying the page it was read from, with a prepared deploy config for the lane that documents a programmable reward split — you sign it, we never do.onchain_agent_route_lp: Which pool and fee tier, and on what evidence. Every Uniswap v3 pool we found for a pair, with the swaps and volume actually counted and the window that count covered. The fee figure is a proxy, not revenue — and impermanent loss is not modelled, which the answer says rather than hides.onchain_agent_scaffold_plan: The plan, pointing at its repo. The stack, the env names it declares and any curl-into-shell step to read first, plus the create_agent template and CLI command that generate the runnable repo. It writes no files itself: every door downloads from the same engine.onchain_agent_create_agent: The goal, as code that runs. A TypeScript agent repo from a template re-checked every night — policy file, dependency custody lock and manifest included. No template for the goal means the nearest ones, never improvised code. The goal is not stored.onchain_agent_watch: Tell me if this changes. A repo, package, endpoint or agent id, re-checked daily — mail only when the verdict moves, never on a schedule. Free while in preview.onchain_agent_submit_project: The directory stops being read-only. An agent files a project into the same queue the web form writes to, triaged the same way — probed, then listed, held, or declined with a reason. A duplicate hands back what already exists.onchain_agent_register_agent: An agent issues itself a passport: fetch the challenge, sign it with its own wallet key, call again, and the passport and manifest are live. The signature proves the key, not the product — Self-Reported either way.
Non-custodial: none of these signs, holds, moves or broadcasts funds, provides liquidity, or relays a payment. A swap route returns calldata you sign; a launch route returns a deploy config you sign, with our share of the reward split written into it in the open; an agent route returns a passport you contact yourself; a scaffold hands you files to read, with no key in them. A registration proves a claim was made on-chain and a probe proves an interface answered once. Neither proves the product works, and no route here is an endorsement or a security review.
What to ask it
Ask Sato Hub
- building an onchain or crypto AI agent that does a specific job on a specific chain
- choosing the framework, MCP server, wallet, x402 or stablecoin payment rail, or data tool for that agent
- whether a crypto-agent project is still maintained, open source, and installable, and whether Sato Hub reproduced the install
- what an install or MCP server can do with your keys and funds, before you install or connect it
- agent identity (ERC-8004, Agent Passports) and measured agent-economy numbers, each with its date
Ask elsewhere
- token prices, market data, or whether to buy, sell or hold anything
- trading, investment or financial advice
- live balances or chain state beyond what a tool response states and dates
- general crypto or blockchain explainers unrelated to building agents
Sato Hub has no token. A token using the Sato name is not ours.
Reference
QuestionsWhat people ask about this pageShowHide SourcesWhere the data comes fromShowHide Cite this pagePlain text, APA or BibTeXShowHide
Cite this page
Sato Hub. "Sato Hub MCP server." Sato Hub, updated 2026-10-19, accessed 2026-10-19. https://satohub.ai/mcp
Data last refreshed 2026-10-19; this page is rebuilt daily. Citations carry the date so a reader can tell which snapshot a claim came from. Catalog data is licensed CC-BY-4.0.
Join the Sato Hub Briefing
Sign up for the Briefing: the agents, tools, and infrastructure that actually shipped, and why they matter.