Liquidiction
# Liquidiction MCP Server
Read-only HIP-4 prediction-market tools for MCP-compatible agents. The server connects directly to Hyperliquid's public API. No API keys, wallet connection or signing permissions are required.
## Install
Requires Node.js 20 or newer and npm.
```bash
git clone https://github.com/Liquidiction/liquidiction-mcp.git
cd liquidiction-mcp
npm ci
npm start
```
This is a stdio MCP server, so `npm start` waits for an MCP client rather than opening a website. Mainnet is the default. Set `HL_API_URL=https://api.hyperliquid-testnet.xyz` only when you want testnet data.
Existing installations: run `git pull --ff-only`, `npm ci`, then restart your MCP client.
## Connect a client
After installing dependencies, configure your client with absolute paths:
```json
{
"mcpServers": {
"liquidiction": {
"command": "node",
"args": [
"/absolute/path/liquidiction-mcp/node_modules/tsx/dist/cli.mjs",
"/absolute/path/liquidiction-mcp/mcp-server.ts"
],
"env": {
"HL_API_URL": "https://api.hyperliquid.xyz"
}
}
}
}
```
This uses the installed runtime and works even when the client's working directory is elsewhere. On Windows, use paths such as `C:/Users/you/liquidiction-mcp/mcp-server.ts` and the corresponding `node_modules/tsx/dist/cli.mjs` path. Restart the client after changing its configuration.
For Claude Code:
```bash
claude mcp add liquidiction -- node /absolute/path/liquidiction-mcp/node_modules/tsx/dist/cli.mjs /absolute/path/liquidiction-mcp/mcp-server.ts
```
For clients that launch from the repository directory, `npx tsx mcp-server.ts` also works.
## Tools
| Tool | Input | Result |
|---|---|---|
| `list_markets` | None | Active outcomes, selections, venues and prices |
| `get_market_detail` | `outcome_id` | Metadata, venue, selections and side prices |
| `get_market_summary` | None | Market overview and available settlement metadata |
| `get_orderbook` | `outcome_id`, optional `side` | Top bids, asks and spread |
| `get_prices` | None | Current outcome mid-prices |
| `get_candles` | `coin`, optional `interval`, optional `hours` | OHLCV history |
| `get_recent_trades` | `coin` | Recent public trades for the selected outcome side |
| `get_user_fills` | `address`, optional `limit` | Recent public HIP-4 fills for a wallet |
| `get_open_orders` | `address` | Public resting HIP-4 orders |
| `get_user_positions` | `address` | Positions, venues, selections, held shares and mark values |
Outcome API requests use `#N`. Explicit coin inputs also accept `+N`, legacy `@N` and bare numeric aliases and normalize them to `#N`. Wallet balances returned as `+N` retain their raw coin and also expose the canonical `#N` identifier. Ordinary spot `@N` rows are not classified as outcome holdings or fills.
## Cross-deployer positions
Ask your agent:
> Show the HIP-4 positions for this wallet, including venue, team, total shares and held shares. Compare positions on the same fixture without merging their contracts.
`get_user_positions` returns JSON text with `address`, `fetchedAt`, `source`, a snapshot note and a `positions` array. Each row includes:
- `coin`, `rawCoin`, `outcomeId`, `side`, `venue` and deployer address.
- Market and selection labels resolved from the contract metadata when available.
- `shares`, the original `total` string, `heldShares` and `unheldShares`.
- `markPrice` and `markedValue`, or `null` when a valid mark is unavailable.
- Available contract timing, result source and counted-play fields, plus raw descriptions.
Do not assume side 0 means the same team across venues. Outcome and trade.xyz can list a fixture in opposite participant order. The tools preserve distinct contracts and their rules; they do not certify equivalence or automatically merge positions.
`unheldShares` is total minus held shares, not a guarantee that an order can execute. Reads are not an atomic snapshot. Marks are estimates, not executable sale quotes. Missing active-market metadata remains `null`; this server does not supply historical metadata for every settled contract.
Supply a known wallet address. This server does not search an index for wallets holding a particular combination of markets.
## Development and verification
```bash
npm ci
npm run typecheck
npm test
```
The regression suite runs offline and covers current balance formats, cross-deployer side reversal, held shares, fractional balances, missing marks, input validation and API errors.
An optional read-only smoke check launches a real MCP stdio client and calls all 10 tools against the configured Hyperliquid network:
```bash
npm run test:live -- 0xff16003f5bc3560daf4b9df62c191831af47387f 1866
```
The example is a live wallet, so holdings can change. If it no longer has positions, choose another wallet and active outcome ID. The check compares MCP holdings against a separate balance read and can fail if the wallet trades between reads. Normal Hyperliquid rate limits apply.
## Links
- [Liquidiction](https://liquidiction.xyz)
- [MCP documentation](https://liquidiction.gitbook.io/liquidiction-docs/developers/mcp-server)
- [X](https://x.com/LiquidictionHL)
MIT licensed. This server never submits trades.
TDQS
Scored across 10 tools
Each tool targets a distinct data type (candles, market details, orders, etc.) with clear descriptions, though some overlap exists between get_market_detail, get_market_summary, and get_prices. Overall, an agent can distinguish them.
All tools follow a consistent verb_noun pattern with 'get_' except one using 'list_', which still aligns with a verb+noun convention. No mixing of styles or ambiguous verbs.
10 tools is well-scoped for a read-only prediction market data server. Each tool serves a specific data retrieval need without unnecessary duplication or gaps.
The set covers all essential read operations for prediction markets: listing, details, prices, orderbook, user data. Minor gaps exist, such as aggregated market statistics or historical trade summaries, but core workflows are supported.