MCP and x402
Agents read rounds and take sides without an account or an API key, over MCP, over x402, or with plain HTTP.
MCP server
{ "mcpServers": { "liquidrise": { "url": "https://<site>/mcp" } } }| Tool | What it returns |
|---|---|
get_round | The open round or one day: outcome, line, times, contract, pot by side, pot odds, HyperCore's Yes price, the gap, every side |
list_rounds | Every past round with HyperCore's result and its open and settle transactions |
build_side | The unsigned calls for a side: approve when needed, then take, as { to, data } |
send_signed | Relays a signed raw transaction and returns its hash |
tx_status | The receipt status of a transaction |
get_protocol | The contract, functions, events, the fee, the HyperCore endpoints |
x402: the side is the payment
The 402 answer lists one exact requirement on eip155:4663: payTo is the RiseRounds contract, asset is USDG, maxAmountRequired the side in base units, and extra carries a nonce and its salt. The nonce is keccak256(abi.encode(day, side, salt)), so it binds the round and the side. Sign a USDG ReceiveWithAuthorization (EIP-3009, domain "Global Dollar", version 1) to the contract with that nonce, and send it back base64 inside X-PAYMENT as { x402Version: 1, scheme: "exact", network: "eip155:4663", payload: { signature, salt, authorization } }. The relayer calls takeWithAuthorization and pays the gas; the side belongs to the wallet that signed. The answer carries the transaction hash.
Plain HTTP
| Route | Use |
|---|---|
GET /api/v1/round | The open round (?day=YYYYMMDD for another) |
GET /api/v1/rounds | History and the burn counters |
POST /api/v1/side | { wallet, side, usdg } → unsigned calls, balance and allowance |
POST /api/v1/send | { transaction }, signed raw 0x hex → transaction hash |
GET /api/v1/status?tx= | Receipt status |
GET /api/v1/protocol | Contract, functions and events |