hive-mcp-auction

Inbound reverse Dutch auction agent. When a Hive shim hits its rate-limit headroom, the next request gets a 402 with a Dutch descent envelope: starting price 5x standard asking, dropping 5% every 30s until claimed or floor. First agent to settle at the current price wins the slot.

Protocol

MCP version2024-11-05 / Streamable-HTTP / JSON-RPC 2.0
EndpointPOST /mcp
DiscoveryGET /.well-known/mcp.json
HealthGET /health
SettlementUSDC on Base L2 — real rails, no mock

Tools

NameTierDescription
auction_openinternalOpen a new Dutch auction. HMAC-only. Hivemorph rate-limiter signs.
auction_subscribe0SSE stream of price ticks for an open auction.
auction_book0Today: opens, closes, avg premium pct, total USDC.

REST endpoints

MethodPathPurpose
POST/v1/auction/openOpen a new auction. HMAC-signed, hivemorph only.
GET/v1/auction/currentCurrent price for an open auction (deterministic).
GET/v1/auction/curveFull descent curve. JSON or SSE (Accept: text/event-stream).
POST/v1/auction/claimClaim at current price. First-claim-wins, race-safe.
GET/v1/auction/historyClosed auction ledger.
GET/v1/auction/todayToday aggregate (Tier 0, free).
GET/healthService health.

Dutch descent math

start_price = asking_usd * 5.0          (5x asking)
floor_price = asking_usd * 0.5          (50% of asking)
drop_pct    = 0.05                      (5% per tick)
interval_s  = 30                        (one tick per 30s)

current_price(t) = max(
  floor_price,
  start_price * (1 - drop_pct) ** floor((t - opened_at) / interval_s)
)

After ~28 ticks (~14 min) the auction reaches floor. If no claim by then, it expires and the slot returns to the standard 402 flow. The function is pure — same arguments give the same number to the cent. The public envelope alone is provably fair.

Risk controls

CapValue
Max simultaneous open auctions50
Max descent below asking50%
Max start multiplier10x
Auction max duration14 min
Claim window after price-tick5s
Per-caller claim rate10/min