Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,31 @@

All notable changes to BlockRun MCP will be documented in this file.

## 0.33.0

`blockrun_nosana` — rent a GPU container on Nosana, a decentralized market on
Solana, with the wallet this MCP already holds.

- A second landlord, not a cheaper one. `blockrun_modal` stays the fast path:
one HTTP call, USDC on Base, nothing extra to hold. Nosana is the durable
path — the market is an on-chain program, so no company can end a running
lease, and the cheapest GPU market measured $0.048/hr against $1.50/hr for a
managed T4. An agent that can only rent from one provider stops existing when
that provider does.
- `action:"rent" | "status" | "extend"`. A lease can be extended in place, so a
long-lived agent does not have to move house every time the clock runs out.
- Costs stated in the tool description, not discovered later: you must hold NOS
and a little SOL, and the job definition is pinned to PUBLIC IPFS — anything
secret has to travel through the confidential channel, never through `env`.
- `cmd` must be a single shell string. An array command is accepted by the SDK
and then kills the container a few seconds in with no error, so the tool
refuses it where the caller can still read why.
- `max_spend_usd` refuses an over-budget lease before any key is touched.
- `@nosana/sdk` is an OPTIONAL PEER dependency, imported lazily inside the
handler. Not `optionalDependencies` — npm installs those by default, which
would charge every user 113 packages for a tool most will never call. An
optional peer is installed only by the people who ask for it.

## 0.32.9

Closes the external-review backlog: all 8 findings from the Kimi K3 review
Expand Down
15 changes: 8 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@

<p>Agents can't sign up for accounts. Agents can't enter credit cards.<br>
Agents can only sign transactions.<br><br>
<strong>BlockRun MCP gives your agent <!-- br:mcp.tools -->19<!-- /br:mcp.tools --> tools — markets, research, web search, images, video, on-chain data, and live Polymarket trading — paid per call in USDC. No accounts. No API keys. No dashboards.</strong><br><br>
<strong>BlockRun MCP gives your agent <!-- br:mcp.tools -->20<!-- /br:mcp.tools --> tools — markets, research, web search, images, video, on-chain data, and live Polymarket trading — paid per call in USDC. No accounts. No API keys. No dashboards.</strong><br><br>
<em>Read the odds <strong>and</strong> place the bet, from one self-custody wallet.</em></p>

<br>

<img src="https://img.shields.io/badge/🧰_19_Tools-success?style=for-the-badge" alt="19 tools">&nbsp;
<img src="https://img.shields.io/badge/🧰_20_Tools-success?style=for-the-badge" alt="20 tools">&nbsp;
<img src="https://img.shields.io/badge/🤖_Agent--Native-black?style=for-the-badge" alt="Agent native">&nbsp;
<img src="https://img.shields.io/badge/🔑_Zero_API_Keys-blue?style=for-the-badge" alt="No API keys">&nbsp;
<img src="https://img.shields.io/badge/📈_Read_+_Trade_Polymarket-e11d48?style=for-the-badge" alt="Read and trade Polymarket">&nbsp;
Expand Down Expand Up @@ -42,7 +42,7 @@ claude mcp add blockrun -s user -- npx -y @blockrun/mcp@latest

---

> **BlockRun MCP** is an open-source [Model Context Protocol](https://modelcontextprotocol.io) server that gives Claude — and any MCP-compatible agent — <!-- br:mcp.tools -->19<!-- /br:mcp.tools --> tools for real-time data and real actions: <!-- br:models.chatVisible -->66<!-- /br:models.chatVisible --> LLMs, image & video generation, prediction-market data, live web/X search, on-chain queries across <!-- br:chains.rpc -->40<!-- /br:chains.rpc --> chains, and **the ability to place real, USDC-settled bets on Polymarket**. Authentication is a wallet signature (no API keys); you pay per call in USDC via the [x402](https://x402.org) protocol (no credit cards, no subscriptions). One self-custody wallet on Base or Solana. MIT licensed.
> **BlockRun MCP** is an open-source [Model Context Protocol](https://modelcontextprotocol.io) server that gives Claude — and any MCP-compatible agent — <!-- br:mcp.tools -->20<!-- /br:mcp.tools --> tools for real-time data and real actions: <!-- br:models.chatVisible -->66<!-- /br:models.chatVisible --> LLMs, image & video generation, prediction-market data, live web/X search, on-chain queries across <!-- br:chains.rpc -->40<!-- /br:chains.rpc --> chains, and **the ability to place real, USDC-settled bets on Polymarket**. Authentication is a wallet signature (no API keys); you pay per call in USDC via the [x402](https://x402.org) protocol (no credit cards, no subscriptions). One self-custody wallet on Base or Solana. MIT licensed.

## 🏆 First of its kind — the signal → trade loop in Claude Code

Expand All @@ -56,7 +56,7 @@ Every other data integration was built for **human developers** — create an ac

**Agents can't do any of that.** BlockRun MCP is built for the agent-first world:

- **One wallet, every source** — <!-- br:mcp.tools -->19<!-- /br:mcp.tools --> tools behind a single self-custody wallet. No per-vendor signups.
- **One wallet, every source** — <!-- br:mcp.tools -->20<!-- /br:mcp.tools --> tools behind a single self-custody wallet. No per-vendor signups.
- **No API keys** — your wallet signature *is* authentication.
- **No credit cards** — pay per request in USDC via [x402](https://x402.org), fractions of a cent each.
- **Starts free** — the free tier (`blockrun_chat mode:"free"`, `blockrun_dex`, crypto `blockrun_price`, `blockrun_models`) costs $0.
Expand All @@ -71,7 +71,7 @@ Every other data integration was built for **human developers** — create an ac
| ------------------- | -------------------------------- | ------------------------- | ----------------------------------------- |
| **Setup** | Account + API key *per vendor* | Account/key for 1 vendor | **Wallet auto-created, no signup** |
| **Payment** | Credit card, monthly minimums | Credit card / vendor plan | **USDC per-call via x402** |
| **Data sources** | One per integration | One vendor | **<!-- br:mcp.tools -->19<!-- /br:mcp.tools --> tools — LLMs, media, markets, chain**|
| **Data sources** | One per integration | One vendor | **<!-- br:mcp.tools -->20<!-- /br:mcp.tools --> tools — LLMs, media, markets, chain**|
| **Place real bets** | Build it yourself | Rare | **Yes — Polymarket CLOB, confirm-gated** |
| **Pay-chain** | — | — | **Base + Solana** |
| **Agent budgets** | Manual | — | **Built-in per-agent delegation** |
Expand Down Expand Up @@ -147,7 +147,7 @@ Expose a trimmed tool set so the client loads fewer schemas into context. Pass `

| Profile | Tools |
|---------|-------|
| `full` *(default)* | everything (<!-- br:mcp.tools -->19<!-- /br:mcp.tools --> tools) |
| `full` *(default)* | everything (<!-- br:mcp.tools -->20<!-- /br:mcp.tools --> tools) |
| `media` | `wallet` `models` `image` `video` `realface` `music` `speech` |
| `trading` | `wallet` `price` `dex` `markets` `surf` `defi` `rpc` `polymarket` |
| `research` | `wallet` `models` `chat` `search` `exa` `surf` |
Expand Down Expand Up @@ -213,6 +213,7 @@ Claude reads the odds with `blockrun_markets` and — with your confirmation —
| `blockrun_rpc` | Raw JSON-RPC on <!-- br:chains.rpc -->40<!-- /br:chains.rpc --> chains (Ethereum, Base, Solana, Bitcoin, Sui, NEAR, …) via Tatum | $0.002/call |
| `blockrun_defi` | DefiLlama — protocol TVL, chain TVL, yield pools (APY), token prices | $0.001–0.005/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_nosana` | Rent a GPU container on Nosana, a decentralized market on Solana — no provider can end a running lease; extendable | ~$0.05/GPU-hr, paid on-chain in NOS |
| `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 |
Expand Down Expand Up @@ -382,7 +383,7 @@ The server runs a non-blocking npm registry check at startup and prints an `Upda
## FAQ

**What is BlockRun MCP?**
An open-source MCP server that gives Claude and other agents <!-- br:mcp.tools -->19<!-- /br:mcp.tools --> tools for real-time data and real actions (trading, media, on-chain), paid per call in USDC. No accounts, no API keys.
An open-source MCP server that gives Claude and other agents <!-- br:mcp.tools -->20<!-- /br:mcp.tools --> tools for real-time data and real actions (trading, media, on-chain), paid per call in USDC. No accounts, no API keys.

**Do I need API keys or accounts?**
No. A wallet is auto-created locally on first run; you fund it with USDC. No signups, no dashboards, no key rotation.
Expand Down
2 changes: 1 addition & 1 deletion brand-numbers.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"aliases": 202
},
"mcp": {
"tools": 19
"tools": 20
},
"chains": {
"rpc": 40
Expand Down
10 changes: 9 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@blockrun/mcp",
"version": "0.32.9",
"version": "0.33.0",
"mcpName": "io.github.BlockRunAI/blockrun-mcp",
"description": "BlockRun MCP Server - Give your AI agent web search, deep research, prediction markets, and crypto data. Paid via x402 micropayments.",
"type": "module",
Expand Down Expand Up @@ -86,5 +86,13 @@
},
"engines": {
"node": ">=20.19"
},
"peerDependencies": {
"@nosana/sdk": "^0.4.86"
},
"peerDependenciesMeta": {
"@nosana/sdk": {
"optional": true
}
}
}
2 changes: 2 additions & 0 deletions src/mcp-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { registerSurfTool } from "./tools/surf.js";
import { registerRpcTool } from "./tools/rpc.js";
import { registerDefiTool } from "./tools/defi.js";
import { registerPolymarketTool } from "./tools/polymarket.js";
import { registerNosanaTool } from "./tools/nosana.js";
import { resolveTools, type ToolName } from "./profiles.js";

/**
Expand Down Expand Up @@ -74,6 +75,7 @@ export function initializeMcpServer(
rpc: () => registerRpcTool(server, budget),
defi: () => registerDefiTool(server, budget),
polymarket: () => registerPolymarketTool(server),
nosana: () => registerNosanaTool(server),
};

for (const [name, register] of Object.entries(registrars) as [ToolName, () => void][]) {
Expand Down
5 changes: 3 additions & 2 deletions src/profiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,15 @@ export type ToolName =
| "surf"
| "rpc"
| "defi"
| "polymarket";
| "polymarket"
| "nosana";

// `as const satisfies` keeps the literal tuple type (so the exhaustiveness
// guard below can see the actual entries) AND rejects any entry that isn't a
// real ToolName (catches typos).
export const ALL_TOOLS = [
"wallet", "chat", "models", "image", "music", "speech", "video", "realface",
"search", "exa", "markets", "price", "dex", "modal", "phone", "surf", "rpc", "defi",
"search", "exa", "markets", "price", "dex", "modal", "phone", "surf", "rpc", "defi", "nosana",
"polymarket",
] as const satisfies readonly ToolName[];

Expand Down
Loading