Skip to content

blockrunai/blockrun-mcp

v0.31.6 Security

This release includes 1 security fix for security teams reviewing exposed deployments.

Published 11d MCP Search & Web
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 1 known CVE

Topics

ai claude-code llm mcp mcp-server x402

Affected surfaces

breaking_upgrade crypto_tls

ReleasePort's take

Moderate signal
editorial:auto 11d

The `prediction-markets` skill now loads correctly after a YAML frontmatter parsing fix, and the prototype key vulnerability that bypassed budget caps has been patched.

Why it matters: Fixes the prediction‑markets skill loading issue; patches a high‑severity (90) prototype key vulnerability preventing non‑finite cost estimates from causing failures.

Summary

AI summary

Fixed pricing discrepancies, budget cap bypass, and unregistered skill caused by YAML parse failure.

Changes in this release

Security Critical

Prototype key vulnerability that bypassed all budget caps is patched; non‑finite cost estimates now cause failure.

Prototype key vulnerability that bypassed all budget caps is patched; non‑finite cost estimates now cause failure.

Source: llm_adapter@2026-07-16

Confidence: high

Feature Low

New command `npm run verify:prices` validates that price estimator matches live gateway quotes for all 20 paid routes.

New command `npm run verify:prices` validates that price estimator matches live gateway quotes for all 20 paid routes.

Source: llm_adapter@2026-07-16

Confidence: low

Bugfix High

`withTxFee` calculation now correctly rounds up micro‑USDC values, preventing under‑charging.

`withTxFee` calculation now correctly rounds up micro‑USDC values, preventing under‑charging.

Source: llm_adapter@2026-07-16

Confidence: low

Bugfix Medium

`prediction-markets` skill now loads correctly after YAML frontmatter parsing fix.

`prediction-markets` skill now loads correctly after YAML frontmatter parsing fix.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Medium

`blockrun_surf` endpoint now correctly reports as non-existent, removing phantom 84th entry.

`blockrun_surf` endpoint now correctly reports as non-existent, removing phantom 84th entry.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Medium

Price discrepancies across paid routes are corrected; estimator now matches live gateway quotes.

Price discrepancies across paid routes are corrected; estimator now matches live gateway quotes.

Source: llm_adapter@2026-07-16

Confidence: high

Bugfix Medium

'withTxFee' calculation rounds up micro‑USDC values to match gateway behavior.

'withTxFee' calculation rounds up micro‑USDC values to match gateway behavior.

Source: granite4.1:30b@2026-07-16-audit

Confidence: low

Full changelog

Two of these were live the whole time and invisible to every prior audit round: a skill that never loaded and an endpoint that never existed. Both were found by asking the gateway instead of re-reading our own files.

prediction-markets has never once loaded

Its description read ...you CANNOT get from a public API: historical price.... A plain YAML scalar may not contain ": ", so the frontmatter failed to parse, the loader got no name, and the skill was never registered. It built, it published, the prose read perfectly — the only symptom was that Claude never used a capability we shipped.

blockrun_surf advertised an endpoint that does not exist

chat/completions ("Surf-1.5 chat with citations", $0.02 flat) returns 404 Unknown Surf endpoint — the gateway replies with its own catalog of 83. That phantom was the off-by-one: surf.ts claimed 84 where the skill and the gateway both say 83.

Correctness

  • withTxFee rounded where the gateway ceils. usdToMicroUsdc is an unconditional Math.ceil; rounding goes one micro short wherever the ×1.05 margin drifts in float. modal's CPU hour charges 102001 micro, not 102000 — .toFixed(4) had been hiding it.
  • A prototype key killed every budget cap. modal's GPU tables were object literals, so TABLE["toString"] returned a function, reaching the gate as NaNcost > 0 is false (call allowed) and spent += NaN sticks for the life of the process. A $1-capped agent was cleared for a $500 call. Now Maps, and budget.ts fails closed on any non-finite estimate.

Prices — all understating, all corrected against live quotes

| | claimed | charged |
|---|---|---|
| image-prompting nano-banana | ~$0.01 | $0.0545 (5.45×) |
| image-prompting gpt-image-2 poster | ~$0.04 | $0.128 (3.2×) |
| surf worked example | $0.001 | $0.0095 (9.5×) |
| modal A100 example | no price, "auto-evicts when idle" | $1.3413, upfront, never refunded |
| rpc | $0.002 | $0.0040 |
| exa | $0.01 | $0.0120 |
| search max_results:20 | $0.50 | $0.527 |

Plus crypto-data, which documented blockrun_rpc({ chain: ... }) when the param is network — the call as written could not have run.

New: npm run verify:prices

Probes all 20 paid routes and compares each live 402 quote to what the estimator reserves. Under-reserving exits non-zero; over-reserving warns. Free to run (no payment attached). This drift is invisible to CI by construction — the gateway reprices without an MCP release — and had already shipped three times.

0 under-reserving, 0 over-reserving, 0 unreachable, 20 exact

169 tests, typecheck, build green.

Security Fixes

  • Fixed budget cap bypass where non-finite estimates allowed $500 calls despite a $1 limit

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track blockrunai/blockrun-mcp

Get notified when new releases ship.

Sign up free

About blockrunai/blockrun-mcp

Live data for AI agents — search, research, markets, crypto, X/Twitter. Pay-per-call via x402 micropayments.

All releases →

Beta — feedback welcome: [email protected]