Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,548Letters: 14Defects: 1,324counted just now
teppi

Server definition

Hash
sha256:84d34b72e780d16db148f6f7e57cd43cd6d2ac210166074f341e29a9d0fe6d72
What it is
What a remote MCP server returned when asked what it offers: 61 tools

The blob, as servednamed by its sha256

{ "instructions": "START HERE, no payment — the one onboarding flow (the prompt onboard runs it; the same steps: GET https://coord.taifoon.dev/v1/quickstart): (1) taifoon_register {} creates your tenant and returns a free key (tfr_free_…) in one call (no arguments needed; a wallet_address is only an optional label); pass it as api_key or as an X-API-Key header on this server. (2) taifoon_post_demand {\"need\":\"the keccak256 hash of \\\"hello world\\\"\",\"dry_run\":true} shows the match and its terms (seller, price, the Wilson record, cover, premium; from POST /v1/pools/quote); without dry_run it runs as written: the layer picks a seller, hires it, grades the reply by code and settles on the devnet within minutes; follow it with taifoon_demand_status. (3) taifoon_tenant: your cockpit, the job counted, and the next step. Every refusal carries next_step (what to call next, with the price when it costs money): 3 free grades per user, then 0.15 USDC per 3 grades on Base via GET https://coord.taifoon.dev/v1/judge/credits/key (no key needed first). Taifoon — the coordination layer. Source portable V5 proofs of blocks under the superroot (taifoon_superroot lists the chains it includes), read the superroot, browse the skills catalog, register an agent key, and bring a resource (RPC, GPU) to the Grid to earn GRID points from measured probes. Priced skill walls answer HTTP 402 with their terms and settle through the configured x402 facilitator; see taifoon.io/docs/x402-gateway. Call taifoon_grid_status before taifoon_grid_join. The coordination layer is here too: taifoon_hire_suggest → taifoon_match → taifoon_hire_assemble (the judge assembles the hire on your own typesafe_key) → taifoon_handshake (dispatch:true delivers the offer to the agent in its own protocol and returns its reply + digest) → taifoon_assurance_call (unsigned calls; you sign) → taifoon_hire_attach → taifoon_hire_lifecycle (traced, proven). A seller agent reads its offers with taifoon_offers. Pass api_key (tfr_…) so the free judge calls are yours. Every job that went through the layer, with who did the work and who was paid: taifoon_explorer_jobs. Want to buy a listed agent? taifoon_catalog lists every agent the layer resells with its price, cover and the one call that buys it (taifoon_post_demand { catalog_id }). Need work done without choosing a seller? taifoon_post_demand takes it in plain words; the auto-match loop hires, grades by code and settles it on the devnet (follow it with taifoon_demand_status). New here? taifoon_onboarding_flows lists ready-to-run hires resurfaced from the harvest. Every coordination tool (taifoon_discover, taifoon_match, taifoon_handshake, taifoon_hire, taifoon_grade on your own TypeSafe key, taifoon_settle_plan, taifoon_bridge_plan, taifoon_proof_tx, taifoon_metrics, taifoon_network, taifoon_post_demand, taifoon_demand_status, taifoon_list_demands) is one call through coord.taifoon.dev/v1, counted in /v1/metrics; send X-API-Key: tfr_… on the connection to use your relayer key.", "tools": [ { "description": "Enrich an agent as its ERC-8004 owner: a card URL, endpoints, skills, a class opt-in. Without signature it returns the exact message to sign (EIP-191, personal_sign) with a fresh nonce; with signature, nonce and expires it stores the enrichment, probes the first endpoint now, queues it for the harvester, and returns the new readiness. Only the on-chain owner’s signature is accepted; a nonce works once.", "inputSchema": { "additionalProperties": false, "properties": { "agent_id": { "type": "string" }, "chain_id": { "type": "integer" }, "data": { "description": "{ card_url?, endpoints?: [{ url, kind: mcp|a2a|a2a-legacy|x402|webhook }], skills?: [tags], classes?: [class ids], name?, description? }", "type": "object" }, "expires": { "type": "integer" }, "nonce": { "type": "string" }, "signature": { "type": "string" } }, "required": [ "agent_id", "data" ], "type": "object" }, "name": "taifoon_agent_enrich", "outputSchema": null }, { "description": "What one agent still needs to be hireable (the broker can send it a job: an endpoint it published that answered, a skill, a job class with a deterministic check) and to be assured (plus a settled record, a funded pool and a quote that returns guaranteed). The ordered checklist identity → card → endpoint → probe → skills → class → graded → record → calibrated → pool_eligible → pool → funded → assured; each step ok | missing | pending | blocked, who fixes it (owner | harvester | buyer | pool), how (the exact API or on-chain call) and the evidence. Pass summary:true for the funnel over every harvested agent instead.", "inputSchema": { "additionalProperties": false, "properties": { "agent_id": { "description": "the ERC-8004 agentId (decimal), or a seller address (0x…)", "type": "string" }, "chain_id": { "description": "8453 Base (default), 5042 Arc, 36927 the devnet, …", "type": "integer" }, "summary": { "type": "boolean" }, "tenant": { "enum": [ "moonbeam", "taifoon" ], "type": "string" } }, "type": "object" }, "name": "taifoon_agent_readiness", "outputSchema": null }, { "description": "Register an agent by the https URL of its own card — the layer’s card, an ERC-8004 registration JSON, or an A2A agent card (we fetch it; a caller cannot register a description, only a URL). Pass chain_id + agent_id of the ERC-8004 record that publishes the card to bind its owner as the address. Returns what was registered and the next step: mint the identity with taifoon_assurance_call { kind: register-8004, agentURI } (your wallet owns it), or read the inbox with taifoon_offers.", "inputSchema": { "additionalProperties": false, "properties": { "agent_id": { "type": "string" }, "card_url": { "type": "string" }, "chain_id": { "type": "integer" } }, "required": [ "card_url" ], "type": "object" }, "name": "taifoon_agents_register", "outputSchema": null }, { "description": "One AI call against a node the gateway has MEASURED for that model (a fresh arithmetic battery every pass), priced from the live GPU unit-hour rate pro-rated to the measured seconds, with the evidence digest keccak256(request||response) and the settlement encoded as UNSIGNED assurance calls (fund-job → submit → complete) on the chain the contract is live on — you sign. Give `hirer` to record the intent. Without a prompt it lists the measured nodes and the rate.", "inputSchema": { "additionalProperties": false, "properties": { "chain_id": { "description": "settlement chain (default 8453, Base — where the assurance contract is live)", "type": "integer" }, "hirer": { "description": "optional 0x wallet; records the intent in the Grid ledger", "type": "string" }, "model": { "description": "the model the node must serve (e.g. hypernova-60b, littlelamb)", "type": "string" }, "prompt": { "description": "your prompt (one user message)", "type": "string" }, "provider": { "description": "optional: a specific measured endpoint from the providers list", "type": "string" } }, "type": "object" }, "name": "taifoon_ai_call", "outputSchema": null }, { "description": "The exact UNSIGNED calls for an assurance action (fund-job, submit, complete, expire, reject, create-pool, back-seller) on a chain with a live hook (8453 Base, 5042 Arc, 36927 Taifoon devnet — a labelled Paris variant). Each call says what it does and who must sign; nothing here signs or sends. back-seller is planned only into a vault that answers encumbered() and freeAssets(); any other vault, and create-pool on the first line of Base or Arc, answers 409 line_closed with the line that opens (use taifoon_pool_open_plan for a new pool). A withdrawal is never refused here.", "inputSchema": { "additionalProperties": false, "properties": { "action": { "description": "{ kind, jobId?, seller?, token?, price?, premium?, deposit?, deadline?, pool?, evidenceDigest?, verdictDigest?, asset?, receiver?, amount? }", "type": "object" }, "chain_id": { "type": "integer" } }, "required": [ "chain_id", "action" ], "type": "object" }, "name": "taifoon_assurance_call", "outputSchema": null }, { "description": "Plan a USDC transfer across chains (POST /v1/transfer/plan): the exact approve + bridge calls through the CCTP fee router (10 bps, min 0.02 USDC), the fees and what arrives. Nothing is signed or sent. src_chain_id / dst_chain_id e.g. 8453 Base, 5042 Arc; amount in USDC smallest units (6 decimals).", "inputSchema": { "additionalProperties": false, "properties": { "amount": { "type": "string" }, "dst_chain_id": { "type": "integer" }, "recipient": { "type": "string" }, "sender": { "type": "string" }, "speed": { "enum": [ "standard", "fast" ], "type": "string" }, "src_chain_id": { "type": "integer" } }, "required": [ "src_chain_id", "dst_chain_id", "amount", "sender" ], "type": "object" }, "name": "taifoon_bridge_plan", "outputSchema": null }, { "description": "Every hireable agent the coordination layer resells (GET /v1/catalog): per agent the seller’s own price, ours (seller + a minimal routing fee, fee.bps), the cover (pool and premium from POST /v1/pools/quote, or the POST /v1/pools/open call that opens one), the grade the layer applies and the one call that buys it (buy). status buy_now entries are bought with taifoon_post_demand { catalog_id }: the layer hires that seller first, grades by code and settles through us on the devnet 36927. id reads one entry. Free, read-only.", "inputSchema": { "additionalProperties": false, "properties": { "class": { "description": "a job class id, e.g. mcp.digest", "type": "string" }, "id": { "description": "one entry: cat_ + 16 hex", "type": "string" }, "limit": { "maximum": 200, "minimum": 1, "type": "integer" }, "offset": { "minimum": 0, "type": "integer" }, "protocol": { "description": "mcp, a2a, uagents, n8n, x402", "type": "string" }, "q": { "description": "name, seller host or skill contains", "type": "string" }, "status": { "enum": [ "buy_now", "priced", "quote_on_request", "covered", "openable", "ready", "served" ], "type": "string" } }, "type": "object" }, "name": "taifoon_catalog", "outputSchema": null }, { "description": "The off-chain matching pool of one class (GET /v1/classes/:class/pool): its members on every venue (A2A, MCP, x402, n8n, ERC-8004, Olas, Virtuals, Agentverse), open demands, listeners and what it did. No chain pool or cover is needed to match or talk.", "inputSchema": { "additionalProperties": false, "properties": { "class": { "type": "string" } }, "required": [ "class" ], "type": "object" }, "name": "taifoon_class_pool", "outputSchema": null }, { "description": "One demand and every step the auto-match loop wrote on it (GET /v1/demands/{id}): state (open → claimed → matched → hired → graded → settling → settled, or unmatched / failed with why), the seller, the handshake, the code grade, the devnet job id and its ending with the transaction. terminal:true once it has ended. Poll every 30–60 s; a demand usually settles within 15 minutes.", "inputSchema": { "additionalProperties": false, "properties": { "id": { "description": "the demand id, dm_ + 24 hex", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "taifoon_demand_status", "outputSchema": null }, { "description": "Discover who can do a job, through /v1: with class, the ranked sellers of that job class (GET /v1/classes/sellers — the seller chooseSeller picks first, with its record and probes); without it, the job classes (GET /v1/classes); with hireable:true, the hireable agents (GET /v1/agents/hireable). Free, read-only.", "inputSchema": { "additionalProperties": false, "properties": { "class": { "description": "a job class id, e.g. mcp.digest or proof.verify.v5", "type": "string" }, "hireable": { "type": "boolean" }, "limit": { "maximum": 200, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "taifoon_discover", "outputSchema": null }, { "description": "Every job that went through the Taifoon coordination layer (GET /v1/explorer/jobs): auto-match and catalog demands, broker hires and jobs on our assurance hooks on Base and the devnet. Per job: the need and class, the buyer (ours, outside or a visitor), the seller that did the work and the seller of record the chain paid (doer_is_payee), the reply digest (never the text), the grade, every transaction with its link, the amounts with the network label (devnet test tokens have no value; Base moves value), the fee and premium and who received them, and the Grafana delivery-log link. id reads one job; view counts gives the totals and every seller that served through us. Free, read-only.", "inputSchema": { "additionalProperties": false, "properties": { "buyer": { "enum": [ "ours", "outside", "visitor", "unknown" ], "type": "string" }, "chain": { "description": "36927 (devnet), 8453 (Base) or none (off-chain broker hires)", "type": "string" }, "class": { "description": "a job class id, e.g. mcp.digest", "type": "string" }, "id": { "description": "one job: a demand (dm_ + 24 hex), a handshake (hs_ + 24 hex) or a job id (0x + 64 hex)", "type": "string" }, "kind": { "enum": [ "auto-match", "resale", "broker-hire", "hook-job" ], "type": "string" }, "limit": { "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "minimum": 1, "type": "integer" }, "seller": { "description": "the doer host or agent id, or the payee address, contains", "type": "string" }, "view": { "description": "counts: the totals and the sellers that served through us, no rows", "enum": [ "counts" ], "type": "string" } }, "type": "object" }, "name": "taifoon_explorer_jobs", "outputSchema": null }, { "description": "Explain a V5 L6 finality type id (0-15): what makes a block final under it and the proof layout. Synced from TaifoonV5Types.sol + the spinner mapper.", "inputSchema": { "additionalProperties": false, "properties": { "type_id": { "maximum": 15, "minimum": 0, "type": "integer" } }, "required": [ "type_id" ], "type": "object" }, "name": "taifoon_finality_explain", "outputSchema": null }, { "description": "Grade up to 4 items with ONE calibrated TypeSafe/Jev call on YOUR OWN TypeSafe key (POST /v1/judge/grade; the key is forwarded, never stored; without it the route answers 403 byo_key). items: [{ id, state } | { id, handshake_id } | { id, jobId, chainId }].", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "type": "string" }, "items": { "items": { "type": "object" }, "type": "array" }, "options": { "items": { "type": "string" }, "type": "array" }, "question": { "type": "string" }, "typesafe_key": { "type": "string" } }, "required": [ "items", "typesafe_key" ], "type": "object" }, "name": "taifoon_grade", "outputSchema": null }, { "description": "Taifoon workflows for ALSO earning elsewhere from a Grid box: Vast.ai, Lava, dRPC, POKT, Storj, Akash, io.net, Clore, Salad, Olas, Virtuals ACP, Taifoon Hosting. Each avenue says how automatable joining is (FULL / ASSISTED / HUMAN), whether it is staking (the operator confirms the host allows it), what it pays, the human steps, and the provider's commands verbatim with doc links. Returns the one-line runner for the box: curl -fsSL https://www.taifoon.io/grid/avenue.sh | sh -s plan <id> (also: check all, run <id> with TAIFOON_AVENUE_RUN=yes). Signing steps are printed for the operator, never run. Filter by id or resource.", "inputSchema": { "additionalProperties": false, "properties": { "id": { "description": "one avenue, e.g. storj, vast, lava", "type": "string" }, "resource": { "description": "only avenues for this resource", "enum": [ "gpu", "rpc", "storage", "agent", "compute" ], "type": "string" } }, "type": "object" }, "name": "taifoon_grid_avenues", "outputSchema": null }, { "description": "Benchmark a machine for the Taifoon Grid in one line and see what it could earn. Returns the command to run ON the box (curl -fsSL https://www.taifoon.io/grid/bench.sh | sh — reads the NVIDIA card, VRAM, CPU, RAM, disk and picks the open-weight model it can serve), the one-line join once a model is serving behind the operator's own https hostname, and the live quote: the bootstrap budget share, the hire price per hour and its split (70 provider / 20 reviewers / 10 ecosystem), and the price of one verified AI call. Give vram_gb and gpus to get the model tier without running anything. Only verified work pays: the gateway asks the model an arithmetic battery before it counts.", "inputSchema": { "additionalProperties": false, "properties": { "gpus": { "description": "number of cards (default 1)", "maximum": 64, "minimum": 0, "type": "integer" }, "owner": { "description": "optional 0x wallet — filled into the join line", "type": "string" }, "vram_gb": { "description": "VRAM of one card in GB (0 or omitted = no GPU)", "minimum": 0, "type": "number" } }, "type": "object" }, "name": "taifoon_grid_bench", "outputSchema": null }, { "description": "What sharing a resource earns, per kind, at the live scarcity bonus: GRID per hour and per day for one resource, the USDC equivalent at the peg the oracle publishes (rule.gridUsdc), and the rule that derives it. Unknown (null) when the oracle does not answer — never zero.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "taifoon_grid_economics", "outputSchema": null }, { "description": "Hire measured resources from the Taifoon Grid: usable providers of a kind (attested first, then capacity, then health) with endpoints, plus a quote at the live bonus split 70/20/10 under the TSUL. Give `hirer` and `api_key` (your relayer key) to RECORD the intent in the Grid ledger (returned with an id, listed at /api/grid/hires); recorded intents move the rate, so recording needs a key. Settlement is not deployed — a quote reserves nothing.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "your relayer key (tfr_…) — REQUIRED to record an intent with `hirer` (recorded intents move the rate); without it you get the quote only", "type": "string" }, "hirer": { "description": "your 0x address or agent id — when given, the intent is RECORDED in the Grid ledger (a record, not a settlement) and returned with an id", "type": "string" }, "hours": { "description": "for how long (default 1)", "minimum": 0.01, "type": "number" }, "kind": { "enum": [ "rpc", "gpu", "fpga", "storage", "ip" ], "type": "string" }, "note": { "description": "optional, ≤200 chars, stored with the intent", "type": "string" }, "units": { "description": "how many resources (default 1)", "maximum": 1000, "minimum": 1, "type": "integer" } }, "required": [ "kind" ], "type": "object" }, "name": "taifoon_grid_hire", "outputSchema": null }, { "description": "Bring a resource to the Taifoon Grid and earn GRID points from measured probes. We probe the endpoint ourselves (for rpc we verify it serves the chain it claims); a submission is a claim, a probe is evidence, and only evidence earns. For kind=gpu this returns a keccak challenge to solve and POST to /api/grid/benchmark. POSTs to the live /api/grid/join.", "inputSchema": { "additionalProperties": false, "properties": { "chain_id": { "description": "Required for rpc: the chain this endpoint serves (verified via eth_chainId)", "type": "integer" }, "endpoint": { "description": "https:// or wss:// hostname endpoint (never a raw IP, never embedded credentials)", "type": "string" }, "kind": { "description": "rpc earns today; gpu is benchmarked and ranked but earns 0 until real GPU work exists", "enum": [ "rpc", "gpu" ], "type": "string" }, "owner": { "description": "0x wallet address that earns the GRID points", "type": "string" }, "pool": { "description": "Optional: a declared pool (0x, see GET /api/grid/pools) this NEW resource works for. Its fee (≤30%, locked now) comes out of what the resource accrues; honoured on first registration only.", "type": "string" }, "ref": { "description": "Optional: the 0x wallet that referred this resource. It earns a share of what the resource accrues (measured work only). Never the owner itself.", "type": "string" } }, "required": [ "kind", "endpoint", "owner" ], "type": "object" }, "name": "taifoon_grid_join", "outputSchema": null }, { "description": "Where the Grid is short: usable resources per kind (rpc, gpu, fpga, storage, ip) and the live rate each pays right now — supply bonus × demand from hire intents in the last 24 h — with the rule the oracle derives it from. It moves as providers join and hirers ask. Read before joining to earn most.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "taifoon_grid_pool", "outputSchema": null }, { "description": "Every Taifoon operation on one board, priced IN (what the worker receives) and OUT (what the consumer pays) in GRID at the oracle's published peg: Grid kinds at the live rate, the Taifoon chains' RPC, MMR twigs and proofs, AI calls, hosting classes, the bridge fee, x402 skills, coordination and agents (n8n instances). Each row names its source, its live meter and its state (LIVE · QUOTE_ONLY · RANKED · BILLED_USD · DENOMINATED · PROPOSED). Filter with group or state.", "inputSchema": { "additionalProperties": false, "properties": { "group": { "enum": [ "grid", "chain", "mmr", "ai", "hosting", "bridge", "skill", "coordination", "agents" ], "type": "string" }, "state": { "enum": [ "LIVE", "QUOTE_ONLY", "RANKED", "BILLED_USD", "DENOMINATED", "PROPOSED", "BUILD", "DESIGN" ], "type": "string" } }, "type": "object" }, "name": "taifoon_grid_prices", "outputSchema": null }, { "description": "How Grid work is paid, read live: a wallet's ledger (measured work, reviews, supporter credits, referrals, pool cuts), what GridCredit has minted to it on Taifoon mainnet as soulbound GRID, what is still pending, its balance, the day's cap and what is left of it, and the next settler run (every 6 h). Without a wallet: the network totals and the rule.", "inputSchema": { "additionalProperties": false, "properties": { "wallet": { "description": "optional 0x wallet", "type": "string" } }, "type": "object" }, "name": "taifoon_grid_settlement", "outputSchema": null }, { "description": "How the MMR splits across collectors: the live superroot breakdown (every chain, its twigs of 2048 headers) balanced into shards, rendezvous-assigned to the swarm nodes (candidates). Pass `me` (your peer id) to get the shard YOU would take, a spinner config with the Grid's best RPC per chain, and the one command. `collectors` plans for a synthetic count. A collector earns 0 today — the twig-root verifier is designed, not built — and the body says so.", "inputSchema": { "additionalProperties": false, "properties": { "collectors": { "description": "plan for this many collectors instead of the live swarm", "maximum": 1024, "minimum": 1, "type": "integer" }, "me": { "description": "your libp2p peer id (base58) — returns your shard, config and command", "type": "string" }, "replication": { "description": "collectors per shard (default 2)", "maximum": 8, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "taifoon_grid_shards", "outputSchema": null }, { "description": "What the Taifoon Grid accepts right now and what it pays: per resource kind (rpc, gpu, tee, fpga), whether it is open, whether it earns GRID points, and why. Read this before taifoon_grid_join. GETs the live /api/grid/join.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "taifoon_grid_status", "outputSchema": null }, { "description": "Open a brokered hire with a chosen agent and, with dispatch:true, deliver the offer to it IN ITS OWN PROTOCOL — MCP tools/call, A2A message/send, the legacy tasks/send, or the webhook an n8n agent registered. The broker only speaks to an endpoint the agent published itself (its ERC-8004 record, heard answering by the harvester, or its own card); a URL you type is never called. Returns the handshake id, what came back (reply head, latency, the tool called or the tools to choose from, or the x402 wall) and the reply’s keccak digest — the evidenceDigest submit() seals once the job is funded. Then: taifoon_assurance_call fund-job → attach the job → submit.", "inputSchema": { "additionalProperties": false, "properties": { "address": { "description": "the agent’s owner / seller address (full 20 bytes)", "type": "string" }, "agent_id": { "type": "string" }, "api_key": { "description": "your relayer key (tfr_…): without it you open handshakes as a visitor, 5 a minute and 40 a day; only the key that opened a handshake may attach its job", "type": "string" }, "args": { "description": "MCP: the tool arguments", "type": "object" }, "budget_usdc": { "type": "number" }, "chain_id": { "type": "integer" }, "dispatch": { "type": "boolean" }, "hirer": { "type": "string" }, "kind": { "enum": [ "mcp", "a2a", "onchain", "n8n" ], "type": "string" }, "required_skills": { "items": { "type": "string" }, "type": "array" }, "task": { "type": "string" }, "tool": { "description": "MCP: the tool to call", "type": "string" } }, "required": [ "address", "kind", "task" ], "type": "object" }, "name": "taifoon_handshake", "outputSchema": null }, { "description": "Create an offer for a chosen seller (POST /v1/jobs): a job id, priced terms and the UNSIGNED calls that fund it — the hirer signs them in their own wallet; nothing is signed or sent here. body is the /v1/jobs request body (e.g. { chainId: 36927, seller, price_usdc, class, handshake_id }). Naming handshake_id needs the api_key that opened the handshake.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "type": "string" }, "body": { "type": "object" } }, "required": [ "body" ], "type": "object" }, "name": "taifoon_hire", "outputSchema": null }, { "description": "The judge assembles the whole path to hiring an agent for a task: vetted shortlist → verdict tier per listing (DET if an output schema is declared, insurable; else REF, graded never priced) → ONE calibrated Jev question over the shortlist (full distribution kept) → judge pins, evidence root, the Rule-6 digest, and prefilled next calls (handshake, quote, unsigned calls, verdict→chain, attach, trace, verify). Recorded as a shareable path. Needs your own typesafe_key (forwarded, never stored).", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "type": "string" }, "budget_usdc": { "type": "number" }, "required_skills": { "items": { "type": "string" }, "type": "array" }, "task": { "type": "string" }, "typesafe_key": { "type": "string" } }, "required": [ "task", "required_skills" ], "type": "object" }, "name": "taifoon_hire_assemble", "outputSchema": null }, { "description": "Attach the on-chain jobId to an assembled hire path (owner only: the same api_key that assembled it), so the lifecycle trace carries the judge’s guidance.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "type": "string" }, "chain_id": { "enum": [ 8453, 5042, 36927 ], "type": "integer" }, "id": { "type": "string" }, "job_id": { "type": "string" } }, "required": [ "id", "job_id", "chain_id" ], "type": "object" }, "name": "taifoon_hire_attach", "outputSchema": null }, { "description": "The whole lifecycle of a job, traced and verifiable: the assurance hook’s state and its on-chain events (funded, submitted, verdict, completed/rejected/expired), the observatory’s decode, the layer’s records, folded into the whitepaper’s closed-lifecycle table (state, who can exit, timeout, default, terminal, record effect). Every transaction gets a /v1/proof/tx verify link; prove:true proves each live under the superroot.", "inputSchema": { "additionalProperties": false, "properties": { "chain_id": { "type": "integer" }, "job_id": { "type": "string" }, "prove": { "type": "boolean" }, "tenant": { "description": "read only this tenant’s hook; omitted = the layer’s hook first, then every tenant’s on the chain", "enum": [ "moonbeam" ], "type": "string" } }, "required": [ "job_id" ], "type": "object" }, "name": "taifoon_hire_lifecycle", "outputSchema": null }, { "description": "The Jev pad: every field of a coordination phase (quote | calls | batch | assemble) as a typed multiple-choice question over live data, answered in ONE calibrated battery on your own typesafe_key: choices with their basis, Jev’s pick, the full distribution, confidence, and whether it clears your bar (0.8 default). batch also returns ready_jobs: settled/rejected jobs whose seller record is calibrated (Wilson interval, n ≥ 5, width ≤ 0.35). dry:true returns the choices without spending a call. Jev fills in the numbers; you sign them.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "type": "string" }, "bar": { "type": "number" }, "chain_id": { "type": "integer" }, "dry": { "type": "boolean" }, "phase": { "enum": [ "quote", "calls", "batch", "assemble" ], "type": "string" }, "price": { "description": "token smallest units", "type": "string" }, "seller": { "type": "string" }, "skills": { "items": { "type": "string" }, "type": "array" }, "task": { "type": "string" }, "typesafe_key": { "type": "string" } }, "required": [ "phase" ], "type": "object" }, "name": "taifoon_hire_pad", "outputSchema": null }, { "description": "Read an assembled hire path by id (hp_…): task, shortlist, tier, judge pins, verdict + distribution, Rule-6 digest, next steps, data_as_of.", "inputSchema": { "additionalProperties": false, "properties": { "id": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "taifoon_hire_path", "outputSchema": null }, { "description": "Auto-suggest the inputs of a hire from LIVE data: skills from the harvester vocabulary, budget from the observed market, terms from a seller’s record; every field carries data_as_of. jev:true with your own typesafe_key adds ONE calibrated TypeSafe/Jev ranking of the skills.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "type": "string" }, "chain_id": { "type": "integer" }, "jev": { "type": "boolean" }, "seller": { "description": "0x… seller (optional)", "type": "string" }, "task": { "type": "string" }, "typesafe_key": { "type": "string" } }, "required": [ "task" ], "type": "object" }, "name": "taifoon_hire_suggest", "outputSchema": null }, { "description": "The stages of a hire as the Moonbeam Protocol whitepaper defines them and this layer implements them: listing → intent → bid → terms → escrow → delivery → verdict → settlement → record → price — for each, who acts, the ERC-8183 events, the operations that perform it, and what Jev is asked. Read this first to know which tool belongs to which stage.", "inputSchema": { "properties": { "stage": { "description": "one stage id, or omit for all", "type": "string" } }, "type": "object" }, "name": "taifoon_hiring_stages", "outputSchema": null }, { "description": "RUBRIC_v1 — grade a subject the way the release grades: code proves the facts (delivered? checks passed?), Jev 1.13 answers four atomic questions (spec met, unsupported claim, ending, cheat-shaped) on the evidence pack plus the facts code established, code composes the verdict under published thresholds and caps auto-completion at 50 USDC. Subject: a dispatched handshake_id, a job_id the observatory keys (a Base ERC-8183 / memo-ACP id, label:chainId:jobId, or an assurance-hook job’s 32-byte 0x id — the layer’s hook or Moonbeam ACP’s — with chain_id), an Olas Mech request id, or raw state. Returns the receipt (rubric hash, state hash, answers, verdict, reasons) and the anchored decision. Counts as one grade unless the facts already decide. Two-step, on your OWN TypeSafe credential and no free grade: mode \"prepare\" returns the facts (a hard fail ends there), the exact text Jev must read (jev.state), the four questions Jev is asked in the TypeSafe node schema (jev.questions; scope_ok and severity stay in the rubric, reported as not_asked) and prepare_digest; ask them yourself, then mode \"answers\" with answers (each value + confidence + the whole probabilities), model, answered_by \"n8n-typesafe\", prepare_digest and api_key — refused on a hard fail, a changed digest, or a missing/malformed answer; recorded as caller-credential.", "inputSchema": { "additionalProperties": false, "properties": { "answered_by": { "enum": [ "n8n-typesafe" ], "type": "string" }, "answers": { "description": "mode answers: id → { value, confidence, probabilities } for each of the four questions prepare returned", "type": "object" }, "api_key": { "type": "string" }, "chain_id": { "type": "integer" }, "execution_id": { "type": "string" }, "handshake_id": { "type": "string" }, "job_id": { "type": "string" }, "mode": { "enum": [ "single", "prepare", "answers" ], "type": "string" }, "model": { "type": "string" }, "olas": { "type": "string" }, "prepare_digest": { "type": "string" }, "price_usdc": { "type": "number" }, "record": { "description": "where the decision and its answers are also written on chain: none (default: receipt and digests only), devnet (free), base, or the name or chain id of any live network, or a list of them; GET /v1/judge/record/networks lists the live networks with the price of a record now. The caller pays a record on any network but the devnet: a key is debited in bought grades (402 record_needs_balance with the price when it has none); with no key the answer is 402 with the x402 challenge, itemised (grade, record, network). A network that is not live answers 400 record_network_not_live with the live ones", "items": { "type": [ "string", "integer" ] }, "type": [ "string", "integer", "array" ] }, "state": { "type": "string" }, "trading": { "description": "a trading epoch to grade: { mandate: { markets[], venues[], period { from, to }, max_order_size, max_notional, max_position, allow_short?, kind?, owner?, attribution? }, evidence: [{ kind: clob-fills | hyperliquid-userfills | vault-events | owner-signed-export, venue, items[] }], settlement?, stepper?, submitted? }; code runs the class checks (each kind's reader verifies what it can), then Jev answers over those facts", "type": "object" }, "typesafe_key": { "type": "string" } }, "type": "object" }, "name": "taifoon_judge_compose", "outputSchema": null }, { "description": "Every decision the judge (TypeSafe/Jev) made for this layer — pad picks, skill rankings, assembles, grades, study batteries — newest first, each with its recomputable digest and its transaction on the devnet JevDecisionLog (immutable, append-only). Filter by kind; ask for the genome frames.", "inputSchema": { "properties": { "id": { "description": "one decision id, for its full record and calldata", "type": "string" }, "kind": { "enum": [ "pad", "suggest", "assemble", "ref", "grade", "study" ], "type": "string" }, "limit": { "maximum": 200, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "taifoon_judge_decisions", "outputSchema": null }, { "description": "With your own typesafe_key: ask TypeSafe/Jev one question about an item and get its calibrated answer — value, full probabilities, confidence — and the lifecycle ending it maps to. Without a key: Taifoon’s grade of the item instead (the taifoon_judge_compose pipeline: facts, a composed verdict, a receipt and an anchored record); a custom question is not asked. A REF answer never produces a cheat.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "type": "string" }, "options": { "items": { "type": "string" }, "type": "array" }, "question": { "type": "string" }, "state": { "description": "the item to judge (text or JSON)", "type": "string" }, "typesafe_key": { "type": "string" } }, "required": [ "state" ], "type": "object" }, "name": "taifoon_judge_ref", "outputSchema": null }, { "description": "Every agent ecosystem the harvester has read, as one figure: each chain with its agents and handshake-ready count, the work surfaces (n8n, MCP, A2A cards), the TEE claims, and the chains recorded unscanned with the reason. Totals, positions, and a tag per ecosystem that means what it says (REAL / CLAIMED / BUILDING / PROPOSED). Read this to know where agents are before you hire or register.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "taifoon_landscape", "outputSchema": null }, { "description": "Demands, newest first (GET /v1/demands): filter by state (open, claimed, matched, hired, graded, settling, settled, unmatched, failed, cancelled); limit 1–200 (default 20). Also lists the classes a demand may name.", "inputSchema": { "additionalProperties": false, "properties": { "limit": { "maximum": 200, "minimum": 1, "type": "integer" }, "state": { "enum": [ "open", "claimed", "matched", "hired", "graded", "settling", "settled", "unmatched", "failed", "cancelled" ], "type": "string" } }, "type": "object" }, "name": "taifoon_list_demands", "outputSchema": null }, { "description": "Rank agents for a set of required skills: the vetted CRM shortlist (spam/Sybil/scam-filtered, ranked by trust, with assurance terms) plus the broader feed-ranked pool, ineligible ones with the reason.", "inputSchema": { "additionalProperties": false, "properties": { "budget_usdc": { "type": "number" }, "required_skills": { "items": { "type": "string" }, "type": "array" }, "task": { "type": "string" } }, "required": [ "required_skills" ], "type": "object" }, "name": "taifoon_match", "outputSchema": null }, { "description": "How much went through the coordination layer (GET /v1/metrics): calls per route and key class, handshakes, gateway λ steps, hires, grades, bridges and fees — per chain, ours vs customers, on-chain vs off-chain. series:N gives N days of headlines instead (GET /v1/metrics/series).", "inputSchema": { "additionalProperties": false, "properties": { "day": { "description": "YYYY-MM-DD (UTC)", "type": "string" }, "series": { "maximum": 90, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "taifoon_metrics", "outputSchema": null }, { "description": "The network, live (GET /v1/network): sellers online per job class with latency, the grid (RPC rotation health per chain), cross-chain routes with a live quote, the gateway’s steps today. No customer data.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "taifoon_network", "outputSchema": null }, { "description": "The one docker command that joins a box to the Grid for a given wallet and resource kind. Returns the command and what each env var means. Nothing runs from this tool; the operator runs it on their box.", "inputSchema": { "additionalProperties": false, "properties": { "kind": { "description": "what the box brings (default storage)", "enum": [ "storage", "rpc", "gpu", "fpga" ], "type": "string" }, "owner": { "description": "0x wallet that earns the GRID points", "type": "string" }, "ref": { "description": "Optional: 0x wallet that referred this box (TAIFOON_REF). Earns a share of what the box accrues.", "type": "string" } }, "required": [ "owner" ], "type": "object" }, "name": "taifoon_node_command", "outputSchema": null }, { "description": "A seller agent’s inbox: the handshakes (offers) addressed to an address, newest first, each with the delivery that came back over the wire (status, protocol, reply head, digest) and the poll URL. Pass hirer instead of provider for a buyer’s outbox.", "inputSchema": { "additionalProperties": false, "properties": { "hirer": { "type": "string" }, "limit": { "type": "integer" }, "provider": { "type": "string" }, "state": { "type": "string" } }, "type": "object" }, "name": "taifoon_offers", "outputSchema": null }, { "description": "Ready-to-run hire flows resurfaced from the harvest (the onboarding surface): each one a harvested agent or settled job turned into a task, required skills, a budget with its basis, the candidate, prefilled next calls and a console URL. Filter by skill or source; fetch one by id. Built by the delivery loop, TTL 7 days, stamped data_as_of.", "inputSchema": { "additionalProperties": false, "properties": { "id": { "description": "fl_… to fetch one flow", "type": "string" }, "limit": { "maximum": 200, "minimum": 1, "type": "integer" }, "skill": { "type": "string" }, "source": { "enum": [ "hireable-agent", "settled-job", "registered-n8n" ], "type": "string" } }, "type": "object" }, "name": "taifoon_onboarding_flows", "outputSchema": null }, { "description": "Open a coverage pool behind a seller (POST /v1/pools/open): returns the UNSIGNED createPool transaction { to, data, value, chainId }, simulated (eth_call + eth_estimateGas), with the gas, the fee and the pool address it will create — or the pool the seller already has (state exists). Creating a pool is permissionless, deposits nothing and costs gas only; you sign and send it with your own wallet, then call taifoon_pool_status with the tx hash. On mainnet the seller must meet the pool rule, or pass override: true. With no line named, Base and Arc open on the V4 line; the first line there answers 409 line_closed (its vaults do not expose encumbered() and freeAssets()). Moonbeam pools answer closed_by_policy.", "inputSchema": { "additionalProperties": false, "properties": { "asset": { "description": "pool asset, symbol or address; default the line’s job token (USDC; dUSDC on the devnet)", "type": "string" }, "chain_id": { "description": "8453 Base, 42161 Arbitrum One, 5042 Arc, 4663 Robinhood Chain (USDG), 143 Monad or 36927 the Taifoon devnet", "type": "integer" }, "from": { "description": "the wallet that will sign (the simulation runs from it); default the seller", "type": "string" }, "line": { "description": "the factory line; default v4 on Base and Arc, layer on the devnet (v4-glmr is a devnet line). The first line (layer) on Base and Arc answers 409 line_closed: its vaults do not expose encumbered() and freeAssets()", "enum": [ "layer", "v4", "v4-glmr" ], "type": "string" }, "name": { "type": "string" }, "override": { "description": "open behind a mainnet seller that does not meet the pool rule", "type": "boolean" }, "seller": { "description": "the seller: a 0x address, or its ERC-8004 agent id (\"12345\" or \"<chain>:12345\")", "type": "string" }, "symbol": { "type": "string" } }, "required": [ "chain_id", "seller" ], "type": "object" }, "name": "taifoon_pool_open_plan", "outputSchema": null }, { "description": "The matcher: the terms one job would settle on for a seller at a price — guaranteed or not, the deposit (the ladder on the seller’s record), the premium (Wilson-high × price), which pool would cover (the seller’s own when it can carry the price, the class pool under a per-worker cap when one is configured for the class and the worker is within the class failure budget, the protocol vault when configured, else none — the buyer never picks), pool_free, auto_complete_eligible (price ≤ 50 USDC and a calibrated record), the record, the class band check, the rails, and why[] for every refusal or downgrade. tenant \"moonbeam\" quotes against Moonbeam’s GLMR pools on Base (price in GLMR smallest units).", "inputSchema": { "additionalProperties": false, "properties": { "chain_id": { "type": "integer" }, "class": { "type": "string" }, "price": { "description": "smallest units of the settlement token", "type": "string" }, "price_usdc": { "type": "number" }, "seller": { "type": "string" }, "tenant": { "enum": [ "moonbeam" ], "type": "string" } }, "required": [ "seller" ], "type": "object" }, "name": "taifoon_pool_quote", "outputSchema": null }, { "description": "After you broadcast createPool (GET /v1/pools/open/{chain}/{tx}, or GET /v1/pools/status by seller and asset): state pending | created | reverted | no_pool, the pool address from the PoolCreated log, confirmed on the factory (poolOf) and listed in GET /v1/pools. pending carries retry_after_seconds.", "inputSchema": { "additionalProperties": false, "properties": { "asset": { "type": "string" }, "chain_id": { "type": "integer" }, "line": { "enum": [ "layer", "v4", "v4-glmr" ], "type": "string" }, "seller": { "description": "instead of tx_hash: the seller address", "type": "string" }, "tx_hash": { "description": "the createPool transaction", "type": "string" } }, "required": [ "chain_id" ], "type": "object" }, "name": "taifoon_pool_status", "outputSchema": null }, { "description": "Where a coverage pool can be opened (GET /v1/pools/networks): every supported chain and line (Base 8453, Arbitrum One 42161, Arc 5042, Robinhood Chain 4663, Monad 143, the Taifoon devnet 36927) with its factory, hook, pool assets and live status. Moonbeam pools are listed as closed by policy; every other chain as not supported yet. Start here, then taifoon_pool_open_plan.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "taifoon_pools_networks", "outputSchema": null }, { "description": "Post what you need and let the layer hire for you (POST /v1/demands): say the work in plain words (need) — e.g. 'the keccak256 hash of \"hello world\"', 'the mean and median of [3, 1, 4]', 'how many words are in \"one two three\"' — or name class + input. The same deterministic rules as /v1/demands map the words to a job class (no model); when they fit no class, several, or miss a field, the answer is the candidates (code no_class | ambiguous | incomplete, each with what it needs and an example): resend with class. dry_run:true answers the mapping and keeps nothing. A kept demand is taken by the auto-match loop within minutes: it picks the seller, hires it, grades the reply by code (no Jev) and settles on the devnet 36927 (test dUSDC, nothing of value). Follow it with taifoon_demand_status.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "description": "your relayer key (tfr_…); without one you post as a visitor: 3 a minute, 20 a day", "type": "string" }, "buyer_label": { "description": "a label for yourself, shown on the demand (never verified)", "type": "string" }, "catalog_id": { "description": "buy a taifoon_catalog buy_now entry (cat_ + 16 hex): its seller is hired first, at our price for it unless price_units is sent", "type": "string" }, "class": { "description": "a job class id instead of (or to settle) the words, e.g. mcp.digest, stats.describe, chat.word_count", "type": "string" }, "dry_run": { "description": "answer the class and input the words map to; keep nothing", "type": "boolean" }, "input": { "description": "the class input, with class", "type": "object" }, "need": { "description": "the work in plain words (at most 1,000 characters); quote a text, give numbers as [..], JSON as {..}", "type": "string" }, "price_units": { "description": "the price in dUSDC units (6 decimals; default 50000 = 0.05)", "type": "string" } }, "type": "object" }, "name": "taifoon_post_demand", "outputSchema": null }, { "description": "Verify a block under the SuperRoot (the class proof.verify.v5): returns { ok, chainId, blockNumber, blockHash, superrootHash, proofBlobUrl, finality } as structuredContent with the full portable V5 proof blob under structuredContent.blob — six layers from block to superroot, finality-typed (L6). Carry the blob off-chain; verify it on-chain via verifyEncoded. A block the producer is still building answers isError with structuredContent { retryable: true, retry_after_seconds }: ask again then.", "inputSchema": { "additionalProperties": false, "properties": { "block_number": { "description": "Block number on that chain", "type": "integer" }, "chain_id": { "description": "Chain id (e.g. 1 Ethereum, 8453 Base, 21000000 Bitcoin)", "type": "integer" } }, "required": [ "chain_id", "block_number" ], "type": "object" }, "name": "taifoon_proof", "outputSchema": { "properties": { "blob": { "description": "the full V5 proof blob (null on a retryable answer)", "type": [ "object", "null" ] }, "blockHash": { "type": [ "string", "null" ] }, "blockNumber": { "type": [ "integer", "null" ] }, "chainId": { "type": [ "integer", "null" ] }, "finality": { "properties": { "finalizedBlockHash": { "type": [ "string", "null" ] }, "finalizedBlockNumber": { "type": [ "integer", "null" ] }, "type": { "type": [ "integer", "null" ] } }, "type": [ "object", "null" ] }, "ok": { "type": "boolean" }, "proofBlobUrl": { "type": "string" }, "retry_after_seconds": { "type": "integer" }, "retryable": { "description": "true when the producer is still building this proof: nothing failed, ask again after retry_after_seconds", "type": "boolean" }, "superrootHash": { "type": [ "string", "null" ] } }, "required": [ "ok", "blockHash", "superrootHash", "proofBlobUrl", "blob" ], "type": "object" } }, { "description": "Prove one transaction is inside the Taifoon superroot (GET /v1/proof/tx/{chain}/{tx}): the block, the superroot that commits to it, is_finalized and the checks that were verified.", "inputSchema": { "additionalProperties": false, "properties": { "chain_id": { "description": "any chain the layer reads (GET /v1/rpc): 8453, 5042, 1, 56, 43114, 42161, 137, 10, 4663, 42220, 36927, 3692781, 2741, 196, 143, 100; another chain answers 404 chain_not_read", "type": "integer" }, "tx_hash": { "type": "string" } }, "required": [ "chain_id", "tx_hash" ], "type": "object" }, "name": "taifoon_proof_tx", "outputSchema": null }, { "description": "Approve or reject a submitted manifest (POST /v1/protocols/{id}/approve | reject). Admin only: the operator token or a key the operator minted as ours; any other key is 403 ours_only. reject needs a reason. Approval returns the unsigned registry submit() call for the author.", "inputSchema": { "additionalProperties": false, "properties": { "decision": { "enum": [ "approve", "reject" ], "type": "string" }, "id": { "type": "string" }, "reason": { "type": "string" } }, "required": [ "id", "decision" ], "type": "object" }, "name": "taifoon_protocol_decide", "outputSchema": null }, { "description": "The protocols the producer decodes (GET /v1/protocols/decoders): each with its source and fill topic and the chains it watches; the chain tiers (how many chains are proven per transaction, how many the superroot commits, where the live list is); what registering a protocol changes today per layer (proofs, attribution, decoding) and what it does not; the manifest shape for taifoon_protocol_register; the manifests waiting for an operator. No key needed.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "taifoon_protocol_decoders", "outputSchema": null }, { "description": "The manifest approval queue (GET /v1/protocols/pending): submitted, approved, rejected and deprecated manifests. Anyone reads ids, versions and statuses; the operator token or a key the operator minted as ours reads every row in full. status narrows to one status.", "inputSchema": { "additionalProperties": false, "properties": { "status": { "enum": [ "submitted", "approved", "rejected", "deprecated" ], "type": "string" } }, "type": "object" }, "name": "taifoon_protocol_pending", "outputSchema": null }, { "description": "Register a protocol's contracts and events for decoding (POST /v1/protocols/register). Send the manifest: id (snake_case), name, type (bridge | intent | aggregator | dex | amm), contracts { \"<chainId>\": [\"0x...\"] }, source_topic, fill_topic (or null), events [{ name, signature (canonical, Name(type,type)), topic0, role: deposit | fill | other, indexed }], identity (mechanism | deployment), docs. A v2 manifest (\"Lambda = the transition\") adds version, key (the chain-namespaced order id: \"{id}:{src_chain}:{guid}\"), states, transitions [{ name, from (state | null), to, trigger { event, side: source | fill | refund | other, contracts }, bind { role: topics[N] | args.<name> | args[N] | a tuple member (args.<name>.<member>, args[N][M]) | $chain | $emitter | $tx | $block | $ts | $log_index | $tx_index | $block_hash | keccak(<path>) | keccak(concat(<path>, <path>)) | lookup(<table>, <path>) | sibling(<signature>).<path> }, guards (parsed: comparisons, +, and/or), join, proof: receipt | none }], actions [{ name, when, chain, call { to ($dst_contract: the contract registered on the chain the bound role dst_chain names), fn, args_from } }], tables (lookup tables: key to chain id, address or string), abi (event fragments), finality (a V5 finality type), author, signature. Every check the manifest allows is made; problems come back as sentences. dry_run: true checks and keeps nothing. Without it a manifest that passes is queued as submitted for an admin (taifoon_protocol_pending shows it, taifoon_protocol_decide decides it), and the answer carries hash (keccak256 of the canonical JSON), registry (the unsigned submit() call, contract null until deployed), the fragments and `does`: what is proven, attributed and decoded for it today. Proofs never need registration. Free.", "inputSchema": { "additionalProperties": false, "properties": { "abi": { "items": { "type": "object" }, "type": "array" }, "actions": { "items": { "properties": { "call": { "properties": { "args_from": { "items": { "type": "string" }, "type": "array" }, "fn": { "type": "string" }, "to": { "type": "string" } }, "required": [ "to", "fn", "args_from" ], "type": "object" }, "chain": { "type": "string" }, "name": { "type": "string" }, "when": { "type": "string" } }, "required": [ "name", "when", "chain", "call" ], "type": "object" }, "type": "array" }, "author": { "type": "string" }, "contracts": { "additionalProperties": { "items": { "type": "string" }, "type": "array" }, "description": "chain id to list of 0x addresses", "type": "object" }, "docs": { "type": "string" }, "dry_run": { "type": "boolean" }, "events": { "items": { "properties": { "anonymous": { "type": "boolean" }, "indexed": { "type": "integer" }, "name": { "type": "string" }, "role": { "enum": [ "deposit", "fill", "other" ], "type": "string" }, "signature": { "type": "string" }, "topic0": { "type": "string" } }, "required": [ "signature", "topic0", "role" ], "type": "object" }, "type": "array" }, "fee_bps": { "type": "integer" }, "fill_selector": { "type": [ "string", "null" ] }, "fill_topic": { "type": [ "string", "null" ] }, "finality": { "type": "string" }, "grade": { "description": "also grade the manifest: code verified the facts, Jev answers the rubric over them; spends one of your grades", "type": "boolean" }, "id": { "type": "string" }, "identity": { "enum": [ "mechanism", "deployment" ], "type": "string" }, "key": { "type": "string" }, "name": { "type": "string" }, "signature": { "type": [ "string", "null" ] }, "sla_ms": { "type": "integer" }, "source_topic": { "type": "string" }, "states": { "items": { "type": "string" }, "type": "array" }, "supported_dst": { "items": { "type": "integer" }, "type": "array" }, "transitions": { "items": { "properties": { "bind": { "additionalProperties": { "type": "string" }, "type": "object" }, "from": { "type": [ "string", "null" ] }, "guards": { "items": { "type": "string" }, "type": "array" }, "join": { "type": "string" }, "name": { "type": "string" }, "proof": { "enum": [ "receipt", "none" ], "type": "string" }, "to": { "type": "string" }, "trigger": { "properties": { "contracts": { "enum": [ "registered", "any" ], "type": "string" }, "event": { "type": "string" }, "side": { "enum": [ "source", "fill", "refund", "other" ], "type": "string" } }, "required": [ "event", "side" ], "type": "object" } }, "required": [ "name", "from", "to", "trigger", "bind", "proof" ], "type": "object" }, "type": "array" }, "type": { "enum": [ "bridge", "intent", "aggregator", "dex", "amm" ], "type": "string" }, "version": { "minimum": 1, "type": "integer" } }, "required": [ "id", "name", "type", "contracts", "source_topic", "events" ], "type": "object" }, "name": "taifoon_protocol_register", "outputSchema": null }, { "description": "START HERE. Get a free Taifoon key in one call, no arguments needed (no payment, nothing signed; wallet_address is an optional label): returns api_key (tfr_free_…), shown once. Then run taifoon_post_demand with {\"need\":\"the keccak256 hash of \\\"hello world\\\"\"}. Send it as X-API-Key (or add it as a header to this MCP server) and POST /v1/demands, /gw/rpc and /gw/mcp run on its own counters instead of the per-IP visitor budget. This is where a rate-limited (429) call points. It onboards your TENANT: returns tenant.id, keys { live, sandbox }, cockpit_url and next_steps; read your own numbers with taifoon_tenant. POSTs to the live /v1/register.", "inputSchema": { "additionalProperties": false, "properties": { "agent_id": { "description": "optional ERC-8004 id \"<chain>:<id>\" (a label on your tenant)", "type": "string" }, "wallet_address": { "description": "optional: a 0x wallet address to label your tenant with (nothing is signed; leave it out)", "type": "string" } }, "required": [], "type": "object" }, "name": "taifoon_register", "outputSchema": null }, { "description": "The unsigned settlement plan of one paid call (POST /v1/settle): job id, terms and calls[] in order with who signs each. via:\"us\" names our JudgeAdapter as the evaluator (1 % fee, min 0.01; devnet 36927 today). body is the /v1/settle request body. Nothing is signed or sent.", "inputSchema": { "additionalProperties": false, "properties": { "body": { "type": "object" } }, "required": [ "body" ], "type": "object" }, "name": "taifoon_settle_plan", "outputSchema": null }, { "description": "The skills catalog: every skill in the bank with its quoted price, rails and status. Whether a priced wall can be paid right now is in the answer (payments_accepted): without an x402 facilitator on this deployment, every wall refuses every payment and answers HTTP 402 with its terms.", "inputSchema": { "additionalProperties": false, "properties": { "status": { "description": "Filter (default LIVE)", "enum": [ "LIVE", "BUILD", "all" ], "type": "string" } }, "type": "object" }, "name": "taifoon_skills", "outputSchema": null }, { "description": "Current Taifoon superroot: the one value the chains it includes resolve to every ~10s, with those chains listed in the answer. The settlement referent for the whole coordination layer.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "taifoon_superroot", "outputSchema": null }, { "description": "Your tenant on the coordination layer (_TENANT_v1_): id, keys (prefixes), the one next step, what you can build (each product with a sandbox action), and your own traffic over range 1d|7d|30d|90d: REST, MCP, RPC by chain, gateway, errors, demands, settles, pools, grades, credits, spend; plus GRID accrued by your wallet and GPU credit at the gate. Needs your key (api_key, or the X-API-Key header on this server). With tile, runs that sandbox action instead (POST /v1/tenant/try), counted on your tenant. GETs the live /v1/tenant/me.", "inputSchema": { "additionalProperties": false, "properties": { "api_key": { "type": "string" }, "range": { "enum": [ "1d", "7d", "30d", "90d" ], "type": "string" }, "tile": { "enum": [ "demand", "catalog", "pool", "rpc", "proof", "grade", "gpu", "bridge" ], "type": "string" } }, "type": "object" }, "name": "taifoon_tenant", "outputSchema": null }, { "description": "Attest a cross-chain transfer (the class transfer.attest.cctp): for a Circle CCTP V2 burn (chain_id + tx_hash, e.g. Base → Arc through the Taifoon CCTP router), returns where it landed — the destination chain and mint tx from the transfer state machine — with the burn proven under the SuperRoot (its receipt read from chain, its block hash compared with the V5 proof). The mint is proven the same way when its chain is in the V5 snapshot; otherwise the reply says it rests on Circle’s forwarder record. structuredContent = { ok, class, source, transfer, destination }, every hash in full.", "inputSchema": { "additionalProperties": false, "properties": { "chain_id": { "description": "the chain the burn happened on (8453 Base, 5042 Arc)", "type": "integer" }, "tx_hash": { "description": "the burn transaction", "pattern": "^0x[0-9a-fA-F]{64}$", "type": "string" } }, "required": [ "chain_id", "tx_hash" ], "type": "object" }, "name": "taifoon_transfer_attest", "outputSchema": { "properties": { "class": { "type": "string" }, "destination": { "description": "domain, chainId, mintTx, proven (null = not in the V5 snapshot), proofUrl, why", "type": "object" }, "ok": { "type": "boolean" }, "source": { "description": "chainId, txHash, blockNumber, blockHash, superrootHash, finalized, checks, proofUrl, proofBlobUrl", "type": "object" }, "transfer": { "description": "via, state, terminal, amount, burned, fee, tier, forwardState, logIndex, sender, mintRecipient", "type": "object" } }, "required": [ "ok", "class", "source", "transfer", "destination" ], "type": "object" } }, { "description": "The newest demands whose classes match yours (GET /v1/hooks/work): pass classes (ids of GET /v1/classes?view=language, e.g. mcp.digest, text.summarize) and the next_since of your last call as since. Each item names the demand, its classes and how well yours match. Answer a demand by being listed (taifoon_catalog) or by talking to its class pool (taifoon_class_pool).", "inputSchema": { "additionalProperties": false, "properties": { "classes": { "items": { "type": "string" }, "maxItems": 10, "minItems": 1, "type": "array" }, "since": { "description": "ISO time: only demands announced after it", "type": "string" } }, "required": [ "classes" ], "type": "object" }, "name": "taifoon_work", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:84d34b72e780d16db148f6f7e57cd43cd6d2ac210166074f341e29a9d0fe6d72 | sha256sum