BlockRun MCP
OfficialSummary: This server is an MCP toolkit that gives AI agents access to 19 paid-per-call tools covering AI chat/models, media generation, prediction-market data, live search, on-chain data, DEX/DeFi analytics, and real Polymarket trading — all billable either via a self-custody USDC wallet or a BlockRun API key.
AI & Models:
Chat with 78+ LLMs (GPT, Claude, Gemini, DeepSeek, etc.) via
blockrun_chat(supports reasoning, coding, free tiers, multimodal, JSON output).List models and pricing via
blockrun_models.
Media Generation:
Generate/edit images (
blockrun_image) with models like GPT-image-2, Nano-Banana, Seedream.Generate videos (
blockrun_video) with Sora 2, Grok Imagine, Seedance (supports image-to-video, RealFace, 4K, audio).Enroll real people or AI characters for personalized video via
blockrun_realface(liveness check or virtual portrait).Generate music (
blockrun_music) and speech/sound effects (blockrun_speech).
Markets & Trading:
Query prediction markets (Polymarket, Kalshi, Limitless, etc.) and derivatives data via
blockrun_markets(events, prices, orderbooks, leaderboards, wallet analytics).Read-only Polymarket positions/orders and live order previews via
blockrun_polymarket_read.Place real, confirm-gated bets on Polymarket via
blockrun_polymarket— buy/sell, cancel, redeem, withdraw; self-custody, gasless.
Search & Research:
Real-time web/news search with citations via
blockrun_search(Grok).Neural web search (Exa) via
blockrun_exa(search, answer, contents, find-similar).
On-Chain & DeFi:
Price quotes/OHLC for crypto, FX, commodities via
blockrun_price(free for those categories).DEX data (prices, liquidity, volume) via
blockrun_dex(free).Protocol TVL, yields, token prices via
blockrun_defi.Raw JSON-RPC access to 40+ blockchains via
blockrun_rpc.Run isolated code sandboxes (CPU or GPU) via
blockrun_modal.
Phone & Voice:
Phone number lookup, fraud checks, buy/renew numbers, and outbound AI voice calls via
blockrun_phone.
Wallet & Budget Management:
Check balances, switch chains (Solana/Base), buy USDC with card, view QR for funding via
blockrun_wallet.Set global/per-agent spending budgets, delegate budgets to child agents, review spending reports via
blockrun_wallet.
Other:
Free tier for chat (NVIDIA), DEX data, crypto price quotes, and model catalog.
Configuration options for budget caps, spend confirmation dialogs, key storage (keychain), and Polymarket safeguards.
Provides access to Binance Futures market data via the blockrun_markets tool.
Provides access to ByteDance's Seedance video generation models via the blockrun_video tool.
Provides on-chain SQL queries across 13 blockchains using ClickHouse tables via the blockrun_surf tool.
Provides access to free-tier NVIDIA LLMs via the blockrun_chat tool.
Provides access to OpenAI models (GPT and DALL-E) for text generation and image creation via blockrun_chat and blockrun_image tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BlockRun MCPWhat's the current Polymarket probability for Bitcoin reaching $100k this year?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
claude mcp add blockrun -s user -- npx -y @blockrun/mcp@latestBlockRun MCP is an open-source Model Context Protocol server that gives Claude — and any MCP-compatible agent — 19 tools for real-time data and real actions: 78 LLMs, image & video generation, prediction-market data, live web/X search, on-chain queries across 40 chains, and the ability to place real, USDC-settled bets on Polymarket.
You pay per call, and you choose how. Wallet mode authenticates with a signature and settles each call in USDC via the x402 protocol — no account, no credit card, no subscription, on Solana or Base. Account mode authenticates with a BlockRun API key (brk_live_…) from user.blockrun.ai, routes service calls through api.blockrun.ai, and draws down card- or wire-funded account credit at exact usage. Same 19 tools either way. MIT licensed.
🏆 First of its kind — the signal → trade loop in Claude Code
Read live Polymarket odds and place the bet, from one self-custody wallet, pay-per-call. Jump to Polymarket trading →
Related MCP server: @prism/mcp-server
Why BlockRun MCP exists
Every other data integration was built for human developers — create an account, copy an API key into .env, add a credit card, repeat for every vendor.
BlockRun gives you both payment rails without rebuilding the integration. Use a wallet when the agent should self-custody funds, or use an account key when a team wants card-funded credits and a dashboard.
One wallet, every source — 19 tools behind a single self-custody wallet. No per-vendor signups.
One account key, every source — mint a key at user.blockrun.ai, top up by card or wire, then the MCP calls api.blockrun.ai with that key.
No API key required in wallet mode — your wallet signature is authentication.
No credit card required in wallet mode — pay per request in USDC via x402, fractions of a cent each.
Starts free — the free tier (
blockrun_chat mode:"free",blockrun_dex, cryptoblockrun_price,blockrun_models) costs $0.Reads and acts — most tools deliver data;
blockrun_polymarketplaces real, confirm-gated trades.Human-in-the-loop payments — turn on
BLOCKRUN_CONFIRM_SPEND=onand the agent pauses before any paid call above your threshold; nothing is signed until you approve. Details ↓Generative UI — on Claude Desktop, claude.ai, VS Code and Cursor the Polymarket preview is a live order card with a Place button, and the wallet is a panel with balances, QR and card top-up. MCP Apps ↓
Self-custody — your key never leaves your machine (
~/.blockrun/.session,0600— or the OS keychain once you opt intoBLOCKRUN_KEYCHAIN=strict). BlockRun can't move your funds.
How it compares
Raw provider APIs | Typical single-vendor MCP | BlockRun MCP | |
Setup | Account + API key per vendor | Account/key for 1 vendor | Wallet auto-created — or one BlockRun key for everything |
Payment | Credit card, monthly minimums | Credit card / vendor plan | USDC per-call via x402, or card/wire-funded account credit |
Data sources | One per integration | One vendor | 19 tools — LLMs, media, markets, chain |
Place real bets | Build it yourself | Rare | Yes — Polymarket CLOB, confirm-gated |
Pay-chain | — | — | Solana + Base, or |
Agent budgets | Manual | — | Built-in per-agent delegation |
Spend approval | — | — | Ask-before-pay dialog (MCP elicitation) |
Generative UI | — | Rare | Order card + wallet panel (MCP Apps) |
Open source | Varies | Varies | Yes (MIT) |
✓ One wallet or one account key · ✓ Pay-per-call · ✓ Reads and trades · ✓ Multi-chain · ✓ Agent-ready · ✓ Open source
What changes
Before BlockRun, Claude can't answer:
"What's the current Polymarket probability that Bitcoin hits $100k this year?"
"Find me the top 5 papers on RAG published in the last 30 days."
"What are people saying about @sama on X right now?"
"What's the 24h volume on the PEPE/ETH pair on Uniswap?"
"Polymarket has the Fed holding at 73% — put $2 on it." ← and now it can place the trade, not just read the odds.
After BlockRun, it can. Each query costs fractions of a cent — billed from a local USDC wallet, or from card-funded credit on a BlockRun account through api.blockrun.ai. No subscriptions, no per-vendor signups.
Quick Start
0. Choose how you pay
Wallet (default) | API key | |
Setup | Nothing — a wallet is created on first run | Sign in at user.blockrun.ai, mint a key, use it against api.blockrun.ai |
Funding | Send USDC (Solana or Base) | Credit card / wire → account credit |
Billing | Per call, settled on-chain, + $0.001 network fee | Exact-usage account credit, no per-call network fee, no minimum |
Identity | A keypair on your machine | An account with members, credits, and a usage ledger |
Best for | Agents, solo devs, anything self-custody | Teams, companies, anyone who can't run a wallet |
Trade on Polymarket | ✅ | ❌ — needs a keypair to sign |
Both modes reach the same 19 tools. Account mode sends service calls to https://api.blockrun.ai by default. You can switch at any time; setting BLOCKRUN_API_KEY takes priority over a wallet, and unsetting it hands the wallet back.
1. Install
Claude Code (recommended)
claude mcp add blockrun -s user -- npx -y @blockrun/mcp@latest-s user installs globally (available in every project). The -- separator ensures -y is passed to npx, not parsed by claude mcp add.
💡 Homebrew / nvm users: if the server doesn't connect, Claude Code likely can't find
node/npxon its launcher PATH. Pass your shell PATH through — works on CLI and desktop:claude mcp add blockrun -s user -e PATH="$PATH" -- npx -y @blockrun/mcp@latestSee Troubleshooting if it persists.
Every MCP client — one command or one JSON block. Verified = we ran the published package on that client and saw the tools listed (client version · date). Documented = install path from the client's own docs; not run by us yet — tell us if it works. The Spend dialog column is whether the client renders the human-in-the-loop payment prompt; on ❌ clients paid calls proceed without asking and BLOCKRUN_BUDGET_LIMIT is the guard.
Client | Status | Spend dialog | Install |
Claude Code | ✅ Verified · 2.1.251 · 2026-08-30 | ✅ |
|
Codex CLI | ✅ Verified · 0.142.5 · 2026-08-30 | ❌ |
|
OpenClaw | ✅ Verified · 2026.8.2 · 2026-09-02 | ⚠️ surface-dependent; see below |
|
Claude Desktop | 📝 Documented | ⚠️ renders; OK reports cancel → proceeds |
|
Cursor | 📝 Documented | ✅ |
|
VS Code (Copilot) | 📝 Documented | ✅ |
|
Gemini CLI | 📝 Documented | ❌ |
|
Grok | 📝 Documented · see the timeout note | ❌ |
|
Windsurf | 📝 Documented | ❌ |
|
Any other MCP client that can spawn a stdio server works the same way: command: npx, args: ["-y", "@blockrun/mcp@latest"]. With nvm/Homebrew Node on a JSON-configured client, put the absolute path from which npx in command. Spend-dialog sources and what "proceeds without asking" means: docs/spend-confirmation.md.
Grok — raise the startup timeout before you install, or the first run looks broken.
Grok waits startup_timeout_sec for an MCP server to answer, and it defaults to 30
(xAI's MCP docs). A first npx -y run has
to download this package and its dependency tree before the server can say anything, and
that is a race: measured cold, with an empty npm cache, it took 17s on a fast connection
and 42-46s on a slower shared box. Lose the race and grok mcp doctor blockrun says
server timed out (no response within 30s) and the UI shows blockrun [unavailable] — an
install that is working, timing out, and indistinguishable from broken.
Give it room in ~/.grok/config.toml (or .grok/config.toml for one project):
[mcp_servers.blockrun]
command = "npx"
args = ["-y", "@blockrun/mcp@latest"]
enabled = true
startup_timeout_sec = 120Or skip the cold download entirely, which is faster every run after the first:
npm install -g @blockrun/mcp@latest
grok mcp add blockrun -- blockrun-mcpOnly the FIRST run pays this: npx caches by exact spec, so the next start is warm (~9s
here). The same trap exists on any client with a startup timeout — if a fresh install
shows as unavailable and npx -y @blockrun/mcp@latest runs fine in a terminal, raise the
client's timeout or install globally before looking for anything else. Thanks to
@0xCheetah1 for the report.
OpenClaw: the published npx package was verified end-to-end on 2026.8.2: all 20 tools were projected (19 since the Surf delisting), free calls worked, and paid x402 calls settled. Add a hard session cap while installing:
openclaw mcp set blockrun '{"command":"npx","args":["-y","@blockrun/mcp@latest"],"env":{"BLOCKRUN_BUDGET_LIMIT":"2"}}'
openclaw mcp doctor blockrun --probeSpend confirmation depends on the OpenClaw runtime and chat surface. Its Codex harness supports MCP form elicitation, but an unmappable prompt is returned as an explicit decline; in the WebChat → Codex route tested here, BLOCKRUN_CONFIRM_SPEND=on declined paid calls without presenting an actionable dialog. Keep confirmation off on that route and rely on BLOCKRUN_BUDGET_LIMIT plus OpenClaw's own tool-approval mode.
{
"mcpServers": {
"blockrun": { "command": "npx", "args": ["-y", "@blockrun/mcp@latest"] }
}
}Client | File |
Claude Desktop |
|
Cursor |
|
Windsurf |
|
Add "env": { "BLOCKRUN_CONFIRM_SPEND": "on" } inside the server object to turn on the spend dialog where the client supports it.
2. Choose a tool profile (optional)
Expose a trimmed tool set so the client loads fewer schemas into context. Pass --profile <name> (or set BLOCKRUN_MCP_PROFILE); omit for the full set.
Profile | Tools |
| everything (19 tools) |
|
|
|
|
|
|
|
|
blockrun_surf was removed in 0.49.0: the gateway has answered every Surf (asksurf.ai) path with 410 since 2026-09-06, so the tool could only ever return an error, and its schema cost every agent context on every turn. Those questions go to blockrun_price, blockrun_defi, blockrun_markets and blockrun_dex; the surf skill maps each former endpoint to its replacement.
claude mcp add blockrun-trading -s user -- npx -y @blockrun/mcp@latest --profile trading
# Codex CLI
codex mcp add blockrun-trading -- npx -y @blockrun/mcp@latest --profile tradingAn unknown profile name falls back to full. modal and phone are full-profile only.
What each profile costs your context
Installing an MCP server spends context on every turn, whether or not you call the tools — the client loads each tool's schema into the model's prompt and re-sends it for the whole session. Package managers have shown install size for decades. Almost no MCP server shows this. Ours:
Profile | Tools | Context |
| 19 | 13,044 |
| 8 | 5,411 |
| 7 | 5,828 |
| 5 | 2,752 |
| 3 | 2,079 |
Running --profile trading instead of the default costs 59% less context for the same trading
workflow. If you only ever ask about markets, that is the single cheapest change you can make.
Measure it yourself — against us, or against any other stdio MCP server:
npm i gpt-tokenizer
node scripts/measure-tool-schema.mjs # this server, every profile
node scripts/measure-tool-schema.mjs -- npx -y @some/other-mcp-serverIt counts the model-visible projection — {name, description, input_schema} per tool, with the
mcp__blockrun__ prefix the host prepends — because that is what lands in the API tools array.
It excludes annotations, _meta and outputSchema, which the host consumes and never forwards
to the model (a further ~3.7% on the wire).
The tokenizer is o200k_base. Claude's tokenizer is not public and runs a few percent higher on
JSON, so every figure here is a slight under-count, never an over-count.
Two caveats worth stating plainly. Tool schemas sit at the front of the prompt and are covered by prompt caching, so after the first turn they re-send at cache-read rates — the context-window cost is 100% every turn, the dollar cost is roughly a tenth of that. And 54% of our own cost is tool descriptions, not schemas, which is where the remaining work is.
3. Add funds
Option A — API key + account credit (no wallet). Sign in at user.blockrun.ai with Google. This is the dashboard for keys, credits, and activity; the MCP uses the key to call api.blockrun.ai for the actual services.
Dashboard → Keys — mint a key. It looks like
brk_live_…and is shown once.Dashboard → Credits — top up by credit card or wire.
Point the server at it. By default, account-mode calls go to
https://api.blockrun.ai:
claude mcp add blockrun -s user -e BLOCKRUN_API_KEY=brk_live_… -- npx -y @blockrun/mcp@latest Or export BLOCKRUN_API_KEY=brk_live_… in the environment the client launches from.
If your client makes environment variables awkward, write the key to
~/.blockrun/.api-key instead (chmod 600) — same file directory the
wallet uses. The environment variable wins when both are present.
4. Dashboard → Activity — every call, priced at exact usage.
Verify with blockrun_wallet action:"status" — it reports the account, its real
balance, and what this session has spent:
Paying with: BlockRun account API key (no wallet, no chain)
Account: acme (gated)
Credit remaining: $12.5000 of $50.00 granted
Top up: https://user.blockrun.ai/dashboard/creditsInvoiced accounts show Spent to date: $4.5239 (invoiced account — no prepaid ceiling) instead. If the account is blocked, status says so and why before you spend a call finding out.
Option B — wallet (no account). Run blockrun_wallet to see your addresses. New installs default to Solana; send USDC (SPL) on Solana from Coinbase (pick "Solana"), Phantom, Solflare, or Backpack. To pay on Base instead: blockrun_wallet action:"chain" chain:"base", then send USDC on Base. Full instructions: Fund your wallet.
$5 covers ~525 market queries · ~500 Exa searches · ~250 image generations · ~14 Seedance 1.5-pro clips.
4. Ask Claude anything
"What's Polymarket saying about the next Fed decision? If 'hold' is above 70%, put $2 on it."
Claude reads the odds with blockrun_markets. In wallet mode, and only after your confirmation, it can also place the trade with blockrun_polymarket. In API-key mode, the data/media/research calls run through api.blockrun.ai; Polymarket trading still requires a local keypair to sign.
5. Install the agent skills (optional)
The package ships 17 skills — which tool answers what, worked examples, and a setup / debug / upgrade trio so the agent can install, troubleshoot and update the server on its own.
/plugin marketplace add BlockRunAI/blockrun-mcp # Claude Code
npx -y @blockrun/mcp@latest skills install # any project → ./.claude/skills
npx -y @blockrun/mcp@latest skills install --global # ~/.claude/skills
npx -y @blockrun/mcp@latest skills install --to ~/.codex/skillsskills list shows what ships; --only a,b picks; --force refreshes copies after an upgrade.
Demo
User: What's Polymarket saying about the Fed rate decision next month?
Claude: According to Polymarket, the market puts a 73% probability on the Fed holding rates steady, 24% on a 25bp cut, 3% on a hike. 24h volume: $2.1M. The "Hold" contract last traded at $0.73.
(via
blockrun_markets· cost: $0.0085 on Base — $0.0075 + the $0.001 network fee)
User: Polymarket has Hawley at ~13% to announce a 2026 presidential run — put $1 on Yes.
Claude: Done — bought 7.63 shares of Yes at $0.131 ($1.00, market FOK). Real on-chain order, settled in pUSD from your gasless Polymarket deposit wallet; I'm tracking the position now.
(signal via
blockrun_markets, trade viablockrun_polymarket— one self-custody wallet, gasless · on-chain tx0x7ca8…)
Tools
Tool | Data source | Cost |
| 78 LLMs (GPT, Claude, Gemini, DeepSeek, Kimi K3, GLM, NVIDIA free tier, …) with | per token |
| Generate: openai/gpt-image-2, gpt-image-1, google/nano-banana(-2/-pro), xai/grok-imagine-image(-pro), zai/cogview-4, bytedance/seedream-5-pro. Edit: img2img, inpaint, fusion. | $0.015–0.15 |
| Sora 2 + xAI Grok Imagine Video + ByteDance Seedance 1.5/2.0-mini/2.0-fast/2.0/2.5 (720p + audio; 4K on 2.0, up to 30s on 2.5); RealFace asset → real-person video | $0.053–0.32/sec charged |
| Enroll a real person (phone liveness) or AI character (Virtual Portrait) as a | free; $0.01 to enroll |
| MiniMax music generation | per track |
| ElevenLabs TTS (Flash/Turbo/Multilingual/v3, 8 voices) + ByteDance Seed Audio (prompt-directed) + cinematic sound effects; free voice listing | $0.05–0.10/1k chars |
| Pyth-backed realtime + OHLC — crypto / FX / commodity, plus the ticker catalog for 12 equity markets (equity quotes withdrawn 2026-09-05) | free |
| Polymarket (markets, candles, trades, orderbooks, leaderboards, smart-wallet PnL/clusters, UMA oracle), Kalshi, Limitless, Opinion, Predict.Fun, dFlow, Binance Futures, cross-platform search | $0.0075 + fee/query |
| Read-only Polymarket positions/open orders plus executable live order previews, separated for MCP clients that enforce tool safety annotations | free |
| Trade on Polymarket (CLOB V2): place/cancel real bets, positions, redeem winnings — signed locally, settled in pUSD from a gasless deposit wallet. Confirm-gated, $25/order default cap. Details ↓ | free tool; bets are your funds |
| Neural web search (Exa) — research, competitors, papers, URL content | $0.01 + fee/query |
| Grok Live Search — web + news with citations | $0.025 × max_results |
| Live DEX prices via DexScreener | free |
| Raw JSON-RPC on 40 chains (Ethereum, Base, Solana, Bitcoin, Sui, NEAR, …) via Tatum | $0.002 + fee/call |
| DefiLlama — protocol TVL, chain TVL, yield pools (APY), token prices | $0.001–0.005 + fee/call |
| Isolated code execution in a BlockRun-hosted Modal sandbox — disposable container, optional GPU (T4 → H100) | $0.01 create; $0.001/op |
| Outbound AI voice calls (Bland) + wallet-owned US/CA numbers (Twilio), carrier + fraud lookups | $0.54/call; $5/number |
| Live catalogue of every LLM/image/video/music model + pricing | free |
| Balance, spending, agent budgets, setup QR, chain switch | free |
Flat data prices are the base. In wallet mode the gateway adds its flat network fee on top — $0.001 per call on Base today, and the Solana gateway quotes the base alone; the account rail charges no fee. The exact figure is in the payment-required header of any unpaid request, which is free to ask for. The server reserves $0.002 for the fee against the budget cap, so blockrun_wallet action:"report" and the spend-confirmation dialog run $0.001 high per call by design.
Key use cases
Prediction-market consensus → "Polymarket's odds for the next Fed decision?" —
blockrun_marketsSignal → trade (the full loop, self-custody) → "If 'hold' is under 30%, put $2 on Yes." —
blockrun_marketsreads,blockrun_polymarket action:"buy"places. Gasless, confirm-gated.Smart-money forensics → "This Polymarket whale — who are they, which wallets are theirs, what's their P&L?" —
blockrun_marketspolymarket/wallet/identity/:wallet+.../clusterCited research → "5 most-cited papers on speculative decoding, last 90 days." —
blockrun_exaImage generation with on-image text → "Poster announcing GPT-5.5, retro-futuristic, headline 'NOW LIVE'." —
blockrun_imageGive your agent a voice → "Speak this with the sarah voice." —
blockrun_speechVoice phone-out → "Call +1-415-… and confirm Friday at 3pm." —
blockrun_phoneMulti-agent research, capped → "Spawn 3 agents on competing L1 narratives. Cap each at $0.50." —
blockrun_wallet delegate × 3Raw chain reads, 40 chains → "Latest Base block, and this contract's USDC balance." —
blockrun_rpc
📈 Polymarket trading
blockrun_polymarket lets an agent place real bets on Polymarket (CLOB V2, Polygon). It is non-custodial: every order and approval is EIP-712-signed locally by your BlockRun wallet key — the same self-custody key that pays x402 API fees on Base also authorizes bets on Polygon. Neither BlockRun nor Polymarket's relayer can move funds; they only forward payloads you signed.
Architecture — the official "deposit wallet" path (signature type POLY_1271): a smart-contract vault on Polygon, CREATE2-derived from your key (only your key can authorize it), holds betting funds in pUSD (Polymarket's 1:1 collateral wrapper). Deployment, approvals, and redemptions all run gasless through Polymarket's relayer — you never need POL.
📖 Full step-by-step guide: docs/polymarket-trading-setup.md
# 1. Provision your deposit wallet (idempotent, gasless)
blockrun_polymarket action:"setup"
# 2. Fund it from your Base USDC in one call (gasless; $0.01 fee, non-custodial)
blockrun_polymarket action:"fund" amount_usd:5 confirm:true
# 3. Sign the one-time gasless approval batch
blockrun_polymarket action:"setup" confirm:true
# 4. Find a market, preview safely, then place only after exact user approval
blockrun_polymarket_read action:"preview" side:"buy" token_id:"<id>" amount_usd:5 order_type:"FOK"
blockrun_polymarket action:"buy" token_id:"<id>" amount_usd:5 order_type:"FOK" confirm:true
# 5. Manage → positions · orders · cancel · sell · redeem · withdrawSafety rails (server-side; an agent cannot bypass them): confirm:true required for every order/approval/redeem, POLYMARKET_MAX_BET_USD per-order cap (default $25), optional POLYMARKET_MAX_SESSION_USD session cap, and bets never draw from the x402 API budget.
Regions: Polymarket geoblocks order placement by IP (US/UK + many regions). Handled by default — the MCP routes CLOB traffic through BlockRun's hosted Finland egress (a fully unrestricted region under Polymarket's policy), so trading works out of the box; setup reports your status. Override POLYMARKET_CLOB_HOST to go direct or run your own egress, optionally reached via HTTPS_PROXY / POLYMARKET_CLOB_PROXY (a proxy alone doesn't change the Polymarket-facing egress). Complying with Polymarket's terms for your jurisdiction is your responsibility.
⚠️ Back up your signer key (
~/.blockrun/.sessionby default; aBLOCKRUN_WALLET_KEYenv var or an existing agentwallet.jsontakes precedence —setupprints the actual signer address). It is the only key to both the payment wallet and the Polymarket deposit wallet.
🛡️ Human-in-the-loop payments
Turn on BLOCKRUN_CONFIRM_SPEND=on and every paid tool pauses before it signs. The server sends an MCP elicitation; your client renders it as a dialog with the estimated charge:
💸 BlockRun charge — video · bytedance/seedance-2.5 · 10s
Estimated: $2.6500
Approve this spend? (USDC is debited per call.)
To stop the charge, choose Decline — Cancel/ESC lets it proceed.
[ ] Approve all BlockRun charges for the rest of this session (don't ask again)
[ Decline ] [ Approve ]Decline → nothing is sent, nothing is charged, the tool reports "Charge declined". Approve → the call proceeds. Tick the box and you're not asked again for the session. Free calls never prompt. Set BLOCKRUN_CONFIRM_THRESHOLD=0.05 to only be asked above $0.05.
claude mcp add blockrun -s user -e BLOCKRUN_CONFIRM_SPEND=on -e BLOCKRUN_CONFIRM_THRESHOLD=0.05 -- npx -y @blockrun/mcp@latestClient | Dialog | Client | Dialog | |
Claude Code | ✅ | Claude Desktop | ⚠️ renders; OK reports cancel → proceeds | |
Cursor | ✅ | Windsurf | ❌ proceeds without asking | |
VS Code Copilot | ✅ | Codex CLI · Gemini CLI | ❌ proceeds without asking |
On a client that can't ask, the gate fails open — the call proceeds and the cost footer reports the charge. The hard stop on every client is the budget: BLOCKRUN_BUDGET_LIMIT for the process, blockrun_wallet action:"delegate" per sub-agent. blockrun_polymarket keeps its own, stronger per-order confirm:true.
📖 When to use it, sources for the matrix, limitations: docs/spend-confirmation.md
🧩 MCP Apps — order card & wallet panel
On hosts that support the MCP Apps extension — Claude Desktop, claude.ai, VS Code, Cursor, ChatGPT — two tools render as interactive cards instead of text. Everywhere else (Claude Code, Codex, terminals) nothing changes.
Order card on
blockrun_polymarket_read action:"preview"— question, outcome, side, best quote, est. shares, notional, cap meter, session ledger. Edit the amount → Re-quote. Place order is arm-then-confirm and asks the host to callblockrun_polymarket … confirm:true, so the host's consent prompt and every server cap (POLYMARKET_MAX_BET_USD, session cap) still apply.Wallet panel on
blockrun_wallet— both chains' balances, switch chain, copy address, EIP-681 / Solana Pay QR, explorer, Buy USDC with card.
📖 Hosts, money path, local testing: docs/mcp-apps.md
Fund your wallet
Paying with an API key instead? There is no wallet to fund — top up credit by card or wire at user.blockrun.ai/dashboard/credits. The MCP will use that key against api.blockrun.ai and skip the wallet rail entirely.
The server keeps two wallets — one on Solana, one on Base — and pays from one at a time. Run blockrun_wallet to see both addresses, balances, and which is active.
$5 covers ~525 market queries, ~500 Exa searches, ~250 image generations, or ~14 Seedance 1.5-pro clips (5s @ 720p+audio, ~$0.35 each).
Pay on Solana (default for new installs)
blockrun_wallet action:"setup" # shows the Solana address + funding QRSend USDC (SPL) on the Solana network — from Coinbase (pick "Solana"), Phantom, Solflare, or Backpack.
Pay on Base
One tool call — no env vars, no file editing, no restart:
blockrun_wallet action:"chain" chain:"base" # provisions + activates the Base wallet
blockrun_wallet action:"setup" # shows the Base address + funding QRMethod | Steps |
Coinbase | Send → USDC → Base network → paste address |
Bridge from Ethereum | |
Card |
|
Switch back with blockrun_wallet action:"chain" chain:"solana". Switching only changes which wallet pays; both keep their balances.
Upgrading from an older version? Nothing moves. The Solana-first default applies only to installs with no wallet and no saved chain preference — if you already have a Base wallet, you stay on Base until you switch.
What each mode reaches
Almost everything now settles on either chain. The exceptions:
Capability | API key | Solana wallet | Base wallet |
Chat, image, video, music, speech, RealFace | ✅ | ✅ | ✅ |
Search, Exa, markets, RPC, DEX, phone | ✅ | ✅ | ✅ |
| ✅ | ❌ not served on the Solana gateway | ✅ |
| ✅ | ❌ not configured on the Solana gateway | ✅ |
Native Anthropic | ✅ | ❌ the SDK signs EIP-3009 only | ✅ |
Polymarket trading | ❌ needs a keypair | ✅ | ✅ |
| ❌ no wallet | ✅ | ✅ |
| ❌ indexed by wallet address | ✅ | ✅ |
A blocked capability returns a message naming the fix, not a raw error.
What a call costs, and how sure we are
Mode | Reported cost |
API key — most tools | The amount actually settled, read from the account API's per-call response |
API key — | An estimate. Chat settles after the response by design, so no figure exists when the answer is sent |
API key — | The amount actually settled (since 0.49.0); only when the account API returns no figure does it fall back to the catalog estimate, marked |
Wallet | The amount signed and settled on-chain, from the 402 quote |
Anything estimated is printed with a ~ and says so. Estimates run high on
the account rail — they add a transaction fee it does not charge — so a budget
cap trips early rather than late. The source of truth is always
Dashboard → Activity.
For agents & LLMs
If you are an LLM invoking BlockRun MCP tools, read these first:
CRITICAL: On any payment / balance / 402 error, call
blockrun_walletfirst to check status, thenaction:"setup"for funding. Don't retry the failing tool blindly — the wallet is empty.CRITICAL:
blockrun_polymarketmoves REAL user funds (pUSD on Polygon), separate from the x402 API budget. Neverbuy/sell/redeemwithconfirm:trueunless the user explicitly approved that exact trade; withoutconfirmyou get a safe dry-run. Discover markets/token IDs withblockrun_marketsfirst.CRITICAL:
blockrun_musicandblockrun_videoare payment-on-completion async. Failures / client timeouts do NOT charge. Don't retry-loop — they may take 60–180s.CRITICAL: Before spawning child agents, allocate per-agent budget:
blockrun_wallet action:"delegate" agent_id:"X" agent_limit:1.00, then passagent_id:"X"to every downstream call. The child is auto-blocked at zero.Free tier first for drafts:
blockrun_chat mode:"free"(NVIDIA),blockrun_dex,blockrun_price(crypto/FX/commodity), andblockrun_modelsare $0.A declined spend confirmation is the user's decision. Report it and stop — never re-issue the call with a cheaper model, smaller parameters, or split requests to get under their threshold.
Showcase
Posters generated through blockrun_image with openai/gpt-image-2 — each a single API call routed through BlockRun, paid from either account credit or a USDC wallet.
Cornell Blockchain Conference 2026 | Cornell Blockchain Conference 2026 | 100 Trillion Tokens milestone |
Prompts and a worked example are in skills/image-prompting/SKILL.md.
Why not just use the APIs directly?
Direct APIs | BlockRun | |
Exa | Sign up, $20/mo minimum | $0.011/call on Base ($0.01 + fee), or exact account usage via |
Polymarket | Undocumented, rate-limited | $0.0085/call on Base ($0.0075 + fee), or exact account usage for reads — plus wallet mode can trade |
DefiLlama | Free tier, rate-limited, no SLA | $0.006/call on Base ($0.005 + fee), or exact account usage via |
Multiple sources | 3 accounts, 3 API keys, 3 billing pages | 1 wallet, or 1 BlockRun account key |
One wallet, or one dashboard-backed API key. All sources.
Configuration
Variable / File | Default | Effect |
| unset | A BlockRun account key ( |
| not created | The same key on disk, for clients that make env vars awkward. Read only when |
|
| Account API service endpoint used after you get a key at |
| created on the first | EVM private key (0x…). Which chain pays is the priority list below, not this file's existence. Also the Polymarket signer (unless |
| unset | Env override of the EVM key — takes precedence over |
| unset | Explicit chain preference: |
| written on first run | Automatic pin: the chain you were already on when your second wallet was provisioned. Keeps a Base user on Base once a Solana session exists, and is outranked by |
| created on the first | Solana private key — the funded wallet on a new install. Which chain pays is the priority list below. |
| unset | Env override of |
|
| Key storage. |
|
| Tool profile ( |
| unset (unlimited) | Hard USD cap on spend for this server process (both rails). In-memory; resets on restart. Per-agent caps via |
| off |
|
|
| Only ask for calls estimated above this many USD. Malformed values fall back to |
| BlockRun Finland relay | Geoblock egress for order placement — defaulted for you. Override to go direct ( |
|
| Hard per-order notional cap. |
| unset | Optional cumulative per-process betting cap. |
|
|
|
| unset | HTTPS proxy for Polymarket CLOB traffic only. |
| unset (unlimited) | Bound pUSD exchange allowances to this many dollars. |
| unset | Optional Polymarket builder attribution code carried on orders. |
Chain selection priority (src/utils/wallet.ts), highest first: .chain preference → SOLANA_WALLET_KEY → .chain-auto pin → non-empty .solana-session → Solana key in the OS keychain → an existing Base wallet keeps Base → otherwise Solana (a fresh install with no wallet at all).
That second-to-last step is the upgrade guard: without it, flipping the default to Solana would move every existing Base-only user onto an empty wallet, and their next paid call would fail on a zero balance with nothing on screen explaining why. None of this applies in account mode — BLOCKRUN_API_KEY has no chain.
The server runs a non-blocking npm registry check at startup and prints an Update available notice to stderr when a newer @blockrun/mcp exists — re-run the install command to upgrade.
Troubleshooting
🤖 Hand this to the agent: the
blockrun-debugskill carries every row below as symptom → cause → fix, plus the diagnostics it can run itself.blockrun-setupandblockrun-upgradecover the other two halves. Install:npx -y @blockrun/mcp@latest skills install.
Insufficient balance/ HTTP 402 after retry → Runblockrun_wallet action:"setup", send USDC on Base (or Solana).blockrundoesn't connect / "MCP server failed" /spawn npx ENOENT→ Almost always a PATH issue: Claude Code can't findnode/npxon its launcher PATH (common with Homebrew / nvm, on CLI and desktop). Fix by passing your shell PATH at install:claude mcp remove blockrun -s user claude mcp add blockrun -s user -e PATH="$PATH" -- npx -y @blockrun/mcp@latestThen restart Claude Code. Or pin absolute paths (
which npx).claude mcp listdoesn't showblockrun→ Checknode -v(≥20.19). Clear the npx cache:rm -rf ~/.npm/_npx. Re-run the install.fetch failed/ balance-check timeout → Base RPC transient outage. The tool falls through 3 public RPCs; retry after 30s. Persistent = local proxy / firewall blocking outbound RPC.Video/Music generation timed out→ Upstream queue congestion. Whether it cost anything depends on the rail, and the error says which: on the Base wallet payment settles on completion, so it is not charged and a retry is safe; on Solana music and every account-rail media job the gateway bills at submit, so the job is charged, the error names it, and re-running bills a second one — checkblockrun_wallet action:"report"instead.blockrun_pricesaysEquity quotes are not served (gateway 501 …)→ Equity price/history were withdrawn on 2026-09-05; not an outage, and nothing was charged (the wallet is never asked to sign). The ticker catalog (action:"list" category:"stocks") is still free. Equity coverage: hello@blockrun.ai.blockrun_marketsonsports/*fails — before 0.49.0 asAPI error after payment: 502with no balance change → Predexon'ssports/*routes have been down upstream since 2026-08-04; the gateway releases the payment on that upstream 500, so the call is not charged (the error says so when the gateway's "payment NOT charged" confirmation is in the response; otherwise it tells you to checkblockrun_wallet action:"report"). For sports odds usepath:"markets/search"withparams:{ q: "NBA" }, orpolymarket/eventswithparams:{ search: "NBA" }— the baremarketsroute and itsleaguefilter were removed upstream on 2026-08-04 and 404 before payment. Upgrade to ≥ 0.49.0 so the error says all of this itself.No spend-confirmation dialog although
BLOCKRUN_CONFIRM_SPEND=on→ Your client doesn't support MCP elicitation (Windsurf, Codex, Gemini CLI); the server proceeds without asking by design. UseBLOCKRUN_BUDGET_LIMITas the guard, or a client from the support table.Polymarket: neg-risk ("winner") market buy fails, or
redeemreverts, though setup shows ready → Re-runaction:"setup" confirm:trueonce (grants the on-chain approvals a pre-upgrade deposit wallet may lack — including the collateral-adapter approvalsredeemneeds). See the setup guide.
FAQ
What is BlockRun MCP? An open-source MCP server that gives Claude and other agents 19 tools for real-time data and real actions (trading, media, on-chain), paid per call — from a self-custody wallet or a BlockRun account key.
Do I need an API key or an account? No. A wallet is auto-created locally on first run; you fund it with USDC and there are no signups, dashboards or keys to rotate.
But you can have one. If your team can't hand a wallet to an agent, sign in at user.blockrun.ai, mint a key at Dashboard → Keys, top up account credit by card or wire at Dashboard → Credits, and set BLOCKRUN_API_KEY. The MCP then sends paid service calls to api.blockrun.ai and bills exact usage against that account credit — no $0.001 per-call network fee, no per-call minimum — with a ledger at Dashboard → Activity. Everything works except the parts that genuinely need a keypair: Polymarket trading, wallet balances/top-ups, and the wallet-indexed blockrun_realface action:"list".
Which is cheaper? Account billing, slightly — it charges exact metered usage with no per-call minimum and no $0.001 transaction fee. Wallet mode buys you self-custody and Polymarket trading instead.
How much does it cost?
Pay-per-call — fractions of a cent to a few cents. The free tier (blockrun_chat mode:"free", blockrun_dex, crypto blockrun_price, blockrun_models) is $0. $5 of USDC or account credit covers thousands of queries.
Is it safe / non-custodial?
Yes. Your private key never leaves your machine (~/.blockrun/.session by default, 0600). x402 payments and Polymarket orders are signed locally — BlockRun forwards signed payloads and cannot move your funds.
Which clients work? Any MCP client that can spawn a stdio server. Verified on Claude Code and Codex CLI, in daily use on OpenClaw; install paths documented for Claude Desktop, Cursor, VS Code, Gemini CLI and Windsurf — see the client table. The spend-confirmation dialog additionally needs MCP elicitation (Claude Code, Cursor, VS Code).
Does it have a UI? On MCP-Apps hosts (Claude Desktop, claude.ai, VS Code, Cursor) the Polymarket preview is a live order card and the wallet is a panel — see MCP Apps ↑. Terminal clients get the same information as text.
Can I make the agent ask before it spends?
Yes — BLOCKRUN_CONFIRM_SPEND=on. Every paid tool pauses with the estimated charge and nothing is signed until you approve. Human-in-the-loop payments ↑
Can it really place real bets?
Yes. blockrun_polymarket places real, USDC-settled orders on Polymarket's CLOB — confirm-gated and capped. Read the odds with blockrun_markets, place with blockrun_polymarket.
Base or Solana?
Both. Switch instantly with blockrun_wallet action:"chain". Three things are Base-only, and each says so when you call them on Solana: blockrun_defi (DefiLlama) and blockrun_modal, which the Solana gateway does not serve, and claude-* chat with thinking (the native /v1/messages path pays on Base; a plain claude-* call takes the compat path on Solana). Media generation, markets, search and Polymarket all settle on either chain.
From the BlockRun ecosystem
BlockRun is agent-native AI infrastructure — one wallet with x402 USDC micropayments, or one account API key with card-funded credit, across every surface:
⚡ ClawRouter — the agent-native LLM router for OpenClaw. 78 models, <1ms local routing, USDC on Base & Solana.
🤖 BRCC — BlockRun for Claude Code: smart routing + x402 payments, purpose-built for Claude Code.
🐍 ClawRouter-Hermes — Python plugin wiring NousResearch Hermes into the ClawRouter proxy.
📚 Docs · Models & pricing — full SDKs, APIs, and the model catalogue.
Support & community
💬 Community Telegram | |
🐦 X / Twitter | |
📖 Documentation | |
🐛 Issues |
Contributing
PRs welcome. See CONTRIBUTING.md for setup, the tool-vs-skill design rule, and how to add a new partner API.
MIT License · blockrun.ai — Agent-native AI infrastructure
Website · npm · Docs · @BlockRunAI
Available Tools
19 toolsblockrun_chatA
Get a second opinion from another AI model, or use a specialized model for a specific task.
Notable modes:
mode:"powerful" → Claude Opus 5, Claude Opus 4.8, GPT-5.6-sol, Claude Fable 5 (frontier, 1M context)
mode:"reasoning" → Claude Opus 5, GPT-5.6-sol, Kimi K3, Grok 4.3, deepseek-v4-pro
mode:"coding" → Claude Opus 5, GPT-5.3-codex, Kimi K3, Grok Build, GLM-5.2
mode:"cheap" → deepseek-v4-pro, Qwen3.7 Flash, MiniMax M3, Tencent Hy3
mode:"glm" → Zhipu GLM-5 / 5.2 / 5.1 / 5-Turbo (strong at coding)
mode:"free" → free models (no cost)
Pick directly: model:"anthropic/claude-opus-5", model:"moonshot/kimi-k3", model:"openai/gpt-5.6-sol", model:"xai/grok-4.5", model:"nvidia/gpt-oss-120b" (free).
Run blockrun_models to see all available models with pricing.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Routing mode: powerful/reasoning = frontier models (Opus 5, GPT-5.6-sol, Kimi K3), coding = code-specialized, glm = Zhipu GLM (great for coding), cheap = budget models, free = $0 models (ignored if model specified) | |
| stop | No | Up to 4 stop sequences; generation halts when any is produced | |
| model | No | Specific model ID (e.g., 'moonshot/kimi-k3', 'openai/gpt-5.6-sol', 'zai/glm-5') | |
| system | No | Optional system prompt | |
| message | Yes | Your message to the AI | |
| agent_id | No | Agent identifier. If a budget was delegated for this agent_id via blockrun_wallet action:'delegate', spending is tracked and enforced. The agent is hard-stopped when its budget is exhausted. | |
| messages | No | Conversation history for multi-turn context. When provided, 'message' is appended as the final user turn. Use with explicit 'model' param (defaults to 'openai/gpt-5.6-terra' if not specified). Note: if you include a role:'system' entry in messages[], do not also pass the system param to avoid duplicate system messages. | |
| thinking | No | Anthropic extended thinking. Only honored for anthropic/claude-* models — these go direct to the native /v1/messages endpoint and the response includes verbatim type:'thinking' blocks with their original signature. Ignored for non-Claude models (no native thinking channel). | |
| max_tokens | No | Max tokens in response | |
| temperature | No | Creativity 0-2 | |
| response_format | No | Set to 'json_object' to force valid JSON output (no markdown fences). Works across all providers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal non-read-only, non-destructive, non-open-world behavior, leaving room for the description to explain side effects. The description hints at cost via 'free models (no cost)' and budget enforcement is mentioned in the agent_id schema param, but it never explicitly states that non-free models incur charges, that calls are external and may be slow, or that responses are non-deterministic. It does convey the core behavior: sending a message to an AI and getting a response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, then uses compact bullet lists for modes and direct model picks, ending with a pointer to blockrun_models. Every sentence earns its place; there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters and nested objects, the description covers the most decision-heavy aspects (mode selection, model IDs, model capabilities) thoroughly. It leaves out response format and cost details, but the schema documents parameters well and the chat response nature is implicit. A brief note on expected latency or output structure could push it to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds substantial value beyond the schema. It maps each enum mode to concrete model IDs and describes qualitative distinctions (frontier, 1M context, strong at coding, no cost). It also gives direct model pick examples and clarifies that 'free' is ignored when a model is specified, details not present in the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a second opinion from another AI model, or use a specialized model for a specific task.' It clearly identifies this as a text-chat/completion tool and differentiates it from sibling media tools (video, image, music, speech). The listed modes further cement what the tool does without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: second opinions or specialized tasks. It provides mode-by-mode guidance (powerful, reasoning, coding, cheap, glm, free) with concrete model mappings, and directs the agent to run blockrun_models for the full catalog with pricing. It stops short of explicitly stating exclusions versus siblings, but the specialized modes and direct model picks imply the selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_defiARead-only
DeFi fundamentals via DefiLlama — protocol TVL, chain TVL, yield pools (APY), token prices. Pays per call in USDC, no API key.
Paths (GET only; price = base + the gateway's flat tx fee, $0.001 today — we reserve $0.002; the 402 header carries the exact charge):
protocols ($0.005 base) — all DeFi protocols ranked by TVL
protocol/{slug} ($0.005 base) — one protocol's TVL history + chain breakdown, e.g. protocol/aave-v3
chains ($0.005 base) — TVL by chain
yields ($0.005 base) — yield pools with APY + TVL (large; filter client-side)
prices/{coins} ($0.001 base) — token prices, coins like 'base:0x833589...,coingecko:ethereum'
Examples: blockrun_defi({ path: "protocol/uniswap-v3" }) blockrun_defi({ path: "prices/coingecko:bitcoin,coingecko:ethereum" }) blockrun_defi({ path: "chains" })
Use blockrun_price (free) for plain spot quotes, blockrun_dex (free) for DEX pairs — this tool is for protocol/TVL/yield fundamentals.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Endpoint under /v1/defillama/, e.g. 'protocols', 'protocol/aave-v3', 'chains', 'yields', 'prices/coingecko:ethereum' | |
| agent_id | No | Agent identifier for budget tracking and enforcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds valuable operational context: per-call payment in USDC, the base+flat fee structure ($0.001 today, $0.002 reserved), the 402 header for exact charge, GET-only paths, and the note that yields is large and should be filtered client-side. This goes beyond what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-structured: it opens with purpose, then covers cost, then lists paths with base prices, then examples, then alternatives. Every sentence carries useful information; nothing is redundant. While it could be slightly more compact, the density is justified given the multiple endpoints and the pricing detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a data-retrieval tool with no output schema, the description covers the essential operational details: endpoints, cost model, examples, and filtering advice. It does not specify response shapes, but for a GET-only data fetch, that is typically not critical for invocation. The inclusion of payment semantics and alternative routing makes it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is high. The description adds further meaning with concrete examples (e.g., 'protocol/aave-v3', 'prices/coingecko:bitcoin,coingecko:ethereum') and clarifies the path format (endpoint under /v1/defillama/). This enhances the agent's ability to construct valid paths without guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('fetches' implied by 'DeFi fundamentals via DefiLlama') and resource with clear scope: protocol TVL, chain TVL, yield pools, token prices. It explicitly distinguishes itself from siblings blockrun_price and blockrun_dex, so an agent can immediately infer what this tool is for and what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use blockrun_price (free) for plain spot quotes, blockrun_dex (free) for DEX pairs — this tool is for protocol/TVL/yield fundamentals.' This directly names alternative tools and the conditions that select them, leaving no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_dexARead-only
Get real-time DEX data from DexScreener. FREE - no payment required.
Use for:
Token prices and liquidity across chains
Trading volume and price changes
Finding token pairs and contracts
Examples: blockrun_dex({ query: "SOL" }) -> Search for SOL pairs blockrun_dex({ token: "So11...xxx" }) -> Get specific token data blockrun_dex({ symbol: "PEPE" }) -> Search by symbol
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Filter by chain (ethereum, solana, base, etc.) | |
| query | No | Search query (token name, symbol, or address) | |
| token | No | Token address for direct lookup | |
| symbol | No | Token symbol to search |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive, so the description does not need to cover safety. It adds useful context about being real-time and free, but does not disclose response format, pagination, rate limits, or external API dependencies. This is acceptable given the annotations but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a purpose statement, bulleted use cases, and examples that are easy to parse. The 'FREE - no payment required' line is somewhat extraneous but does not hurt, and the examples justify their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only nature, optional parameters, and full schema coverage, the description covers the main usage scenarios and gives enough example invocations for an agent to call the tool. It lacks output-shape guidance, but that is less critical for a data query tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents chain, query, token, and symbol. The examples add small usage clarity but mostly restate what the schema already says, so the description adds little semantic value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets real-time DEX data from DexScreener and lists specific use cases like token prices, liquidity, volume, and finding pairs. It does not explicitly contrast with siblings like blockrun_defi or blockrun_price, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use for' section gives concrete contexts for when the tool applies, and the examples show typical invocation patterns. It does not explicitly say when not to use it or name alternative sibling tools, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_exaARead-only
Neural web search via Exa — understands meaning, not just keywords. Great for research.
Common paths (all POST, body shapes documented in the exa-research skill):
search — body: { query, numResults?, category?, includeDomains?, excludeDomains? } ($0.010 base + tx fee)
answer — body: { query } ($0.010 base + tx fee)
contents — body: { urls: [...] } ($0.002/URL + ONE tx fee, up to 100)
find-similar — body: { url, numResults? } ($0.010 base + tx fee) Tx fee = the gateway's flat network fee, $0.001 today (we reserve $0.002); the 402 header carries the exact charge.
Categories for search: "news", "research paper", "company", "tweet", "github", "pdf".
Full request/response shapes + worked research workflows in the exa-research skill.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON body for the call. Sent as POST. Required for all four endpoints. | |
| path | Yes | Endpoint name under /v1/exa/, e.g. 'search', 'answer', 'contents', 'find-similar' | |
| agent_id | No | Agent identifier for budget tracking and enforcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover read-only and non-destructive behavior, so the description appropriately focuses on adding value: pricing, per-URL limits, 402 header handling, and allowed category values. These behavioral details go beyond the annotations but do not exhaustively describe every edge case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The bulleted list for endpoints and pricing is easy to scan, the essence (semantic search) is front-loaded, and the final pointer to the skill compresses unnecessary detail. Every line carries concrete reference information; there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because the output schema is absent, the description delegates full request/response shapes to the exa-research skill, which is an acceptable pointer given the tool's complexity. It covers request shapes and costs, but an agent expecting a self-contained answer would still need to consult the skill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives the exact body shape for each path, marks optional fields with '?', lists category values, and provides cost figures. This is far richer than the input schema's property descriptions, which only say 'endpoint name' and 'JSON body for the call'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Neural web search via Exa — understands meaning, not just content,' which gives a concrete verb and resource. It enumerates four endpoints (search, answer, contents, find-similar), making it clearly distinct from generic search siblings like blockrun_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: 'Great for research' and emphasizes semantic meaning over keywords. However, it does not explicitly name which sibling tools are alternatives or state when not to use this tool. Still, the context is sufficient for an agent to gauge when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_imageA
Generate or edit images via BlockRun. Pays with USDC on the ACTIVE chain — Base or Solana (see blockrun_wallet) — no separate API keys needed.
Actions:
generate (default): Create image from text prompt
edit: Transform an existing image using img2img
Generation models (1024x1024 base price; larger sizes cost more on gpt-image-*):
openai/gpt-image-2 ($0.06–0.12) — flagship, reasoning-driven, multilingual on-image text + character consistency (default)
openai/gpt-image-1 ($0.02–0.04) — GPT native image generation
google/nano-banana ($0.05) — Gemini-family image model
google/nano-banana-2 ($0.09) — Gemini 3.1 Flash, pro-level quality at Flash speed (1024x1024 only)
google/nano-banana-pro ($0.10; $0.15 at 4096px) — up to 4K, strongest photorealism
xai/grok-imagine-image ($0.02) — stylized, fast
xai/grok-imagine-image-pro ($0.07) — higher quality Grok Imagine
zai/cogview-4 ($0.015) — cheapest, photorealistic detailed scenes
bytedance/seedream-5-pro ($0.045; $0.09 when both dimensions exceed 1024) — Seedream 5.0 Pro; cheap widescreen at 1280x720 / 2048x1024, large formats up to 2848x1600
Edit (img2img) models: openai/gpt-image-2 (default), openai/gpt-image-1, google/nano-banana, google/nano-banana-2, google/nano-banana-pro Multi-image edit: pass an array of 2–4 source images to "image" to fuse them in one render (openai/* up to 4, google/* up to 3) — e.g. a subject plus a sprite layout guide, or a reference plus a brand logo. Source images and masks accept a base64 data URI, an http(s) URL, or a local file path (auto-encoded). Inpaint mask (openai/gpt-image-* only) via "mask"; not combinable with multiple source images.
| Name | Required | Description | Default |
|---|---|---|---|
| mask | No | Inpaint mask for edit action (openai/gpt-image-* only): a base64 data URI, http(s) URL, or local file path. Transparent areas of the mask are regenerated. Cannot be combined with multiple source images. | |
| size | No | Image size. Common values: 1024x1024 (all models), 1536x1024 / 1024x1536 (gpt-image-*), 2048x2048 / 4096x4096 (nano-banana-pro), 1280x720 / 2048x1024 / 2048x2048 / 2848x1600 (seedream-5-pro) | 1024x1024 |
| image | No | Source image(s) for edit action: a base64 data URI, an http(s) URL, or a local file path (auto-encoded to a data URI) — or an array of 2–4 to fuse into one render (e.g. subject + layout guide, or reference + brand logo). openai/* accepts up to 4, google/* up to 3; a mask cannot be combined with multiple images. | |
| model | No | Model to use (default: openai/gpt-image-2 for both generate and edit). gpt-image-2 renders on-image text best; nano-banana-pro for 4K photorealism; cogview-4 / grok-imagine-image for cheap drafts. | |
| action | No | generate: create from text; edit: transform existing image | generate |
| inline | No | Return a small inline image preview (thumbnail) the client can render in-conversation, in addition to the full-resolution URL. Defaults to the BLOCKRUN_INLINE_IMAGES env setting (off unless set). Rich clients (e.g. the VS Code extension) render it; plain terminals ignore it. Off keeps responses lightweight. | |
| prompt | Yes | Image description or edit instructions | |
| agent_id | No | Agent identifier for budget tracking and enforcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sparse annotations (readOnlyHint=false, destructiveHint=false), the description discloses payment mechanics (USDC on active chain), per-model pricing, multi-image and mask constraints, source input formats, and the inline preview behavior (full-resolution URL plus optional thumbnail). This gives the agent a rich behavioral model of what happens when the tool is invoked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but earns every word. It is structured with clear sections: purpose/payment, actions, model list with pricing and capabilities, edit specifics, multi-image rules, source formats, and mask constraints. Critical info (purpose, payment) is front-loaded, and the bulletized model list aids scannability despite the density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, no output schema, and multiple model-specific behaviors, the description covers all necessary invocation details: required prompt, defaults, pricing, chain/payment, image sources, action variations, inline output preview, and constraints. An agent can make a confident, correct call using only the description and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds substantial semantics: it maps each model to its specific use case and cost, explains default model behavior per action, clarifies multi-image array limits per provider, and details mask compatibility rules. This goes far beyond the schema's short field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Generate or edit images via BlockRun', a specific verb and resource, and clearly distinguishes itself from media siblings like blockrun_video or blockrun_music. The generate/edit action split further clarifies the two main operational modes, leaving no ambiguity about the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance for selecting actions (generate vs edit) and models, including cost/quality trade-offs and defaults ('gpt-image-2 renders on-image text best; nano-banana-pro for 4K photorealism; cogview-4 / grok-imagine-image for cheap drafts'). It also directs the agent to blockrun_wallet for payment context retain full clarity. While it does not name other sibling tools as exclusions, the tool name and media-type focus make when to use it unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_marketsARead-only
Prediction market + derivatives data via Predexon aggregator. Flat $0.0075 base per call (every endpoint) plus the gateway's network fee — $0.001 on Base today, none quoted on Solana; the 402 header carries the exact charge (we reserve $0.0095).
POLYMARKET (Tier 1):
polymarket/events, polymarket/markets — list events/markets (filter, sort, paginate)
polymarket/markets/keyset, polymarket/events/keyset — same data, cursor-based keyset pagination (params: { pagination_key })
polymarket/crypto-updown — crypto up/down markets
polymarket/market-price/:token_id — current/historical price
polymarket/candlesticks/:condition_id — OHLCV by market
polymarket/candlesticks/token/:token_id — OHLCV by single outcome token
polymarket/volume-chart/:condition_id — volume w/ YES/NO split
polymarket/orderbooks, polymarket/trades, polymarket/activity
polymarket/markets/:token_id/volume, polymarket/markets/:condition_id/open_interest
polymarket/positions — user positions
polymarket/leaderboard, polymarket/leaderboard/market/:condition_id
polymarket/cohorts/stats, polymarket/market/:condition_id/top-holders
polymarket/uma/markets, polymarket/uma/market/:condition_id — UMA oracle questions/timeline
POLYMARKET (Tier 2 — wallet/smart-money analytics):
polymarket/wallet/:wallet — full smart-wallet profile
polymarket/wallet/:wallet/markets, .../similar
polymarket/wallet/pnl/:wallet, .../positions/:wallet, .../volume-chart/:wallet
polymarket/wallets/profiles — batch profiles, GET with params: { addresses } (POST 404s); polymarket/wallets/filter — AND/OR filter
polymarket/market/:condition_id/smart-money, polymarket/markets/smart-activity
WALLET IDENTITY & CLUSTERING (Tier 2) — cross-context labels + on-chain relationship graph:
polymarket/wallet/identity/:wallet — fetch identity + profile metadata for one wallet
polymarket/wallet/identities — POST { addresses: [...] } for bulk lookup (up to 200 wallets)
polymarket/wallet/:address/cluster — discover wallets connected via on-chain transfers + identity proofs
SPORTS — sports/* (categories, markets, markets/:game_id, outcomes/:predexon_id) DEGRADED, do not call: Predexon 500 on every call since 2026-08-04; the gateway releases the payment on that upstream 500. Use markets/search { q: "NBA" } or polymarket/events { search: "NBA" } instead — no live route takes a "league" param.
KALSHI: kalshi/markets, kalshi/trades, kalshi/orderbooks LIMITLESS / OPINION / PREDICT.FUN: {platform}/markets, {platform}/orderbooks BINANCE FUTURES: binance/candles/:symbol, binance/ticks/:symbol
CROSS-PLATFORM:
markets/search — search every venue in one call (search term is "q"). The only canonical-layer route left: markets, markets/listings, outcomes/:id and matching-markets(/pairs) were removed upstream 2026-08-04 and 404 before payment.
REQUEST CONTRACTS:
Discover current markets with markets/search (its search term is "q"), then resolve the chosen Polymarket market with polymarket/markets/keyset and condition_id.
On polymarket/markets{,/keyset} the free-text filter is "search" (NOT "q"), and status:"open"/"closed" replaces Gamma's active/closed. "sort", "end_after", and "end_before" are supported; "order"/"ascending" are not.
Candlesticks interval is integer minutes ("1440", not "1h"); it is OPTIONAL (the server defaults). Which intervals a market serves varies — 1440 may work where 60 does not. start_time/end_time are Unix seconds.
polymarket/orderbooks requires token_id plus start_time/end_time in Unix milliseconds.
Smart-money needs a smart-wallet CRITERION (min_trades, min_volume, min_roi, min_*_pnl, min_win_rate, min_profit_factor). "window" only scopes time and is NOT sufficient on its own. Default: { window: "30d", min_trades: "100" }.
Pass query params via 'params' (GET) — a '?' in 'path' is refused before payment, because path-carried values bypass the pre-payment checks above. Use 'body' only for POST endpoints (e.g. polymarket/wallet/identities).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON body for POST queries (triggers pmQuery — most endpoints are GET) | |
| path | Yes | Endpoint path, no query string, e.g. 'polymarket/events', 'kalshi/markets' (filter via params: { ticker: 'KXBTC-25MAR14' }), 'polymarket/wallet/0xabc...', 'markets/search' | |
| params | No | Query parameters for GET requests (e.g. markets/search uses { q: 'Bitcoin', status: 'open', venue: 'polymarket', limit: '20' }) | |
| agent_id | No | Agent identifier for budget tracking and enforcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and non-destructive annotations, the description discloses pricing and 402-charge behavior, upstream 500 failures releasing payment, '?' in path being refused before payment, POST 404s, time-unit requirements, and optional/default behavior for candlestick intervals. This is rich behavioral context the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized with section headers and compact endpoint bullets, and almost every sentence carries useful operational information. It is long, and a few instructions like the markets/search 'q' parameter are repeated, but the length is largely justified by the large endpoint surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, multi-endpoint data tool, the description is exceptionally complete on request contracts, degraded routes, and failure modes. However, there is no output schema and the description does not specify return-value shapes, so an agent must infer response structure mostly from endpoint labels.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all parameters, but the description adds substantial meaning: q vs search field names, keyset pagination, Unix seconds vs milliseconds, body only for POST endpoints, and endpoint path rules. It also gives concrete examples for path and params, making correct invocation much clearer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: prediction-market and derivatives data via the Predexon aggregator, then enumerates exact endpoint families (Polymarket, Kalshi, sports, Binance futures, cross-platform). This clearly differentiates it from Polymarket-only siblings by emphasizing cross-venue coverage and 'search every venue in one call'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit endpoint-level usage rules and alternatives, such as warning that sports/* is degraded and directing the agent to markets/search or polymarket/events instead. However, it does not compare against sibling tools like blockrun_polymarket or blockrun_polymarket_read, so cross-tool selection guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_modalADestructive
Run isolated code in a BlockRun-hosted Modal sandbox — disposable remote container, optional GPU.
Use when you need: a clean ephemeral environment, GPU access (T4/L4/A10G/A100/H100 — those five only), or a safer place for untrusted code. Prefer local tools for normal repo work.
⚠️ timeout IS THE BILLED LIFETIME — charged upfront in full, NEVER refunded. It is not an idle timeout: you pay for the time you ASK for, not the time you use, and terminating early refunds nothing. Ask for what you need, not a safe-looking ceiling.
timeout ≤ 300s → flat: $0.0120 CPU · $0.0520 T4 · $0.0820 L4 · $0.1020 A10G · $0.2020 A100 · $0.4020 H100
timeout > 300s → PER-HOUR × the full requested lifetime: $0.10/h CPU · $1.50 T4 · $2.00 L4 · $2.50 A10G · $4.00 A100 · $8.00/h H100 e.g. { timeout: 600, gpu: "A100" } = $0.6687 · { timeout: 86400, gpu: "H100" } = $192.00
Common paths (all POST):
sandbox/create — body: { image?, timeout?, cpu?, memory?, gpu?, setup_commands? } (see above — $0.0120 to $192.00)
sandbox/exec — body: { sandbox_id, command: ["python","-c","..."], timeout? } ($0.0030)
sandbox/status — body: { sandbox_id } ($0.0030)
sandbox/terminate — body: { sandbox_id } ($0.0030)
Full pricing tables + GPU details in the modal skill.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON body. Sent as POST. | |
| path | Yes | Endpoint under /v1/modal/, e.g. 'sandbox/create', 'sandbox/exec' | |
| agent_id | No | Agent identifier for budget tracking and enforcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, open-world, destructive tool. The description adds crucial behavioral context beyond annotations: timeout is the billed lifetime, charged upfront with no refunds, sandboxes terminate on timeout/budget reset, and GPU access is capped at H100. This is fully consistent with readOnlyHint=false and destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being long, the description is front-loaded with purpose and usage guidance, then uses compact bullet lists for pricing and endpoint schemas. Every sentence earns its place, espacially the billing warning, which is essential for correct invocaation and cost awareness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-endpoint, high-stakes billing tool with no output schema, the description is nearly complete: it covers paths, request bodies, pricing, GPU limitations, termination behavior, and budget replan. The main gap is that it never explicitly states what responses look like, e.g., that sandbox/create returns a sandbox_id needed for subsequent calls, though the endpoint list implies this chaining.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only describes 'body' as a JSON POST body, so the description adds real semantic value by specifying per-endpoint body shapes such as { image?, timeout, cpu?, memory?, gpu?, setup_commands? } for sandbox/create and { sandbox_id, command, timeout? } for sandbox/exec. It also clarifies path examples and the billing meaning of timeout, going well beyond the thin schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Run isolated code in a BlockRun-hosted Modal sandbox — disposable remote container, optional GPU.' It then lists concrete endpoints under /v1/modal/, making the tool's scope unmistakable and clearly distinct from sibling tools like blockrun_image or blockrun_chat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('clean ephemeral environment', 'GPU access', 'safer place for untrusted code') and when not to ('Prefer local tools for normal repo work'). It also enumerates the available POST paths, helping the agent choose the right operation within the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_modelsARead-only
List available AI models with pricing. Use to discover models and compare costs.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category | all |
| provider | No | Filter by provider (e.g., 'openai', 'anthropic') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds the pricing angle and implies a read-only listing, but it does not disclose output shape, pagination, or how 'available' is determined under the open-world hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The core purpose is front-loaded, and the usage guidance follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with optional filters and full schema documentation, the description provides enough context for an agent to invoke it correctly. It could mention filtering by category/provider, but the schema already documents those options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented. The description does not add parameter-level detail, which is acceptable because the schema carries that burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('available AI models'), and a key attribute ('with pricing'). It is clearly distinct from the sibling tools, which target media, finance, and search domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: 'Use to discover models and compare costs.' It does not explicitly state when not to use it or name alternatives, but no sibling is a close substitute for listing models, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_musicA
Generate music tracks via BlockRun x402 (async, client-polled).
Generates a full-length ~3 minute MP3 track. Takes 1-3 minutes to complete. The tool submits the job and, for slower tracks, polls until it is ready. On the Base wallet payment settles only when a finished track is returned — if the job fails you are not charged; if this client gives up while a paid request is still in flight the gateway may still settle, and the error text says so. On Solana and on the account rail the job is billed when the gateway ACCEPTS it, so a job that later fails or outlives the poll budget is still charged — the error text says so and names the job, which stays claimable for ~48h.
Model: minimax/music-2.5+ ($0.1575/track, up to ~4 min)
Returns a permanent BlockRun-hosted URL.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Music model to use | minimax/music-2.5+ |
| lyrics | No | Custom lyrics. Cannot be used with instrumental: true | |
| prompt | Yes | Music style, mood, or description. E.g. 'upbeat synthwave with neon pads', 'chill lo-fi beats', 'epic orchestral film score' | |
| agent_id | No | Agent identifier for budget tracking and enforcement. | |
| instrumental | No | Generate without vocals (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the sparse annotations (readOnlyHint false, destructiveHint false) by offering rich behavioral detail: async client-polled execution, 1-3 minute duration, per-rail billing differences (Base vs Solana/account), failure charge policies, job claimability for ~48h, and a permanent URL return. This is exactly the type of context that helps an agent anticipate side effects and cost implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides critical operational details. While the billing paragraph is long, every sentence carries information the agent needs (e.g., charge timing, failure handling, job recovery). It is structured into clear sections and avoids fluff, though it could be slightly tightened by moving pricing into a single line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex (async, polling, multiple payment rails) and has no output schema, so the description carries full responsibility for return values and behavior. It covers the output (permanent URL), duration, cost, failure modes, and post-hoc job claimability. Nothing an agent needs to decide whether to call this tool or interpret its results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has meaningful documentation. The tool description adds only the model default and pricing context ('minimax/music-2.5+ ($0.1575/track)'), which is somewhat useful but not essential for parameter understanding. It does not clarify any parameter semantics beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Generate music tracks via BlockRun x402' – a specific verb and resource. It clearly distinguishes from sibling content tools (blockrun_video, blockrun_image, blockrun_speech) by naming the output type (music tracks) and specifying 'full-length ~3 minute MP3 track'. An agent can immediately understand what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than explicit. The description states it generates music tracks and details billing/polling behavior, but it never says 'use this when you need music, use blockrun_speech for speech' or provides any alternative guidance. There are no exclusions or conditions for choosing this over siblings, leaving the agent to infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_phoneADestructive
Phone-number intelligence, US/CA number provisioning, and outbound AI voice calls.
Common paths (path = everything after /v1/):
phone/lookup POST body: { phoneNumber } ($0.01)
phone/lookup/fraud POST body: { phoneNumber } — SIM-swap + call-forwarding signals ($0.05)
phone/numbers/buy POST body: { country?: "US"|"CA", areaCode? } — 30-day lease ($5.00)
phone/numbers/renew POST body: { phoneNumber } — extend 30 days ($5.00)
phone/numbers/list POST body: {} — your wallet-owned numbers ($0.001)
phone/numbers/release POST body: { phoneNumber } — release back to pool (free)
voice/call POST body: { to, task, from, voice?, max_duration?, ... } ($0.54 flat)
voice/call/{call_id} GET (no body) — poll status + transcript (free)
REQUIRED for voice/call: from must be a number your wallet owns. Provision one with phone/numbers/buy first ($5, 30-day lease).
Voice presets: nat, josh, maya, june, paige, derek, florian. Phone numbers use E.164 format (e.g. +1 followed by 10 US digits, or +).
Voice call flow + voice preset details + full body shapes in the phone skill.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON body. Sent as POST. Omit for the free GET poll (voice/call/{call_id}). | |
| path | Yes | Endpoint after /v1/. Use 'phone/...' for lookup + number ops, 'voice/call' for outbound AI calls, 'voice/call/{id}' (no body) to poll status. | |
| agent_id | No | Agent identifier for budget tracking and enforcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false; the description goes further by disclosing costs, 30-day leases, release-to-pool side effects, and the wallet-ownership requirement. It also marks which operations are free, which are paid, and what the flat call rate is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well structured: a one-line summary, a compact bulleted endpoint list with pricing, and short requirement/format sections. Every line carries actionable information with no filler. The critical requirement about wallet-owned numbers is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition covers all main endpoints, prerequisites, costs, number format, and voice presets, which is strong for a multi-endpoint tool. However, it defers 'full body shapes' for voice/call to an external `phone` skill and leaves the semantics of `task` undefined, so an agent may need additional information to construct a fully valid voice call request.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only describes path generically and body as a JSON object, but the description maps specific path strings to endpoints, lists exact body key shapes, marks `from` as required for voice/call, and gives E.164 formatting. This is far more semantically useful than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise summary: 'Phone-number intelligence, US/CA number provisioning, and outbound AI voice calls.' It then enumerates eight distinct endpoints with method, body, and purpose, making its scope and resource clear and separating it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit endpoint routing under 'Common paths', states the prerequisite that voice/call 'from' must be a wallet-owned number provisioned via phone/numbers/buy, and explains when to use the free GET poll instead of a POST. This gives clear when-to-use and prerequisite guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_polymarketADestructive
Trade on Polymarket prediction markets (CLOB V2, Polygon). REAL MONEY — orders spend pUSD held in your Polymarket deposit wallet, signed locally by your BlockRun key. Free tool (no BlockRun API charge); discover markets/prices/token IDs with blockrun_markets first.
Run action:"setup" FIRST (and again after funding). It creates a gasless deposit wallet owned by your key, checks pUSD balance + exchange approvals, and prints funding instructions. Zero config — no Polymarket account or API keys; setup bootstraps its credentials from your wallet key.
Actions:
setup — create/inspect deposit wallet, funding, approvals (confirm:true to sign the approval batch), region check. Idempotent.
fund — top up the deposit wallet from your OWN Base USDC, gasless (confirm:true). amount_usd required. BlockRun pays the gas + charges $0.01; you need no ETH. Non-custodial (USDC → Polymarket bridge → your vault).
buy / sell — token_id (or condition_id+outcome) + either price+size (limit) or amount_usd (market buy) / size (market sell). confirm:true REQUIRED to place; omitting it returns a dry-run preview. Per-order cap: POLYMARKET_MAX_BET_USD (default $25).
orders — list open orders (optional condition_id filter)
cancel — order_id:"…" or all:true
positions — holdings incl. redeemable winnings (free Data-API)
redeem — claim resolved winnings for condition_id (confirm:true; gasless)
withdraw — cash out pUSD → native USDC on Base to your agent wallet (confirm:true). amount_usd optional (default: full balance); to_address optional (default: your wallet).
Prices are probabilities 0–1 on the market's tick grid. token_id comes from blockrun_markets Polymarket data. Geoblock is handled by default (CLOB traffic routes through BlockRun's Finland egress) — setup reports your region status. Complying with Polymarket's terms for the user's jurisdiction is the user's responsibility.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | cancel: cancel ALL open orders | |
| size | No | Shares — required for limit orders and market sells | |
| price | No | Limit price as probability (0–1). Omit for a market order. | |
| action | Yes | Operation to perform | |
| confirm | No | Must be true to place orders / sign approvals / redeem. Omit for a dry-run preview. | |
| outcome | No | Outcome label (e.g. 'Yes') — used with condition_id when token_id is omitted | |
| agent_id | No | Tag for the session betting ledger (bets do NOT draw from the x402 API budget) | |
| order_id | No | Order ID to cancel | |
| token_id | No | Outcome token ID (decimal ERC-1155 id from blockrun_markets clobTokenIds) | |
| post_only | No | Maker-only limit order (rejected if it would cross the book) | |
| amount_usd | No | pUSD dollars — to spend (market buy) or to cash out (withdraw; default full balance) | |
| expires_at | No | Unix seconds expiry (GTD only, ≥ ~3 min in the future) | |
| order_type | No | Default: GTC for limit orders, FOK for market orders | |
| to_address | No | withdraw: destination address on Base (default: your agent wallet) | |
| condition_id | No | Market condition ID (0x…). With `outcome` it resolves token_id; required for redeem. | |
| max_fill_price | No | Market orders only: the worst fill you accept (0-1). Defaults to the worst fill of this session's last preview for the same token+side, so a bare confirm:true is already held to what was quoted — a book that moved past it is refused, not signed. Pass this to widen or tighten that bound. Buy = ceiling, sell = floor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description openly warns 'REAL MONEY — orders spend pUSD held in your Polymarket deposit wallet, signed locally by your BlockRun key'. It explains the dry-run preview when confirm is omitted, the per-order cap, the geoblock handling, and states 'Complying with Polymarket's terms for the user's jurisdiction is the user's responsibility'. This adds significant context beyond the annotations (readOnlyHint=false, destructiveHint=true).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with action sections and bullet-style lines. It front-loads the critical money warning and the setup requirement. While it could be more condensed, every sentence adds value given the tool's complexity (9 actions, 16 parameters). It is not excessively verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all actions (setup, fund, buy, sell, orders, cancel, positions, redeem, withdraw), pricing, token ID sourcing, confirmations, caps, geoblock, and compliance. It also mentions the free tool aspect and the non-custodial funding path. No critical information is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains parameter meaning in context: 'Prices are probabilities 0–1 on the market's tick grid', 'token_id comes from blockrun_markets Polymarket data', and the detailed max_fill_price behavior ('Defaults to the worst fill of this session's last preview...'). It also clarifies how condition_id+outcome resolve to token_id, which is not in the schema. This is far beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Trade on Polymarket prediction markets (CLOB V2, Polygon)', which is a specific verb-resource pairing. It also references 'discover markets/prices/token IDs with blockrun_markets first', implicitly distinguishing it from the read-only sibling tool blockrun_polymarket_read. The purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to run action:'setup' FIRST and after funding, and directs users to blockrun_markets for discovery. It lists each action with its prerequisites and conditions (e.g., 'confirm:true REQUIRED to place', 'amount_usd required' for fund). This gives clear when-to-use and workflow guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_polymarket_readARead-only
Read or preview Polymarket state without signing or changing anything.
Actions:
positions — holdings, current value, PnL, and redeemable status (free Data API)
orders — open CLOB orders, optionally filtered by condition_id
preview — build a live buy/sell order preview from the CLOB book. side plus token_id (or condition_id+outcome) are required. Market buys use amount_usd; limit orders use price+size. This action never accepts confirm and never signs or submits an order.
Use blockrun_polymarket only for setup and funds-affecting operations: confirmed buy/sell, cancel, redeem, fund, or withdraw.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | preview: order side | |
| size | No | preview: shares for limits and market sells | |
| price | No | preview: limit probability; omit for market order | |
| action | Yes | Read-only operation | |
| outcome | No | preview: outcome label used with condition_id | |
| token_id | No | preview: outcome token ID | |
| post_only | No | preview: maker-only limit order | |
| amount_usd | No | preview: pUSD to spend on a market buy | |
| expires_at | No | preview: GTD expiry in Unix seconds | |
| order_type | No | preview: order type | |
| condition_id | No | orders: optional market condition ID filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint and destructiveHint false, and the description reinforces them with concrete commitments: 'This action never accepts confirm and never signs or submits an order.' It also discloses the data sources, CLOB book and Data API, and clarifies that previews are live but non-mutating.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, bulleted by action, and front-loaded with the all-important safety statement. Every sentence adds functional value, and sibling routing is compressed into one clear sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the action bullets summarize what each call returns: Holdings, value, PnL, and redeemable status; open CLOB orders; and live order previews. Combined with a l00% schema-described parameters, the description gives the agent enough context to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds critical combination logic beyond the schema: preview requires side plus token_id or condition_id+outcome, market buys use amount_usd, limit orders use price+size, and condition_id filters orders. These cross-parameter requirements are not inferable from the individual parameter descriptions alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line specifies a read-only verb and resource with a clear safety boundary: 'Read or preview Polymarket state without signing or changing anything.' The action list explicitly names positions, orders, and preview, making the tool's scope unambiguous and distinct from the funds-affecting sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence gives explicit routing guidance: 'Use blockrun_polymarket only for setup and funds-affecting operations' and enumerates confirmed buy/sell, cancel, redeem, fund, or withdraw. This directly tells the agent when to use this tool versus its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_priceARead-only
Realtime quotes and OHLC history for crypto, FX and commodities (Pyth-backed), plus the ticker catalog for 12 stock markets.
action="price" — realtime quote for a symbol
action="history" — OHLC bars between from/to (unix seconds)
action="list" — discovery: list available symbols (free)
Pricing:
crypto / fx / commodity: FREE across price, history and list
stocks / usstock: list (ticker catalog) FREE; price/history NOT SERVED — gateway 501 before payment since 2026-09-05, nothing charged, do not retry
Stocks markets: us, hk, jp, kr, gb, de, fr, nl, ie, lu, cn, ca (required when category="stocks").
Examples:
{ action: "price", category: "crypto", symbol: "BTC-USD" }
{ action: "price", category: "fx", symbol: "EUR-USD" }
{ action: "history", category: "crypto", symbol: "ETH-USD", resolution: "D", from: 1700000000, to: 1710000000 }
{ action: "list", category: "crypto", query: "sol" }
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | History window end (unix seconds). | |
| from | No | History window start (unix seconds). | |
| limit | No | Max items for list (default 100, max 2000). | |
| query | No | Free-text filter for list. | |
| action | Yes | Which endpoint to hit: price, history, or list. | |
| market | No | Stock market code — required when category='stocks'. | |
| symbol | No | Ticker (required for price+history). e.g. BTC-USD, EUR-USD, XAU-USD. | |
| session | No | Equity session hint (pre/post/on); ignored for non-equity. | |
| agent_id | No | Agent identifier for budget tracking and enforcement. | |
| category | Yes | Market category. | |
| resolution | No | Bar resolution for history (default D). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior, so the description doesn't need to repeat that. It adds valuable context about pricing and the 501 gateway error for certain markets, which is a behavioral trait beyond the annotations. However, it could mention what the response format looks like (e.g., exact price data returned), so it doesn't fully cover the agent's behavioral expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for actions, pricing, markets, and examples. It uses bullet points and a simple format that is easy to scan. Slightly verbose with the pricing details, but all of it is relevant to avoid unnecessary calls. The examples at the end are a nice touch but could be trimmed if needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 params, 5 enums, multiple actions), the description covers the essential usage patterns and limitations. It lacks an output schema, but the description's examples imply the return types. It could be more complete by specifying response formats for each action, but it's sufficient for an agent to make correct calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are documented with their types and descriptions. The description adds extra context by explaining how parameters relate to actions (e.g., 'symbol' required for price/history, 'market' required for stocks category) and provides example values like 'BTC-USD' and 'EUR-USD', which enhances the agent's understanding beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides realtime quotes and OHLC history for crypto, FX, and commodities, plus ticker catalogs. It explicitly outlines three distinct actions (price, history, list) with examples, effectively distinguishing it from siblings like blockrun_markets and blockrun_dex. While it doesn't explicitly name siblings, the resource and action specificity make its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each action and which categories are supportedcli. It clearly states that stocks/usstock price/history are not served, advising the agent not to retry. It also gives concrete examples of how to structure requests, making usage conditions highly explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_realfaceA
Enroll a real person's face as a BytePlus RealFace asset, then drive Seedance 2.0 video with it (blockrun_video real_face_asset_id).
A RealFace asset (ta_xxxx) lets Seedance 2.0 / 2.0-fast / 2.0-mini generate video of a SPECIFIC real person — not a generic seed image. Only those three models: seedance-2.5 is numerically newer but does NOT accept ta_ assets, and seedance-1.5-pro never did. Enrollment is a multi-step flow because BytePlus requires a live phone liveness check (the real person nods + blinks on camera) before a face photo can be uploaded.
Actions:
init: FREE. Create an asset group + a phone H5 link. The tool renders the link as a QR code and opens it; the real person scans it on their phone and completes the ~1 min liveness check. Pass group_id to refresh an expired link.
status: FREE. Poll a group until status:"active" (ready_to_finalize:true). The H5 link is valid ~120s — re-init if it expires.
enroll: PAID ($0.01). Settles on Solana or Base from a wallet, or against your BlockRun account key. After the group is active, upload a clear front-facing photo (image_url) of the SAME person. Returns the ta_xxxx asset id.
portrait: PAID ($0.01). Settles on Solana or Base from a wallet, or against your BlockRun account key. Virtual Portrait — enroll an AI-GENERATED character from an image URL directly, NO liveness needed (one step: name + image_url → ta_xxxx). For fictional/AI characters only; for a real person use the init→status→enroll liveness flow.
list: FREE, WALLET MODE ONLY (assets are indexed by wallet address). List the RealFace + Virtual Portrait assets enrolled by this wallet (their ta_xxxx ids + names) so you can pick one for blockrun_video.
Typical flow:
blockrun_realface action:"init" name:"Alice" → scan QR on phone, do liveness
blockrun_realface action:"status" group_id:"legacy_rf_…" → repeat until ready_to_finalize:true
blockrun_realface action:"enroll" name:"Alice" group_id:"legacy_rf_…" image_url:"https://…/alice.jpg" → ta_xxxx
blockrun_video model:"bytedance/seedance-2.0" real_face_asset_id:"ta_xxxx" prompt:"…"
Privacy: BlockRun does not store face/liveness data — only the asset id, name, and the photo URL you supply.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name for the person/character (required for init, enroll, and portrait). | |
| action | Yes | What to do | |
| agent_id | No | Agent identifier for budget tracking and enforcement (enroll only). | |
| group_id | No | Asset-group id from init (required for status and enroll; pass to init to refresh an expired H5 link). Not used by portrait. | |
| image_url | No | Public HTTPS URL to a clear front-facing face image (JPG/PNG/WEBP, ≤10MB). Required for enroll and portrait. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are sparse (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description carries the full burden and delivers. It discloses the multi-step liveness requirement, the ~120s H5 link expiry with re-init instruction, per-action costs ($0.01), settlement mechanisms (Solana/Base wallet or account key), wallet-mode-only for list, and a privacy statement (no face/liveness data stored). Rich and complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, but the description is long and partially redundant. The action list, the typical-flow example, and the model-compatibility paragraph overlap; the flow example restates what the action bullets already say. For a 5-action tool some length is warranted, but trimming the redundant step-by-step example would tighten it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a complex multi-step tool with no output schema and sparse annotations. It covers the full lifecycle (init→status→enroll/portrait→list), cost, payment routes, timing/liveness constraints, model compatibility, and privacy. An agent has everything needed to sequence calls correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema: group_id can refresh an expired H5 link or is unused by portrait; image_url must be the SAME person as the liveness check for enroll; agent_id is budget-tracking for enroll only. These constraints are not fully apparent from schema alone, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb+resource statement: enroll a real person's face as a BytePlus RealFace asset, then drive Seedance 2.0 video with it. It clearly distinguishes this tool from its consumer blockrun_video (which takes real_face_asset_id) and differentiates portrait (AI characters, no liveness) from enroll (real person, liveness).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Exceptional routing guidance. Each of the five actions has explicit when-to-use context (FREE vs PAID, liveness vs no-liveness, wallet-only for list). It names the model constraint explicitly — seedance-2.5 is numerically newer but does NOT accept ta_ assets — and gives a step-by-step typical flow. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_rpcADestructive
Raw JSON-RPC against 40+ blockchains — one endpoint, no node, no API key. $0.002 base per call plus the gateway's flat tx fee ($0.001 today; we reserve $0.002, so budget/confirm show $0.004 per single call). A JSON-RPC batch charges $0.002 per element plus ONE fee — batch when you can.
Use when you need data the higher-level tools don't cover: contract reads (eth_call), balances, blocks, txs, logs, gas, or any chain-native RPC method.
Networks (full catalog in the rpc skill): ethereum, base, arbitrum, optimism, polygon, bsc, avalanche, solana, bitcoin, sui, near, ripple, polkadot, dogecoin, litecoin, monad, berachain, unichain, hyperevm, sonic, and 20+ more.
Examples: blockrun_rpc({ network: "ethereum", method: "eth_blockNumber" }) blockrun_rpc({ network: "base", method: "eth_getBalance", params: ["0xabc...", "latest"] }) blockrun_rpc({ network: "solana", method: "getSlot" }) blockrun_rpc({ network: "bitcoin", method: "getblockchaininfo" }) blockrun_rpc({ network: "ethereum", body: [{jsonrpc:"2.0",id:1,method:"eth_blockNumber"},{...}] }) // batch
Prefer blockrun_price (free quotes) or blockrun_dex (free DEX data) when they cover the question — this tool is for raw chain access.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Full JSON-RPC 2.0 body or an array of them (batch). Overrides method/params when set. | |
| method | No | JSON-RPC method, e.g. 'eth_blockNumber', 'eth_call', 'getSlot' (Solana), 'getblockchaininfo' (Bitcoin). Required unless 'body' is set. | |
| params | No | JSON-RPC params array for the method, e.g. ['0xabc...', 'latest']. | |
| network | Yes | Chain key, e.g. 'ethereum', 'base', 'solana', 'bitcoin', 'arbitrum', 'polygon'. Unknown slugs pass through to the Tatum gateway. | |
| agent_id | No | Agent identifier for budget tracking and enforcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond annotations: no node required, no API key, per-call cost, flat fee, batch pricing, and network slug pass-through. The destructiveHint annotation already covers mutation risk, so the description needn't restate it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well structured with a clear opening, usage guidance, network overview, examples, and priority note. The pricing details and example list are useful but slightly longer than strictly necessary; each section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete enough for a raw JSON-RPC tool: covers purpose, when to use, cost, network list, and example calls including batches. Lacks explicit note about output/error shape and broader write-method safety, but the standard JSON-RPC response format is inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents method, params, body, network, and agent_id. The description adds examples and clarifies body/method override behavior, but doesn't substantially extend the parameter semantics beyond what's structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: raw JSON-RPC access across 40+ chains. It differentiates itself from the higher-level tools and provides concrete examples, making the tool's purpose immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this tool when higher-level tools don't cover the need, and names alternatives (blockrun_price, blockrun_dex) to prefer when they do. Also gives practical guidance on when to use batch requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_searchARead-only
Grok Live Search — real-time web + news with AI-summarized results and citations. PRICED PER SOURCE and expensive by default: $0.025 × max_results, +5% gateway buffer — default max_results=10 settles ~$0.26 (max_results=50 → $1.31). Pass a smaller max_results to cap spend; for a plain fact, 3 sources ($0.08) is usually enough.
Common shape:
body: { query: "...", sources: ["web","news"], max_results: 10, from_date: "YYYY-MM-DD", to_date: "YYYY-MM-DD" }
sources accepts any subset of ["web","news"] (default ["web"] — pass both for news coverage). There is no X/Twitter source (removed upstream 2026-07-05; asking for it is refused before payment). max_results is 1–50 (default 10) and drives the price — pass a smaller value if you want to cap spend.
Full request shape + worked examples in the search skill (skills/search/SKILL.md).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Request body. At minimum { query: '...' }. Sent as POST. | |
| path | No | Endpoint sub-path under /v1/search/ (default empty = root /v1/search). Reserved for future surfaces. | |
| agent_id | No | Agent identifier for budget tracking and enforcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read operation. The description adds significant behavioral context: the pricing model, cost estimation formula, that 'sources' defaults to web only, and that requesting an unavailable source is refused before payment. It also refers to a skill for full shape. This adds value beyond annotations, but falls short of flawless because it doesn't detail return format or pagination, though that's minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but front-loads the most critical information: the cost warning and how to control it. It uses structured sections (e.g., 'Common shape') to improve readability. Some repetition exists (e.g., cost details repeated in the first paragraph and again for max_results), but overall it's efficient and scannable. It's not as concise as ideal but appropriate given the complexity of pricing logic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a complex pricing model and parameter behavior, the description covers essential usage constraints: price calculation, default values, parameter ranges, and even refers to a skill for full request shape. It doesn't explain the return value shape (no output schema), but given that it references a skill file with worked examples, it's reasonably complete. The only gap is that it doesn't explicitly state when to choose this over other search-like siblings, but the domain-specifics (news, cost) are clear enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter (body, path, agent_id). The description adds further detail on the body structure, including example fields and defaults for 'sources' and 'max_results', which is useful but not strictly necessary. The description also clarifies that 'path' is reserved for future surfaces, which is beyond schema, but the schema already has a description, so the added value is moderate. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a live web and news search with AI-summarized results and citations. It specifies the endpoint path and distinguishes it from the sibling list (e.g., blockrun_exa for AI search, blockrun_polymarket for prediction markets). However, it doesn't explicitly contrast with siblings, and the name 'blockrun_search' is generic, but the description provides specific details like the price model that helps identify the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (for real-time web and news queries) and provides explicit guidance on parameter usage, including defaults and how to cap spend by reducing max_results. It also notes the absence of an X/Twitter source, which is a useful exclusion. However, it doesn't explicitly discuss when NOT to use this tool versus alternatives like blockrun_exa for AI search; it only mentions that asking for X is refused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_speechA
AI voice via BlockRun x402 — speak text aloud (ElevenLabs or ByteDance Seed Audio), generate sound effects, list voices.
Actions:
speak (default): text-to-speech. E.g. "speak this with the sarah voice". Price = chars/1000 × rate (min $0.001), quoted before payment.
sound_effect: cinematic sound effects from a text prompt, up to 22s ($0.0525/clip)
voices: list available voices (free)
Models (speak): elevenlabs/flash-v2.5 ($0.05/1k chars, 75ms, default), elevenlabs/turbo-v2.5 ($0.05/1k), elevenlabs/multilingual-v2 ($0.10/1k, narration), elevenlabs/v3 ($0.10/1k, most expressive), bytedance/seed-audio-1.0 ($0.003/sec of output, est. from input length; max 3k chars in / 120s out) — prompt-DIRECTED audio: describe the voice, emotion, and sound staging in the input text itself ("a tired detective mutters, rain in the background: ..."); the voice parameter is ignored.
Voice aliases (ElevenLabs models only): sarah (default), george, laura, charlie, river, roger, callum, harry — or any raw ElevenLabs voice_id.
Returns a hosted audio URL — download immediately if you need to keep the file.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | speak: text to synthesize. sound_effect: description of the sound, e.g. 'rain on a tin roof, distant thunder' (max 1000 chars). | |
| model | No | Speech model (speak only). seed-audio-1.0 is prompt-directed: voice/emotion/staging go in the input text, the voice param is ignored, and billing is per estimated second of output. | elevenlabs/flash-v2.5 |
| speed | No | Playback speed 0.7-1.2 (speak only) | |
| voice | No | Voice alias (sarah, george, laura, charlie, river, roger, callum, harry) or raw ElevenLabs voice_id. Default: sarah. | |
| action | No | speak: text-to-speech (default). sound_effect: generate a sound effect. voices: list voices (free). | speak |
| agent_id | No | Agent identifier for budget tracking and enforcement. | |
| response_format | No | Audio format | mp3 |
| duration_seconds | No | Sound effect length in seconds (sound_effect only; default: auto) | |
| prompt_influence | No | How literally to follow the prompt, 0-1 (sound_effect only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false, so the description carries the burden of behavioral disclosure. It goes far beyond annotations by specifying pricing, per-model latency and characteristics, the prompt-directed behavior of bytedance/seed-audio-1.0 (voice parameter ignored), and that the returned hosted URL requires immediate download. This is rich, non-obvious behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence delivers useful information: purpose, actions, pricing, models, aliases, behavioral caveats, and return-value guidance. It is logically organized with line breaks and no filler, making it dense yet easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, 3 enums, no output schema, and minimal annotations, the description is remarkably complete. It covers return value behavior, pricing, model selection, voice handling, parameter constraints, and action differences—everything an agent needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 100%, the description adds substantial meaning: it expands the voice aliases, explains when the voice param is ignored, gives model-specific billing details, clarifies action-specific parameter usage, and describes the output as a hosted audio URL. This far exceeds the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's core purpose: 'AI voice via BlockRun x402 — speak text aloud (ElevenLabs or ByteDance Seed Audio), generate sound effects, list voices.' It enumerates distinct actions, models, and voice aliases, giving agents a concrete understanding of what the tool does and how it differs from non-speech siblings like image, music, or video tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear action-level guidance: use 'speak' for text-to-speech, 'sound_effect' for cinematic effects, and 'voices' to list voices. It does not explicitly name sibling tools to contrast with, so while the usage context is strong, it lacks the explicit when-not-to-use-alternative statements that would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_videoA
Generate short AI videos via BlockRun x402 on the active Base or Solana chain (async, client-polled).
Turns a text prompt (and optional seed image) into a short MP4 clip. The tool submits the job, then polls until the video is ready (typical total wall-time 60-180s; 9 min Base / 15 min Solana hard cap). On the wallet rails payment settles only when upstream returns a finished video — if the job fails you are not charged; if this client gives up while a paid poll is still in flight the gateway may still settle, and the error text says so. On the account rail the job is billed when the gateway accepts it, so a job that fails or outlives the poll budget is still charged — the error names it.
Models. Every rate below is what you are CHARGED (margin and transaction fee included), at the 720p baseline Seedance renders by default with synced audio:
azure/sora-2 (~$0.105/sec, 720p + synced audio, text- or image-to-video) — OpenAI Sora 2 via Azure AI Foundry. duration_seconds must be 4, 8, or 12 (4s default -> ~$0.42/clip). image_url takes a NON-HUMAN reference image (faces are rejected upstream by moderation — use Seedance + RealFace for real people); same price as text-to-video. No RealFace, no last_frame_url. Base only for now: the Solana gateway quotes it as Seedance 2.0 at $1.135 and the tool refuses that quote unsigned.
xai/grok-imagine-video ($0.05/sec at 480p default, $0.07/sec at 720p; 8s default -> $0.401/clip, 1-15s) — stylized, fast. 480p/720p only.
bytedance/seedance-1.5-pro (~$0.071/sec, 4-12s, 5s default -> ~$0.35/clip) — cheapest Seedance, token-priced upstream
bytedance/seedance-2.0-mini (~$0.080/sec, 4-15s, 5s default) — 2.0-generation quality at roughly half the 2.0-fast rate; 720p ceiling; supports RealFace and first/last-frame
bytedance/seedance-2.0-fast (~$0.165/sec, 4-15s, ~60-80s gen) — sweet-spot price/quality; supports BytePlus RealFace assets
bytedance/seedance-2.0 (~$0.227/sec, 4-15s, up to 4K) — highest quality, and the ONLY model that renders true 4K; supports RealFace, first/last-frame and reference media
bytedance/seedance-2.5 (~$0.315/sec, 4-30s, 5s default) — long-form: double 2.0's length ceiling, multilingual. NOT a strict upgrade — it caps at 720p and does NOT support RealFace or first/last-frame. Use 2.0 for 1080p/4K or real-person video.
Image-to-video is NOT cheaper than text-to-video on Seedance — same per-second rate. Higher resolutions ARE more expensive (token-priced: 1080p ~2.25x, 4K ~9x the 720p rate); the 402 quote is authoritative and is what gets charged.
RealFace: to generate video of a SPECIFIC real person, first enroll them with blockrun_realface (returns a ta_xxxx asset id), then pass real_face_asset_id here with seedance-2.0, seedance-2.0-fast, or seedance-2.0-mini. Mutually exclusive with image_url.
Returns a permanent blockrun-hosted MP4 URL (the gateway mirrors the asset to GCS so URLs don't expire).
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Video model to use | xai/grok-imagine-video |
| prompt | Yes | Text description of the video to generate. E.g. 'a red apple slowly spinning on a wooden table', 'a hummingbird hovering near a red flower, ultra slow motion' | |
| agent_id | No | Agent identifier for budget tracking and enforcement. | |
| image_url | No | Optional seed image URL for image-to-video generation | |
| resolution | No | Output resolution. Seedance defaults to 720p and is token-priced (~2.25x at 1080p, ~9x at 4K); per-model sets from token360's published schema: seedance-2.0 480p/720p/1080p/4K · 1.5-pro 480p/720p/1080p · 2.0-fast, 2.0-mini and 2.5 480p/720p only. grok-imagine-video honours 480p (default, $0.05/sec) and 720p ($0.07/sec) and rejects anything higher. Ignored by Sora only (dropped from the request). | |
| aspect_ratio | No | Output aspect ratio. Seedance honors the full set; Sora uses it only to pick portrait vs landscape (9:16 / 3:4 -> portrait); Grok ignores it (the gateway never forwards it to xAI). Defaults to the model's own default. (9:21 removed 2026-08-07 — no Seedance model offers it; use 9:16 for vertical.) | |
| generate_audio | No | Seedance only: whether to generate a synced audio track. Defaults ON for text-to-video and OFF for image/RealFace-conditioned. The auto-generated audio is occasionally rejected by upstream moderation ('output audio may contain sensitive information') even for benign prompts — pass false to skip audio and avoid that failure. Ignored by xAI/Sora. | |
| last_frame_url | No | Seedance 1.5-pro / 2.0 / 2.0-fast / 2.0-mini only (NOT 2.5): first-and-last-frame interpolation. A second image URL that seeds the FINAL frame so the model tweens from image_url (first frame) → last_frame_url (last frame). Requires image_url; mutually exclusive with real_face_asset_id. | |
| duration_seconds | No | Duration to bill for. Defaults to the model's own default (8s xAI, 5s Seedance, 4s Sora). Per-model range: seedance-1.5-pro 4-12s · seedance-2.0 / 2.0-fast / 2.0-mini 4-15s · seedance-2.5 4-30s · sora-2 exactly 4, 8 or 12 · grok-imagine-video 1-15s. | |
| real_face_asset_id | No | BytePlus RealFace asset id (from blockrun_realface enroll/list) to generate video of a specific real person. Seedance 2.0 / 2.0-fast / 2.0-mini only (NOT 2.5). Mutually exclusive with image_url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully covers operational behavior: async submission and polling, typical wall-time and hard caps, wallet-rail vs account-rail billing consequences on failure, upstream audio moderation quirks, and the permanent GCS-mirrored MP4 URL. This goes well beyond the minimal annotations and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is top-loaded with purpose, execution flow, billing, and model options, and the bullet list makes dense information scannable. It is long and repeats some per-model constraints already present in parameter descriptions, but the complexity of seven models and pricing justifies most of the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex paid async tool with no output schema and only minimal annotations, the description covers invocation, polling, billing, model compatibility, RealFace prerequisites, and the returned artifact. Nothing needed to call the tool correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds substantial meaning per parameter: per-model charge rates, default durations, resolution price multipliers, mutual exclusions among image_url, last_frame_url, and real_face_asset_id, and which models ignore which parameters. This materially helps an agent choose correct values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Generate short AI videos via BlockRun x402') and a concrete result ('short MP4 clip'), which clearly separates it from image, music, and speech sibling tools. It also enumerates the available model options, so an agent understands the tool's scope immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives rich conditional guidance: when to use RealFace, when Sora is not available on Solana, which Seedance model to prefer for 4K or real-person video, and how to avoid audio moderation failures. It does not explicitly say 'use blockrun_image for stills' or list when not to use the video tool, so sibling-tool exclusion guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blockrun_walletA
Call this tool to manage the BlockRun payment wallet and control agent spending budgets.
Call this FIRST if any other blockrun_* tool returns a payment/balance error. Call this to check your current USDC balance before expensive operations. Call this to set spending limits before spawning child agents.
If this server is running on a BlockRun API key (BLOCKRUN_API_KEY), there is no wallet and no chain: status reports the account, and setup/qr/deposit/chain do not apply. Credit is managed at https://user.blockrun.ai/dashboard/credits.
In wallet mode the server holds TWO wallets — one on Solana, one on Base — but pays on ONE active chain at a time. status shows both addresses/balances and which is active. New installs default to Solana; an existing Base wallet keeps Base until you switch.
To switch chain (no env vars, no file editing, no restart):
action:"chain" chain:"solana" → provisions + activates the Solana wallet
action:"setup" → address + funding QR for the active chain Switch back with action:"chain" chain:"base". Almost everything now settles on either chain; only blockrun_defi (DefiLlama) and blockrun_modal are Base-only, plus native Anthropic (claude-*) in blockrun_chat.
Actions:
status (default): Both wallet addresses + USDC balances, active chain, session spending
deposit: Buy USDC with a card — mints a one-time Coinbase Onramp link and opens it in the browser (Base only; funds settle into your own wallet). Paid tools auto-open this on an out-of-funds failure; call it directly to fund up front.
setup: Get funding instructions + QR code for the ACTIVE chain (call this when balance is 0)
qr: Open QR code (active chain) in system viewer
chain + chain:"base"|"solana": Switch the active payment chain (omit chain: to just see the current one)
Budget controls:
budget + budget_action:"set" + budget_amount:1.00 → Set global spend cap
budget + budget_action:"check" (the default) → Report the cap, spend and remaining
budget + budget_action:"clear" → Remove a cap set here If the operator started the server with BLOCKRUN_BUDGET_LIMIT, that value is a ceiling this tool can only lower: set above it is clamped, clear restores it, and agent_limit is clamped to it. Only a restart with a new env raises it.
Multi-agent orchestration:
delegate + agent_id:"research" + agent_limit:2.00 → Allocate $2 to a child agent
revoke + agent_id:"research" → Remove a child agent's cap (its spend is kept; re-delegating the id carries it)
report → See per-agent spending breakdown
Usage pattern for multi-agent systems:
blockrun_wallet action:"delegate" agent_id:"worker-1" agent_limit:1.00
Pass agent_id:"worker-1" to all blockrun_chat/search/etc calls for that agent
blockrun_wallet action:"report" to audit spending
Do NOT call this for actual AI queries — use blockrun_chat for that.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | No | Target chain for action='chain'. Omit to view the current active chain. | |
| action | No | What to do | status |
| agent_id | No | Agent identifier for delegate/revoke/report actions | |
| agent_limit | No | Budget limit in USD for this agent (required for delegate action) | |
| budget_action | No | Budget action (for action='budget'). Defaults to 'check', which only reports. | |
| budget_amount | No | Budget limit in USD (for budget_action='set') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses substantial behavior beyond annotations: API-key mode has no wallet, wallet mode holds two wallets with one active chain, chain switching requires no restart, BLOCKRUN_BUDGET_LIMIT acts as a ceiling, and deposit opens a Coinbase Onramp link in the browser. No contradiction with readOnly/destructive hints is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but justified: a nine-action tool with two modes and an env-var ceiling needs this level of detail. Sections are clearly labeled, critical call-this-first guidance is front-loaded, and the closing exclusion prevents misuse. Almost every sentence carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a high-complexity tool with no output schema: it describes what each action returns or does, covers both server modes, budget clamping, per-agent delegation, chain switching, and where to manage credits outside wallet mode. An agent has enough to invoke any action correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds critical semantics: the default action is 'status', budget_action defaults to a read-only 'check', agent_limit is required for delegate, and omitting chain displays the current chain. It also maps action values to their wallet-mode effects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'manage the BlockRun payment wallet and control agent spending budgets.' It clearly distinguishes this tool from content-generation siblings and closes with an explicit exclusion: 'Do NOT call this for actual AI queries — use blockrun_chat.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: call first on payment/balance errors, before expensive operations, and before spawning child agents. It names the alternative tool (blockrun_chat) for queries and even gives a three-step usage pattern for multi-agent orchestration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.51.1- Changed
blockrun_image1 field changed- removed
Input schema / properties / qualityRemoved value: -{ - "default": "standard", - "enum": [ - "standard", - "hd" - ], - "type": "string" -}
- Changed
blockrun_markets1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Endpoint path, e.g. 'polymarket/events', 'kalshi/markets/KXBTC-25MAR14', 'polymarket/wallet/0xabc...', 'markets/search'"New value: +"Endpoint path, no query string, e.g. 'polymarket/events', 'kalshi/markets' (filter via params: { ticker: 'KXBTC-25MAR14' }), 'polymarket/wallet/0xabc...', 'markets/search'"
- Changed
blockrun_polymarket1 field changed- added
Input schema / properties / max_fill_priceAdded value: +{ + "description": "Market orders only: the worst fill you accept (0-1). Defaults to the worst fill of this session's last preview for the same token+side, so a bare confirm:true is already held to what was quoted — a book that moved past it is refused, not signed. Pass this to widen or tighten that bound. Buy = ceiling, sell = floor.", + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" +}
- Changed
blockrun_wallet1 field changed- changed
Input schema / properties / budget_action / descriptionPrevious value: -"Budget action (for action='budget')"New value: +"Budget action (for action='budget'). Defaults to 'check', which only reports."
3 tool updates
v0.49.0- Changed
blockrun_chat1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"Routing mode: powerful/reasoning = frontier models (Opus 5, GPT-5.6-sol, Kimi K3), coding = code-specialized, glm = Zhipu GLM (great for coding), cheap = budget models, free = NVIDIA only (ignored if model specified)"New value: +"Routing mode: powerful/reasoning = frontier models (Opus 5, GPT-5.6-sol, Kimi K3), coding = code-specialized, glm = Zhipu GLM (great for coding), cheap = budget models, free = $0 models (ignored if model specified)"
- Changed
blockrun_price1 field changed- changed
Input schema / properties / symbol / descriptionPrevious value: -"Ticker (required for price+history). e.g. BTC-USD, AAPL, EUR-USD."New value: +"Ticker (required for price+history). e.g. BTC-USD, EUR-USD, XAU-USD."
- Removed
blockrun_surf
20 tool updates
v0.45.1- Changed
blockrun_chat1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_defi1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_dex1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_exa1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_image1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_markets1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_modal1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_models1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_music1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_phone1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_polymarket1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_polymarket_read1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_price1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_realface1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_rpc1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_search1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_speech1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_surf1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_video1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
blockrun_wallet1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
4 tool updates
v0.40.1- Changed
blockrun_chat1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"Routing mode: powerful/reasoning = frontier models (Opus 4.8, GPT-5.6-sol, Kimi K3), coding = code-specialized, glm = Zhipu GLM (cheap, great for coding), cheap = budget models, free = NVIDIA only (ignored if model specified)"New value: +"Routing mode: powerful/reasoning = frontier models (Opus 5, GPT-5.6-sol, Kimi K3), coding = code-specialized, glm = Zhipu GLM (great for coding), cheap = budget models, free = NVIDIA only (ignored if model specified)"
- Changed
blockrun_music1 field changed- changed
Input schema / properties / model / enumPrevious value: -[ - "minimax/music-2.5+", - "minimax/music-2.5" -]New value: +[ + "minimax/music-2.5+" +]
- Changed
blockrun_speech2 fields changed- changed
Input schema / properties / model / descriptionPrevious value: -"Speech model (speak only)"New value: +"Speech model (speak only). seed-audio-1.0 is prompt-directed: voice/emotion/staging go in the input text, the voice param is ignored, and billing is per estimated second of output." - changed
Input schema / properties / model / enumPrevious value: -[ - "elevenlabs/flash-v2.5", - "elevenlabs/turbo-v2.5", - "elevenlabs/multilingual-v2", - "elevenlabs/v3" -]New value: +[ + "elevenlabs/flash-v2.5", + "elevenlabs/turbo-v2.5", + "elevenlabs/multilingual-v2", + "elevenlabs/v3", + "bytedance/seed-audio-1.0" +]
- Changed
blockrun_video5 fields changed- changed
Input schema / properties / duration_seconds / descriptionPrevious value: -"Duration to bill for. Defaults to the model's own default (8s xAI, 5s Seedance, 4s Sora). Per-model range: seedance-1.5-pro 4-12s · seedance-2.0 / 2.0-fast 4-15s · seedance-2.5 4-30s · sora-2 exactly 4, 8 or 12 · grok-imagine-video 1-15s."New value: +"Duration to bill for. Defaults to the model's own default (8s xAI, 5s Seedance, 4s Sora). Per-model range: seedance-1.5-pro 4-12s · seedance-2.0 / 2.0-fast / 2.0-mini 4-15s · seedance-2.5 4-30s · sora-2 exactly 4, 8 or 12 · grok-imagine-video 1-15s." - changed
Input schema / properties / last_frame_url / descriptionPrevious value: -"Seedance 1.5-pro / 2.0 / 2.0-fast only (NOT 2.5): first-and-last-frame interpolation. A second image URL that seeds the FINAL frame so the model tweens from image_url (first frame) → last_frame_url (last frame). Requires image_url; mutually exclusive with real_face_asset_id."New value: +"Seedance 1.5-pro / 2.0 / 2.0-fast / 2.0-mini only (NOT 2.5): first-and-last-frame interpolation. A second image URL that seeds the FINAL frame so the model tweens from image_url (first frame) → last_frame_url (last frame). Requires image_url; mutually exclusive with real_face_asset_id." - changed
Input schema / properties / model / enumPrevious value: -[ - "azure/sora-2", - "xai/grok-imagine-video", - "bytedance/seedance-1.5-pro", - "bytedance/seedance-2.0-fast", - "bytedance/seedance-2.0", - "bytedance/seedance-2.5" -]New value: +[ + "azure/sora-2", + "xai/grok-imagine-video", + "bytedance/seedance-1.5-pro", + "bytedance/seedance-2.0-mini", + "bytedance/seedance-2.0-fast", + "bytedance/seedance-2.0", + "bytedance/seedance-2.5" +] - changed
Input schema / properties / real_face_asset_id / descriptionPrevious value: -"BytePlus RealFace asset id (from blockrun_realface enroll/list) to generate video of a specific real person. Seedance 2.0 / 2.0-fast only (NOT 2.5). Mutually exclusive with image_url."New value: +"BytePlus RealFace asset id (from blockrun_realface enroll/list) to generate video of a specific real person. Seedance 2.0 / 2.0-fast / 2.0-mini only (NOT 2.5). Mutually exclusive with image_url." - changed
Input schema / properties / resolution / descriptionPrevious value: -"Seedance only: output resolution. Defaults to 720p. Higher resolutions cost more (token-priced upstream, ~2.25x at 1080p and ~9x at 4K). Per-model sets from token360's published schema: seedance-2.0 480p/720p/1080p/4K · 1.5-pro 480p/720p/1080p · 2.0-fast and 2.5 480p/720p only. Ignored by xAI/Sora (dropped from the request)."New value: +"Output resolution. Seedance defaults to 720p and is token-priced (~2.25x at 1080p, ~9x at 4K); per-model sets from token360's published schema: seedance-2.0 480p/720p/1080p/4K · 1.5-pro 480p/720p/1080p · 2.0-fast, 2.0-mini and 2.5 480p/720p only. grok-imagine-video honours 480p (default, $0.05/sec) and 720p ($0.07/sec) and rejects anything higher. Ignored by Sora only (dropped from the request)."
1 tool update
v0.39.0- Changed
blockrun_video8 fields changed- changed
Input schema / properties / aspect_ratio / descriptionPrevious value: -"Seedance only: output aspect ratio, e.g. '9:16' for vertical/mobile, '16:9' for landscape. Defaults to the model's own default. Ignored by xAI/Sora."New value: +"Output aspect ratio. Seedance honors the full set; Sora uses it only to pick portrait vs landscape (9:16 / 3:4 -> portrait); Grok ignores it (the gateway never forwards it to xAI). Defaults to the model's own default. (9:21 removed 2026-08-07 — no Seedance model offers it; use 9:16 for vertical.)" - changed
Input schema / properties / aspect_ratio / enumPrevious value: -[ - "adaptive", - "16:9", - "9:16", - "1:1", - "4:3", - "3:4", - "21:9", - "9:21" -]New value: +[ + "adaptive", + "16:9", + "9:16", + "1:1", + "4:3", + "3:4", + "21:9" +] - changed
Input schema / properties / duration_seconds / descriptionPrevious value: -"Duration to bill for (defaults to the model's default — 8s for xAI, 5s for Seedance; Seedance supports up to 10s)."New value: +"Duration to bill for. Defaults to the model's own default (8s xAI, 5s Seedance, 4s Sora). Per-model range: seedance-1.5-pro 4-12s · seedance-2.0 / 2.0-fast 4-15s · seedance-2.5 4-30s · sora-2 exactly 4, 8 or 12 · grok-imagine-video 1-15s." - changed
Input schema / properties / last_frame_url / descriptionPrevious value: -"Seedance only: first-and-last-frame interpolation. A second image URL that seeds the FINAL frame so the model tweens from image_url (first frame) → last_frame_url (last frame). Requires image_url; mutually exclusive with real_face_asset_id. Priced as image-to-video."New value: +"Seedance 1.5-pro / 2.0 / 2.0-fast only (NOT 2.5): first-and-last-frame interpolation. A second image URL that seeds the FINAL frame so the model tweens from image_url (first frame) → last_frame_url (last frame). Requires image_url; mutually exclusive with real_face_asset_id." - changed
Input schema / properties / model / enumPrevious value: -[ - "azure/sora-2", - "xai/grok-imagine-video", - "bytedance/seedance-1.5-pro", - "bytedance/seedance-2.0-fast", - "bytedance/seedance-2.0" -]New value: +[ + "azure/sora-2", + "xai/grok-imagine-video", + "bytedance/seedance-1.5-pro", + "bytedance/seedance-2.0-fast", + "bytedance/seedance-2.0", + "bytedance/seedance-2.5" +] - changed
Input schema / properties / real_face_asset_id / descriptionPrevious value: -"BytePlus RealFace asset id (from blockrun_realface enroll/list) to generate video of a specific real person. Seedance 2.0 / 2.0-fast only. Mutually exclusive with image_url."New value: +"BytePlus RealFace asset id (from blockrun_realface enroll/list) to generate video of a specific real person. Seedance 2.0 / 2.0-fast only (NOT 2.5). Mutually exclusive with image_url." - changed
Input schema / properties / resolution / descriptionPrevious value: -"Seedance only: output resolution. Defaults to 720p. Higher resolutions cost more (token-priced upstream) — the final price is set by the 402 challenge, so the up-front estimate may understate 1080p/4K. Ignored by xAI/Sora."New value: +"Seedance only: output resolution. Defaults to 720p. Higher resolutions cost more (token-priced upstream, ~2.25x at 1080p and ~9x at 4K). Per-model sets from token360's published schema: seedance-2.0 480p/720p/1080p/4K · 1.5-pro 480p/720p/1080p · 2.0-fast and 2.5 480p/720p only. Ignored by xAI/Sora (dropped from the request)." - changed
Input schema / properties / resolution / enumPrevious value: -[ - "360p", - "480p", - "540p", - "720p", - "1080p", - "1K", - "2K", - "4K" -]New value: +[ + "480p", + "720p", + "1080p", + "4K" +]
1 tool update
v0.37.1- Changed
blockrun_image2 fields changed- changed
Input schema / properties / model / enumPrevious value: -[ - "zai/cogview-4", - "google/nano-banana", - "google/nano-banana-pro", - "openai/gpt-image-1", - "openai/gpt-image-2", - "xai/grok-imagine-image", - "xai/grok-imagine-image-pro" -]New value: +[ + "zai/cogview-4", + "google/nano-banana", + "google/nano-banana-2", + "google/nano-banana-pro", + "openai/gpt-image-1", + "openai/gpt-image-2", + "xai/grok-imagine-image", + "xai/grok-imagine-image-pro", + "bytedance/seedream-5-pro" +] - changed
Input schema / properties / size / descriptionPrevious value: -"Image size. Common values: 1024x1024 (all models), 1536x1024 / 1024x1536 (gpt-image-*), 2048x2048 / 4096x4096 (nano-banana-pro)"New value: +"Image size. Common values: 1024x1024 (all models), 1536x1024 / 1024x1536 (gpt-image-*), 2048x2048 / 4096x4096 (nano-banana-pro), 1280x720 / 2048x1024 / 2048x2048 / 2848x1600 (seedream-5-pro)"
3 tool updates
v0.33.0- Changed
blockrun_chat3 fields changed- changed
Input schema / properties / messages / descriptionPrevious value: -"Conversation history for multi-turn context. When provided, 'message' is appended as the final user turn. Use with explicit 'model' param (defaults to 'openai/gpt-5.5' if not specified). Note: if you include a role:'system' entry in messages[], do not also pass the system param to avoid duplicate system messages."New value: +"Conversation history for multi-turn context. When provided, 'message' is appended as the final user turn. Use with explicit 'model' param (defaults to 'openai/gpt-5.6-terra' if not specified). Note: if you include a role:'system' entry in messages[], do not also pass the system param to avoid duplicate system messages." - changed
Input schema / properties / mode / descriptionPrevious value: -"Routing mode: glm = Zhipu GLM-5/GLM-5-Turbo ($0.001/call, great for coding), coding = GLM-5 + code models, cheap = GLM-5 + budget, free = NVIDIA only (ignored if model specified)"New value: +"Routing mode: powerful/reasoning = frontier models (Opus 4.8, GPT-5.6-sol, Kimi K3), coding = code-specialized, glm = Zhipu GLM (cheap, great for coding), cheap = budget models, free = NVIDIA only (ignored if model specified)" - changed
Input schema / properties / model / descriptionPrevious value: -"Specific model ID (e.g., 'zai/glm-5', 'openai/o3')"New value: +"Specific model ID (e.g., 'moonshot/kimi-k3', 'openai/gpt-5.6-sol', 'zai/glm-5')"
- Changed
blockrun_markets1 field changed- changed
Input schema / properties / params / descriptionPrevious value: -"Query parameters for GET requests (e.g. { limit: '20', active: 'true' })"New value: +"Query parameters for GET requests (e.g. markets/search uses { q: 'Bitcoin', status: 'open', venue: 'polymarket', limit: '20' })"
- Added
blockrun_polymarket_read
4 tool updates
v0.31.6- Changed
blockrun_chat2 fields changed- removed
Input schema / properties / routingRemoved value: -{ - "description": "Set to \"smart\" to auto-select the optimal model via ClawRouter (14-dimension AI routing)", - "enum": [ - "smart" - ], - "type": "string" -} - removed
Input schema / properties / routing_profileRemoved value: -{ - "default": "auto", - "description": "Cost/quality profile for ClawRouter: \"eco\" (budget), \"auto\" (balanced, default), \"premium\" (best quality). Note: \"free\" maps to \"auto\" (the SDK dropped the free profile) and still settles a PAID model — for zero-cost generation use mode:\"free\" or model:\"nvidia/...\". Only applies when routing:\"smart\".", - "enum": [ - "free", - "eco", - "auto", - "premium" - ], - "type": "string" -}
- Added
blockrun_polymarket - Changed
blockrun_surf2 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"JSON body for POST endpoints. Provide for: onchain/query, onchain/sql, chat/completions. When set, the call is sent as POST; otherwise GET with params."New value: +"JSON body for POST endpoints. Provide for: onchain/query, onchain/sql. When set, the call is sent as POST; otherwise GET with params." - changed
Input schema / properties / path / descriptionPrevious value: -"Endpoint path under /v1/surf/, e.g. 'market/price', 'prediction-market/polymarket/ranking', 'wallet/detail', 'onchain/sql', 'chat/completions'"New value: +"Endpoint path under /v1/surf/, e.g. 'market/price', 'prediction-market/polymarket/ranking', 'wallet/detail', 'onchain/sql'"
- Changed
blockrun_wallet1 field changed- changed
Input schema / properties / action / enumPrevious value: -[ - "status", - "setup", - "qr", - "chain", - "budget", - "delegate", - "revoke", - "report" -]New value: +[ + "status", + "deposit", + "setup", + "qr", + "chain", + "budget", + "delegate", + "revoke", + "report" +]
3 tool updates
v0.25.2- Changed
blockrun_chat5 fields changed- changed
Input schema / properties / routing_profile / descriptionPrevious value: -"Cost/quality profile for ClawRouter: \"free\" (zero cost NVIDIA), \"eco\" (budget), \"auto\" (balanced, default), \"premium\" (best quality) (only applies when routing: \"smart\")"New value: +"Cost/quality profile for ClawRouter: \"eco\" (budget), \"auto\" (balanced, default), \"premium\" (best quality). Note: \"free\" maps to \"auto\" (the SDK dropped the free profile) and still settles a PAID model — for zero-cost generation use mode:\"free\" or model:\"nvidia/...\". Only applies when routing:\"smart\"." - changed
Input schema / properties / thinking / properties / budget_tokens / descriptionPrevious value: -"Tokens Claude may spend reasoning before answering. max_tokens is auto-raised above this if needed."New value: +"Tokens Claude may spend reasoning before answering (1024–100000; Anthropic requires ≥1024). max_tokens is auto-raised above this if needed; counts toward the budget reserve." - added
Input schema / properties / thinking / properties / budget_tokens / maximumAdded value: +100000 - changed
Input schema / properties / thinking / properties / budget_tokens / minimumPrevious value: -1New value: +1024 - changed
Input schema / properties / thinking / properties / budget_tokens / typePrevious value: -"number"New value: +"integer"
- Changed
blockrun_image5 fields changed- added
Input schema / properties / image / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "maxItems": 4, + "minItems": 1, + "type": "array" + } +] - changed
Input schema / properties / image / descriptionPrevious value: -"Source image for edit action: base64-encoded image or URL"New value: +"Source image(s) for edit action: a base64 data URI, an http(s) URL, or a local file path (auto-encoded to a data URI) — or an array of 2–4 to fuse into one render (e.g. subject + layout guide, or reference + brand logo). openai/* accepts up to 4, google/* up to 3; a mask cannot be combined with multiple images." - removed
Input schema / properties / image / typeRemoved value: -"string" - added
Input schema / properties / inlineAdded value: +{ + "description": "Return a small inline image preview (thumbnail) the client can render in-conversation, in addition to the full-resolution URL. Defaults to the BLOCKRUN_INLINE_IMAGES env setting (off unless set). Rich clients (e.g. the VS Code extension) render it; plain terminals ignore it. Off keeps responses lightweight.", + "type": "boolean" +} - added
Input schema / properties / maskAdded value: +{ + "description": "Inpaint mask for edit action (openai/gpt-image-* only): a base64 data URI, http(s) URL, or local file path. Transparent areas of the mask are regenerated. Cannot be combined with multiple source images.", + "type": "string" +}
- Changed
blockrun_video4 fields changed- added
Input schema / properties / aspect_ratioAdded value: +{ + "description": "Seedance only: output aspect ratio, e.g. '9:16' for vertical/mobile, '16:9' for landscape. Defaults to the model's own default. Ignored by xAI/Sora.", + "enum": [ + "adaptive", + "16:9", + "9:16", + "1:1", + "4:3", + "3:4", + "21:9", + "9:21" + ], + "type": "string" +} - added
Input schema / properties / generate_audioAdded value: +{ + "description": "Seedance only: whether to generate a synced audio track. Defaults ON for text-to-video and OFF for image/RealFace-conditioned. The auto-generated audio is occasionally rejected by upstream moderation ('output audio may contain sensitive information') even for benign prompts — pass false to skip audio and avoid that failure. Ignored by xAI/Sora.", + "type": "boolean" +} - added
Input schema / properties / last_frame_urlAdded value: +{ + "description": "Seedance only: first-and-last-frame interpolation. A second image URL that seeds the FINAL frame so the model tweens from image_url (first frame) → last_frame_url (last frame). Requires image_url; mutually exclusive with real_face_asset_id. Priced as image-to-video.", + "format": "uri", + "type": "string" +} - added
Input schema / properties / resolutionAdded value: +{ + "description": "Seedance only: output resolution. Defaults to 720p. Higher resolutions cost more (token-priced upstream) — the final price is set by the 402 challenge, so the up-front estimate may understate 1080p/4K. Ignored by xAI/Sora.", + "enum": [ + "360p", + "480p", + "540p", + "720p", + "1080p", + "1K", + "2K", + "4K" + ], + "type": "string" +}
6 tool updates
v0.22.0- Changed
blockrun_chat7 fields changed- changed
Input schema / properties / messages / descriptionPrevious value: -"Conversation history for multi-turn context. When provided, 'message' is appended as the final user turn. Use with explicit 'model' param (defaults to 'openai/gpt-5.4' if not specified). Note: if you include a role:'system' entry in messages[], do not also pass the system param to avoid duplicate system messages."New value: +"Conversation history for multi-turn context. When provided, 'message' is appended as the final user turn. Use with explicit 'model' param (defaults to 'openai/gpt-5.5' if not specified). Note: if you include a role:'system' entry in messages[], do not also pass the system param to avoid duplicate system messages." - added
Input schema / properties / messages / items / properties / content / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "anyOf": [ + { + "properties": { + "text": { + "type": "string" + }, + "type": { + "const": "text", + "type": "string" + } + }, + "required": [ + "type", + "text" + ], + "type": "object" + }, + { + "properties": { + "image_url": { + "properties": { + "url": { + "description": "https URL or data:<mime>;base64,<...> URI", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "type": { + "const": "image_url", + "type": "string" + } + }, + "required": [ + "type", + "image_url" + ], + "type": "object" + } + ] + }, + "type": "array" + } +] - added
Input schema / properties / messages / items / properties / content / descriptionAdded value: +"Plain text, or an array of parts for multimodal input (text + image_url). Images are honored on the native anthropic/claude-* path." - removed
Input schema / properties / messages / items / properties / content / typeRemoved value: -"string" - added
Input schema / properties / response_formatAdded value: +{ + "description": "Set to 'json_object' to force valid JSON output (no markdown fences). Works across all providers.", + "enum": [ + "text", + "json_object" + ], + "type": "string" +} - added
Input schema / properties / stopAdded value: +{ + "description": "Up to 4 stop sequences; generation halts when any is produced", + "items": { + "type": "string" + }, + "maxItems": 4, + "type": "array" +} - added
Input schema / properties / thinkingAdded value: +{ + "description": "Anthropic extended thinking. Only honored for anthropic/claude-* models — these go direct to the native /v1/messages endpoint and the response includes verbatim type:'thinking' blocks with their original signature. Ignored for non-Claude models (no native thinking channel).", + "properties": { + "budget_tokens": { + "description": "Tokens Claude may spend reasoning before answering. max_tokens is auto-raised above this if needed.", + "minimum": 1, + "type": "number" + }, + "type": { + "const": "enabled", + "type": "string" + } + }, + "required": [ + "type", + "budget_tokens" + ], + "type": "object" +}
- Added
blockrun_defi - Changed
blockrun_image4 fields changed- changed
Input schema / properties / model / descriptionPrevious value: -"Model to use (default: dall-e-3 for generate, gpt-image-2 for edit). xai/grok-imagine-image is stylized and fast; xai/grok-imagine-image-pro is higher quality; gpt-image-2 is the newest edit-capable model with stronger instruction following."New value: +"Model to use (default: openai/gpt-image-2 for both generate and edit). gpt-image-2 renders on-image text best; nano-banana-pro for 4K photorealism; cogview-4 / grok-imagine-image for cheap drafts." - changed
Input schema / properties / model / enumPrevious value: -[ - "zai/cogview-4", - "openai/dall-e-3", - "together/flux-schnell", - "google/nano-banana", - "openai/gpt-image-1", - "openai/gpt-image-2", - "xai/grok-imagine-image", - "xai/grok-imagine-image-pro" -]New value: +[ + "zai/cogview-4", + "google/nano-banana", + "google/nano-banana-pro", + "openai/gpt-image-1", + "openai/gpt-image-2", + "xai/grok-imagine-image", + "xai/grok-imagine-image-pro" +] - added
Input schema / properties / size / descriptionAdded value: +"Image size. Common values: 1024x1024 (all models), 1536x1024 / 1024x1536 (gpt-image-*), 2048x2048 / 4096x4096 (nano-banana-pro)" - removed
Input schema / properties / size / enumRemoved value: -[ - "1024x1024", - "1792x1024", - "1024x1792" -]
- Changed
blockrun_realface4 fields changed- changed
Input schema / properties / action / enumPrevious value: -[ - "init", - "status", - "enroll", - "list" -]New value: +[ + "init", + "status", + "enroll", + "portrait", + "list" +] - changed
Input schema / properties / group_id / descriptionPrevious value: -"Asset-group id from init (required for status and enroll; pass to init to refresh an expired H5 link)."New value: +"Asset-group id from init (required for status and enroll; pass to init to refresh an expired H5 link). Not used by portrait." - changed
Input schema / properties / image_url / descriptionPrevious value: -"Public HTTPS URL to a clear front-facing face photo (JPG/PNG/WEBP, ≤10MB). Required for enroll."New value: +"Public HTTPS URL to a clear front-facing face image (JPG/PNG/WEBP, ≤10MB). Required for enroll and portrait." - changed
Input schema / properties / name / descriptionPrevious value: -"Display name for the person (required for init and enroll)."New value: +"Display name for the person/character (required for init, enroll, and portrait)."
- Added
blockrun_rpc - Added
blockrun_speech
15 tool updates
v0.16.2- First observed
blockrun_chat - First observed
blockrun_dex - First observed
blockrun_exa - First observed
blockrun_image - First observed
blockrun_markets - First observed
blockrun_modal - First observed
blockrun_models - First observed
blockrun_music - First observed
blockrun_phone - First observed
blockrun_price - First observed
blockrun_realface - First observed
blockrun_search - First observed
blockrun_surf - First observed
blockrun_video - First observed
blockrun_wallet
TDQS
Scored across 19 tools
Some overlap exists but descriptions help. Two web search tools (blockrun_search, blockrun_exa) and multiple crypto/data tools (blockrun_price, blockrun_dex, blockrun_defi, blockrun_markets, blockrun_rpc) cover similar ground, and Polymarket positions/state can be read via blockrun_markets, blockrun_polymarket, and blockrun_polymarket_read. The descriptions draw boundaries, but an agent could easily misselect for a generic query.
All 19 tools consistently use the blockrun_<domain> pattern with snake_case, and the read-only Polymarket tool is clearly marked with a _read suffix. There are no mixed conventions, vague generic verbs, or inconsistent casing.
19 tools is on the heavy side of the ideal range, but each maps to a distinct service line of a broad all-in-one paid AI/crypto platform. The count is defensible, though some consolidation of search or Polymarket readers would tighten it.
The surface covers generative media (video, image, music, speech), chat, two search engines, market and chain data, wallet/budgeting, real-money Polymarket trading, phone services, and sandboxed code execution. Minor gaps like wallet withdrawal or speech transcription are not promised, so coverage feels strong for the stated scope.
Maintenance
Related MCP Connectors
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
Market data and web intelligence for AI agents, paid per call in USDC on Base via x402.
Real-time data feeds for AI agents with USDC micropayments on Base for premium tools.
Market and on-chain crypto data for AI agents. Pay per call in USDC on Base (x402).
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude to access real-time crypto prices, forex rates, and market sentiment data through free public APIs with no keys required.53MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to access real-time financial data including crypto, equities, on-chain, prediction markets, and macro via a single API key.-
- AlicenseNot gradedqualityBmaintenanceProvides live data API for AI agents with 51 REST endpoints across finance, travel, weather, news, and more, using USDC micropayments without API keys.61 npmMIT

Stelar Signals MCPofficial
AlicenseAqualityBmaintenanceEnables AI agents to access crypto market signals including regime, sentiment, price, risk, and text tools like summarization and fact-checking, backed by a live production-grade classifier.636 npmMIT