Skip to main content
Glama
BlockRunAI

BlockRun MCP

Official
by BlockRunAI

         

npm version npm downloads GitHub stars Publish TypeScript Node License: MIT

MCP x402 Protocol Base Network Solana Telegram

claude mcp add blockrun -s user -- npx -y @blockrun/mcp@latest

BlockRun 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 source19 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, crypto blockrun_price, blockrun_models) costs $0.

  • Reads and acts — most tools deliver data; blockrun_polymarket places real, confirm-gated trades.

  • Human-in-the-loop payments — turn on BLOCKRUN_CONFIRM_SPEND=on and 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 into BLOCKRUN_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 api.blockrun.ai with no chain at all

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/npx on 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@latest

See 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

claude mcp add blockrun -s user -- npx -y @blockrun/mcp@latest

Codex CLI

✅ Verified · 0.142.5 · 2026-08-30

codex mcp add blockrun -- npx -y @blockrun/mcp@latest

OpenClaw

✅ Verified · 2026.8.2 · 2026-09-02

⚠️ surface-dependent; see below

openclaw mcp set blockrun '{"command":"npx","args":["-y","@blockrun/mcp@latest"]}'

Claude Desktop

📝 Documented

⚠️ renders; OK reports cancel → proceeds

claude_desktop_config.json — JSON below

Cursor

📝 Documented

~/.cursor/mcp.json — JSON below

VS Code (Copilot)

📝 Documented

code --add-mcp '{"name":"blockrun","command":"npx","args":["-y","@blockrun/mcp@latest"]}'

Gemini CLI

📝 Documented

gemini mcp add -s user blockrun npx -y @blockrun/mcp@latest

Grok

📝 Documented · see the timeout note

grok mcp add blockrun -- npx -y @blockrun/mcp@latestraise startup_timeout_sec first, below

Windsurf

📝 Documented

~/.codeium/windsurf/mcp_config.json — JSON below

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 = 120

Or skip the cold download entirely, which is faster every run after the first:

npm install -g @blockrun/mcp@latest
grok mcp add blockrun -- blockrun-mcp

Only 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 --probe

Spend 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

claude_desktop_config.json (Settings → Developer → Edit Config)

Cursor

~/.cursor/mcp.json · Windows %APPDATA%\Cursor\mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json · Linux ~/.config/.codeium/windsurf/mcp_config.json · Windows %APPDATA%\Codeium\windsurf\mcp_config.json

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

full (default)

everything (19 tools)

media

wallet models image video realface music speech

trading

wallet price dex markets defi rpc polymarket_read polymarket

research

wallet models chat search exa

chat

wallet models chat

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 trading

An 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

full (default)

19

13,044

trading

8

5,411

media

7

5,828

research

5

2,752

chat

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-server

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

  1. Dashboard → Keys — mint a key. It looks like brk_live_… and is shown once.

  2. Dashboard → Credits — top up by credit card or wire.

  3. 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/credits

Invoiced 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/skills

skills 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 via blockrun_polymarket — one self-custody wallet, gasless · on-chain tx 0x7ca8…)


Tools

Tool

Data source

Cost

blockrun_chat

78 LLMs (GPT, Claude, Gemini, DeepSeek, Kimi K3, GLM, NVIDIA free tier, …) with mode tier routing

per token

blockrun_image

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

blockrun_video

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

blockrun_realface

Enroll a real person (phone liveness) or AI character (Virtual Portrait) as a ta_xxxx asset for Seedance 2.0 / 2.0-fast / 2.0-mini video (not 2.5)

free; $0.01 to enroll

blockrun_music

MiniMax music generation

per track

blockrun_speech

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

blockrun_price

Pyth-backed realtime + OHLC — crypto / FX / commodity, plus the ticker catalog for 12 equity markets (equity quotes withdrawn 2026-09-05)

free

blockrun_markets

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

blockrun_polymarket_read

Read-only Polymarket positions/open orders plus executable live order previews, separated for MCP clients that enforce tool safety annotations

free

blockrun_polymarket

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

blockrun_exa

Neural web search (Exa) — research, competitors, papers, URL content

$0.01 + fee/query

blockrun_search

Grok Live Search — web + news with citations

$0.025 × max_results

blockrun_dex

Live DEX prices via DexScreener

free

blockrun_rpc

Raw JSON-RPC on 40 chains (Ethereum, Base, Solana, Bitcoin, Sui, NEAR, …) via Tatum

$0.002 + fee/call

blockrun_defi

DefiLlama — protocol TVL, chain TVL, yield pools (APY), token prices

$0.001–0.005 + fee/call

blockrun_modal

Isolated code execution in a BlockRun-hosted Modal sandbox — disposable container, optional GPU (T4 → H100)

$0.01 create; $0.001/op

blockrun_phone

Outbound AI voice calls (Bland) + wallet-owned US/CA numbers (Twilio), carrier + fraud lookups

$0.54/call; $5/number

blockrun_models

Live catalogue of every LLM/image/video/music model + pricing

free

blockrun_wallet

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

  1. Prediction-market consensus"Polymarket's odds for the next Fed decision?"blockrun_markets

  2. Signal → trade (the full loop, self-custody)"If 'hold' is under 30%, put $2 on Yes."blockrun_markets reads, blockrun_polymarket action:"buy" places. Gasless, confirm-gated.

  3. Smart-money forensics"This Polymarket whale — who are they, which wallets are theirs, what's their P&L?"blockrun_markets polymarket/wallet/identity/:wallet + .../cluster

  4. Cited research"5 most-cited papers on speculative decoding, last 90 days."blockrun_exa

  5. Image generation with on-image text"Poster announcing GPT-5.5, retro-futuristic, headline 'NOW LIVE'."blockrun_image

  6. Give your agent a voice"Speak this with the sarah voice."blockrun_speech

  7. Voice phone-out"Call +1-415-… and confirm Friday at 3pm."blockrun_phone

  8. Multi-agent research, capped"Spawn 3 agents on competing L1 narratives. Cap each at $0.50."blockrun_wallet delegate × 3

  9. Raw 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 · withdraw

Safety 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/.session by default; a BLOCKRUN_WALLET_KEY env var or an existing agent wallet.json takes precedence — setup prints 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@latest

Client

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 call blockrun_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 QR

Send 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 QR

Method

Steps

Coinbase

Send → USDC → Base network → paste address

Bridge from Ethereum

bridge.base.org

Card

blockrun_wallet action:"deposit" — Coinbase Onramp, Base only

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

blockrun_defi (DefiLlama)

❌ not served on the Solana gateway

blockrun_modal (sandboxes)

❌ not configured on the Solana gateway

Native Anthropic claude-* passthrough

❌ the SDK signs EIP-3009 only

Polymarket trading

❌ needs a keypair

blockrun_wallet balance / deposit / QR

❌ no wallet

blockrun_realface action:"list"

❌ 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 — blockrun_chat

An estimate. Chat settles after the response by design, so no figure exists when the answer is sent

API key — blockrun_image

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_wallet first to check status, then action:"setup" for funding. Don't retry the failing tool blindly — the wallet is empty.

  • CRITICAL: blockrun_polymarket moves REAL user funds (pUSD on Polygon), separate from the x402 API budget. Never buy/sell/redeem with confirm:true unless the user explicitly approved that exact trade; without confirm you get a safe dry-run. Discover markets/token IDs with blockrun_markets first.

  • CRITICAL: blockrun_music and blockrun_video are 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 pass agent_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), and blockrun_models are $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 api.blockrun.ai

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 api.blockrun.ai

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

BLOCKRUN_API_KEY

unset

A BlockRun account key (brk_live_…) from user.blockrun.ai/dashboard/keys. Set → account billing through api.blockrun.ai: no wallet is created, read or used, and no chain applies. Takes priority over every wallet setting below. A malformed value is a startup error, never a silent fall back to the wallet.

~/.blockrun/.api-key

not created

The same key on disk, for clients that make env vars awkward. Read only when BLOCKRUN_API_KEY is unset; an empty or unreadable file falls through to wallet mode.

BLOCKRUN_API_BASE_URL

https://api.blockrun.ai

Account API service endpoint used after you get a key at user.blockrun.ai. Override only for staging. Accepts the OpenAI-style …/v1 form too.

~/.blockrun/.session

created on the first blockrun_wallet call (with .solana-session)

EVM private key (0x…). Which chain pays is the priority list below, not this file's existence. Also the Polymarket signer (unless BLOCKRUN_WALLET_KEY or an agent wallet.json takes precedence).

BLOCKRUN_WALLET_KEY

unset

Env override of the EVM key — takes precedence over .session / wallet.json as the Base + Polymarket signer.

~/.blockrun/.chain

unset

Explicit chain preference: base or solana. Written only by blockrun_wallet action:"chain" — i.e. only when you choose.

~/.blockrun/.chain-auto

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 SOLANA_WALLET_KEY. Cleared whenever you set a chain explicitly.

~/.blockrun/.solana-session

created on the first blockrun_wallet call (with .session)

Solana private key — the funded wallet on a new install. Which chain pays is the priority list below.

SOLANA_WALLET_KEY

unset

Env override of .solana-session. Set → use Solana.

BLOCKRUN_KEYCHAIN

auto

Key storage. auto — mirror the key into the OS keychain (macOS Keychain / Linux secret-tool) and keep the plaintext file, which stays authoritative so other BlockRun tools keep working and so replacing it still rotates your wallet. off — file only. strict — also delete ~/.blockrun/.session once a read-back proves the keychain holds the same key; this breaks other tools that read that file directly.

BLOCKRUN_MCP_PROFILE

full

Tool profile (media / trading / research / chat).

BLOCKRUN_BUDGET_LIMIT

unset (unlimited)

Hard USD cap on spend for this server process (both rails). In-memory; resets on restart. Per-agent caps via blockrun_wallet action:"delegate".

BLOCKRUN_CONFIRM_SPEND

off

on — ask before every paid call via MCP elicitation. Details. Fails open on clients without elicitation.

BLOCKRUN_CONFIRM_THRESHOLD

0

Only ask for calls estimated above this many USD. Malformed values fall back to 0 (ask for everything), never to "off".

POLYMARKET_CLOB_HOST

BlockRun Finland relay

Geoblock egress for order placement — defaulted for you. Override to go direct (https://clob.polymarket.com) or your own egress.

POLYMARKET_MAX_BET_USD

25

Hard per-order notional cap.

POLYMARKET_MAX_SESSION_USD

unset

Optional cumulative per-process betting cap.

POLYMARKET_SIG_TYPE

3

3 = deposit wallet (POLY_1271, gasless); 0 = plain EOA mode.

POLYMARKET_CLOB_PROXY

unset

HTTPS proxy for Polymarket CLOB traffic only.

POLYMARKET_BOUNDED_APPROVALS

unset (unlimited)

Bound pUSD exchange allowances to this many dollars.

BLOCKRUN_BUILDER_CODE

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-debug skill carries every row below as symptom → cause → fix, plus the diagnostics it can run itself. blockrun-setup and blockrun-upgrade cover the other two halves. Install: npx -y @blockrun/mcp@latest skills install.

  • Insufficient balance / HTTP 402 after retry → Run blockrun_wallet action:"setup", send USDC on Base (or Solana).

  • blockrun doesn't connect / "MCP server failed" / spawn npx ENOENT → Almost always a PATH issue: Claude Code can't find node/npx on 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@latest

    Then restart Claude Code. Or pin absolute paths (which npx).

  • claude mcp list doesn't show blockrun → Check node -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 — check blockrun_wallet action:"report" instead.

  • blockrun_price says Equity 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_markets on sports/* fails — before 0.49.0 as API error after payment: 502 with no balance change → Predexon's sports/* 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 check blockrun_wallet action:"report"). For sports odds use path:"markets/search" with params:{ q: "NBA" }, or polymarket/events with params:{ search: "NBA" } — the bare markets route and its league filter 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. Use BLOCKRUN_BUDGET_LIMIT as the guard, or a client from the support table.

  • Polymarket: neg-risk ("winner") market buy fails, or redeem reverts, though setup shows ready → Re-run action:"setup" confirm:true once (grants the on-chain approvals a pre-upgrade deposit wallet may lack — including the collateral-adapter approvals redeem needs). 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

t.me/blockrunAI

🐦 X / Twitter

@BlockRunAI

📖 Documentation

blockrun.ai/docs

🐛 Issues

github.com/BlockRunAI/blockrun-mcp/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 tools
blockrun_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoRouting 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)
stopNoUp to 4 stop sequences; generation halts when any is produced
modelNoSpecific model ID (e.g., 'moonshot/kimi-k3', 'openai/gpt-5.6-sol', 'zai/glm-5')
systemNoOptional system prompt
messageYesYour message to the AI
agent_idNoAgent 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.
messagesNoConversation 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.
thinkingNoAnthropic 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_tokensNoMax tokens in response
temperatureNoCreativity 0-2
response_formatNoSet to 'json_object' to force valid JSON output (no markdown fences). Works across all providers.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_defiA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesEndpoint under /v1/defillama/, e.g. 'protocols', 'protocol/aave-v3', 'chains', 'yields', 'prices/coingecko:ethereum'
agent_idNoAgent identifier for budget tracking and enforcement.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_dexA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoFilter by chain (ethereum, solana, base, etc.)
queryNoSearch query (token name, symbol, or address)
tokenNoToken address for direct lookup
symbolNoToken symbol to search

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_exaA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON body for the call. Sent as POST. Required for all four endpoints.
pathYesEndpoint name under /v1/exa/, e.g. 'search', 'answer', 'contents', 'find-similar'
agent_idNoAgent identifier for budget tracking and enforcement.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
maskNoInpaint 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.
sizeNoImage size. Common values: 1024x1024 (all models), 1536x1024 / 1024x1536 (gpt-image-*), 2048x2048 / 4096x4096 (nano-banana-pro), 1280x720 / 2048x1024 / 2048x2048 / 2848x1600 (seedream-5-pro)1024x1024
imageNoSource 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.
modelNoModel 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.
actionNogenerate: create from text; edit: transform existing imagegenerate
inlineNoReturn 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.
promptYesImage description or edit instructions
agent_idNoAgent identifier for budget tracking and enforcement.

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON body for POST queries (triggers pmQuery — most endpoints are GET)
pathYesEndpoint path, no query string, e.g. 'polymarket/events', 'kalshi/markets' (filter via params: { ticker: 'KXBTC-25MAR14' }), 'polymarket/wallet/0xabc...', 'markets/search'
paramsNoQuery parameters for GET requests (e.g. markets/search uses { q: 'Bitcoin', status: 'open', venue: 'polymarket', limit: '20' })
agent_idNoAgent identifier for budget tracking and enforcement.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_modalA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON body. Sent as POST.
pathYesEndpoint under /v1/modal/, e.g. 'sandbox/create', 'sandbox/exec'
agent_idNoAgent identifier for budget tracking and enforcement.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_modelsA
Read-only

List available AI models with pricing. Use to discover models and compare costs.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by categoryall
providerNoFilter by provider (e.g., 'openai', 'anthropic')

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoMusic model to useminimax/music-2.5+
lyricsNoCustom lyrics. Cannot be used with instrumental: true
promptYesMusic style, mood, or description. E.g. 'upbeat synthwave with neon pads', 'chill lo-fi beats', 'epic orchestral film score'
agent_idNoAgent identifier for budget tracking and enforcement.
instrumentalNoGenerate without vocals (default: true)

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_phoneA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON body. Sent as POST. Omit for the free GET poll (voice/call/{call_id}).
pathYesEndpoint after /v1/. Use 'phone/...' for lookup + number ops, 'voice/call' for outbound AI calls, 'voice/call/{id}' (no body) to poll status.
agent_idNoAgent identifier for budget tracking and enforcement.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_polymarketA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNocancel: cancel ALL open orders
sizeNoShares — required for limit orders and market sells
priceNoLimit price as probability (0–1). Omit for a market order.
actionYesOperation to perform
confirmNoMust be true to place orders / sign approvals / redeem. Omit for a dry-run preview.
outcomeNoOutcome label (e.g. 'Yes') — used with condition_id when token_id is omitted
agent_idNoTag for the session betting ledger (bets do NOT draw from the x402 API budget)
order_idNoOrder ID to cancel
token_idNoOutcome token ID (decimal ERC-1155 id from blockrun_markets clobTokenIds)
post_onlyNoMaker-only limit order (rejected if it would cross the book)
amount_usdNopUSD dollars — to spend (market buy) or to cash out (withdraw; default full balance)
expires_atNoUnix seconds expiry (GTD only, ≥ ~3 min in the future)
order_typeNoDefault: GTC for limit orders, FOK for market orders
to_addressNowithdraw: destination address on Base (default: your agent wallet)
condition_idNoMarket condition ID (0x…). With `outcome` it resolves token_id; required for redeem.
max_fill_priceNoMarket 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

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_readA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sideNopreview: order side
sizeNopreview: shares for limits and market sells
priceNopreview: limit probability; omit for market order
actionYesRead-only operation
outcomeNopreview: outcome label used with condition_id
token_idNopreview: outcome token ID
post_onlyNopreview: maker-only limit order
amount_usdNopreview: pUSD to spend on a market buy
expires_atNopreview: GTD expiry in Unix seconds
order_typeNopreview: order type
condition_idNoorders: optional market condition ID filter

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoHistory window end (unix seconds).
fromNoHistory window start (unix seconds).
limitNoMax items for list (default 100, max 2000).
queryNoFree-text filter for list.
actionYesWhich endpoint to hit: price, history, or list.
marketNoStock market code — required when category='stocks'.
symbolNoTicker (required for price+history). e.g. BTC-USD, EUR-USD, XAU-USD.
sessionNoEquity session hint (pre/post/on); ignored for non-equity.
agent_idNoAgent identifier for budget tracking and enforcement.
categoryYesMarket category.
resolutionNoBar resolution for history (default D).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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:

  1. blockrun_realface action:"init" name:"Alice" → scan QR on phone, do liveness

  2. blockrun_realface action:"status" group_id:"legacy_rf_…" → repeat until ready_to_finalize:true

  3. blockrun_realface action:"enroll" name:"Alice" group_id:"legacy_rf_…" image_url:"https://…/alice.jpg" → ta_xxxx

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name for the person/character (required for init, enroll, and portrait).
actionYesWhat to do
agent_idNoAgent identifier for budget tracking and enforcement (enroll only).
group_idNoAsset-group id from init (required for status and enroll; pass to init to refresh an expired H5 link). Not used by portrait.
image_urlNoPublic HTTPS URL to a clear front-facing face image (JPG/PNG/WEBP, ≤10MB). Required for enroll and portrait.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_rpcA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoFull JSON-RPC 2.0 body or an array of them (batch). Overrides method/params when set.
methodNoJSON-RPC method, e.g. 'eth_blockNumber', 'eth_call', 'getSlot' (Solana), 'getblockchaininfo' (Bitcoin). Required unless 'body' is set.
paramsNoJSON-RPC params array for the method, e.g. ['0xabc...', 'latest'].
networkYesChain key, e.g. 'ethereum', 'base', 'solana', 'bitcoin', 'arbitrum', 'polygon'. Unknown slugs pass through to the Tatum gateway.
agent_idNoAgent identifier for budget tracking and enforcement.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
inputNospeak: text to synthesize. sound_effect: description of the sound, e.g. 'rain on a tin roof, distant thunder' (max 1000 chars).
modelNoSpeech 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
speedNoPlayback speed 0.7-1.2 (speak only)
voiceNoVoice alias (sarah, george, laura, charlie, river, roger, callum, harry) or raw ElevenLabs voice_id. Default: sarah.
actionNospeak: text-to-speech (default). sound_effect: generate a sound effect. voices: list voices (free).speak
agent_idNoAgent identifier for budget tracking and enforcement.
response_formatNoAudio formatmp3
duration_secondsNoSound effect length in seconds (sound_effect only; default: auto)
prompt_influenceNoHow literally to follow the prompt, 0-1 (sound_effect only)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoVideo model to usexai/grok-imagine-video
promptYesText 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_idNoAgent identifier for budget tracking and enforcement.
image_urlNoOptional seed image URL for image-to-video generation
resolutionNoOutput 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_ratioNoOutput 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_audioNoSeedance 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_urlNoSeedance 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_secondsNoDuration 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_idNoBytePlus 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

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

  1. action:"chain" chain:"solana" → provisions + activates the Solana wallet

  2. 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:

  1. blockrun_wallet action:"delegate" agent_id:"worker-1" agent_limit:1.00

  2. Pass agent_id:"worker-1" to all blockrun_chat/search/etc calls for that agent

  3. blockrun_wallet action:"report" to audit spending

Do NOT call this for actual AI queries — use blockrun_chat for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoTarget chain for action='chain'. Omit to view the current active chain.
actionNoWhat to dostatus
agent_idNoAgent identifier for delegate/revoke/report actions
agent_limitNoBudget limit in USD for this agent (required for delegate action)
budget_actionNoBudget action (for action='budget'). Defaults to 'check', which only reports.
budget_amountNoBudget limit in USD (for budget_action='set')

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 4 tool updatesv0.51.1
    • Changedblockrun_image1 field changed
      • removedInput schema / properties / quality
        Removed value: -{
        -  "default": "standard",
        -  "enum": [
        -    "standard",
        -    "hd"
        -  ],
        -  "type": "string"
        -}
    • Changedblockrun_markets1 field changed
      • changedInput schema / properties / path / description
        Previous 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'"
    • Changedblockrun_polymarket1 field changed
      • addedInput schema / properties / max_fill_price
        Added 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"
        +}
    • Changedblockrun_wallet1 field changed
      • changedInput schema / properties / budget_action / description
        Previous value: -"Budget action (for action='budget')"New value: +"Budget action (for action='budget'). Defaults to 'check', which only reports."
  2. 3 tool updatesv0.49.0
    • Changedblockrun_chat1 field changed
      • changedInput schema / properties / mode / description
        Previous 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)"
    • Changedblockrun_price1 field changed
      • changedInput schema / properties / symbol / description
        Previous 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."
    • Removedblockrun_surf
  3. 20 tool updatesv0.45.1
    • Changedblockrun_chat1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_defi1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_dex1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_exa1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_image1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_markets1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_modal1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_models1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_music1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_phone1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_polymarket1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_polymarket_read1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_price1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_realface1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_rpc1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_search1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_speech1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_surf1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_video1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedblockrun_wallet1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
  4. 4 tool updatesv0.40.1
    • Changedblockrun_chat1 field changed
      • changedInput schema / properties / mode / description
        Previous 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)"
    • Changedblockrun_music1 field changed
      • changedInput schema / properties / model / enum
        Previous value: -[
        -  "minimax/music-2.5+",
        -  "minimax/music-2.5"
        -]New value: +[
        +  "minimax/music-2.5+"
        +]
    • Changedblockrun_speech2 fields changed
      • changedInput schema / properties / model / description
        Previous 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."
      • changedInput schema / properties / model / enum
        Previous 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"
        +]
    • Changedblockrun_video5 fields changed
      • changedInput schema / properties / duration_seconds / description
        Previous 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."
      • changedInput schema / properties / last_frame_url / description
        Previous 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."
      • changedInput schema / properties / model / enum
        Previous 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"
        +]
      • changedInput schema / properties / real_face_asset_id / description
        Previous 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."
      • changedInput schema / properties / resolution / description
        Previous 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)."
  5. 1 tool updatev0.39.0
    • Changedblockrun_video8 fields changed
      • changedInput schema / properties / aspect_ratio / description
        Previous 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.)"
      • changedInput schema / properties / aspect_ratio / enum
        Previous 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"
        +]
      • changedInput schema / properties / duration_seconds / description
        Previous 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."
      • changedInput schema / properties / last_frame_url / description
        Previous 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."
      • changedInput schema / properties / model / enum
        Previous 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"
        +]
      • changedInput schema / properties / real_face_asset_id / description
        Previous 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."
      • changedInput schema / properties / resolution / description
        Previous 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)."
      • changedInput schema / properties / resolution / enum
        Previous value: -[
        -  "360p",
        -  "480p",
        -  "540p",
        -  "720p",
        -  "1080p",
        -  "1K",
        -  "2K",
        -  "4K"
        -]New value: +[
        +  "480p",
        +  "720p",
        +  "1080p",
        +  "4K"
        +]
  6. 1 tool updatev0.37.1
    • Changedblockrun_image2 fields changed
      • changedInput schema / properties / model / enum
        Previous 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"
        +]
      • changedInput schema / properties / size / description
        Previous 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)"
  7. 3 tool updatesv0.33.0
    • Changedblockrun_chat3 fields changed
      • changedInput schema / properties / messages / description
        Previous 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."
      • changedInput schema / properties / mode / description
        Previous 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)"
      • changedInput schema / properties / model / description
        Previous 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')"
    • Changedblockrun_markets1 field changed
      • changedInput schema / properties / params / description
        Previous 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' })"
    • Addedblockrun_polymarket_read
  8. 4 tool updatesv0.31.6
    • Changedblockrun_chat2 fields changed
      • removedInput schema / properties / routing
        Removed value: -{
        -  "description": "Set to \"smart\" to auto-select the optimal model via ClawRouter (14-dimension AI routing)",
        -  "enum": [
        -    "smart"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / routing_profile
        Removed 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"
        -}
    • Addedblockrun_polymarket
    • Changedblockrun_surf2 fields changed
      • changedInput schema / properties / body / description
        Previous 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."
      • changedInput schema / properties / path / description
        Previous 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'"
    • Changedblockrun_wallet1 field changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "status",
        -  "setup",
        -  "qr",
        -  "chain",
        -  "budget",
        -  "delegate",
        -  "revoke",
        -  "report"
        -]New value: +[
        +  "status",
        +  "deposit",
        +  "setup",
        +  "qr",
        +  "chain",
        +  "budget",
        +  "delegate",
        +  "revoke",
        +  "report"
        +]
  9. 3 tool updatesv0.25.2
    • Changedblockrun_chat5 fields changed
      • changedInput schema / properties / routing_profile / description
        Previous 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\"."
      • changedInput schema / properties / thinking / properties / budget_tokens / description
        Previous 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."
      • addedInput schema / properties / thinking / properties / budget_tokens / maximum
        Added value: +100000
      • changedInput schema / properties / thinking / properties / budget_tokens / minimum
        Previous value: -1New value: +1024
      • changedInput schema / properties / thinking / properties / budget_tokens / type
        Previous value: -"number"New value: +"integer"
    • Changedblockrun_image5 fields changed
      • addedInput schema / properties / image / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 4,
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / image / description
        Previous 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."
      • removedInput schema / properties / image / type
        Removed value: -"string"
      • addedInput schema / properties / inline
        Added 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"
        +}
      • addedInput schema / properties / mask
        Added 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"
        +}
    • Changedblockrun_video4 fields changed
      • addedInput schema / properties / aspect_ratio
        Added 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"
        +}
      • addedInput schema / properties / generate_audio
        Added 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"
        +}
      • addedInput schema / properties / last_frame_url
        Added 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"
        +}
      • addedInput schema / properties / resolution
        Added 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"
        +}
  10. 6 tool updatesv0.22.0
    • Changedblockrun_chat7 fields changed
      • changedInput schema / properties / messages / description
        Previous 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."
      • addedInput schema / properties / messages / items / properties / content / anyOf
        Added 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"
        +  }
        +]
      • addedInput schema / properties / messages / items / properties / content / description
        Added value: +"Plain text, or an array of parts for multimodal input (text + image_url). Images are honored on the native anthropic/claude-* path."
      • removedInput schema / properties / messages / items / properties / content / type
        Removed value: -"string"
      • addedInput schema / properties / response_format
        Added value: +{
        +  "description": "Set to 'json_object' to force valid JSON output (no markdown fences). Works across all providers.",
        +  "enum": [
        +    "text",
        +    "json_object"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / stop
        Added value: +{
        +  "description": "Up to 4 stop sequences; generation halts when any is produced",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 4,
        +  "type": "array"
        +}
      • addedInput schema / properties / thinking
        Added 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"
        +}
    • Addedblockrun_defi
    • Changedblockrun_image4 fields changed
      • changedInput schema / properties / model / description
        Previous 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."
      • changedInput schema / properties / model / enum
        Previous 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"
        +]
      • addedInput schema / properties / size / description
        Added value: +"Image size. Common values: 1024x1024 (all models), 1536x1024 / 1024x1536 (gpt-image-*), 2048x2048 / 4096x4096 (nano-banana-pro)"
      • removedInput schema / properties / size / enum
        Removed value: -[
        -  "1024x1024",
        -  "1792x1024",
        -  "1024x1792"
        -]
    • Changedblockrun_realface4 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "init",
        -  "status",
        -  "enroll",
        -  "list"
        -]New value: +[
        +  "init",
        +  "status",
        +  "enroll",
        +  "portrait",
        +  "list"
        +]
      • changedInput schema / properties / group_id / description
        Previous 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."
      • changedInput schema / properties / image_url / description
        Previous 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."
      • changedInput schema / properties / name / description
        Previous 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)."
    • Addedblockrun_rpc
    • Addedblockrun_speech
  11. 15 tool updatesv0.16.2
    • First observedblockrun_chat
    • First observedblockrun_dex
    • First observedblockrun_exa
    • First observedblockrun_image
    • First observedblockrun_markets
    • First observedblockrun_modal
    • First observedblockrun_models
    • First observedblockrun_music
    • First observedblockrun_phone
    • First observedblockrun_price
    • First observedblockrun_realface
    • First observedblockrun_search
    • First observedblockrun_surf
    • First observedblockrun_video
    • First observedblockrun_wallet

TDQS

A4.1/5.0

Scored across 19 tools

Disambiguation3/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables Claude to access real-time crypto prices, forex rates, and market sentiment data through free public APIs with no keys required.
    5
    3
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to access real-time financial data including crypto, equities, on-chain, prediction markets, and macro via a single API key.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides live data API for AI agents with 51 REST endpoints across finance, travel, weather, news, and more, using USDC micropayments without API keys.
    61 npm
    MIT