Arena

Arena MCP server

Install the CLI

Your own login, the whole product, from a terminal. Node 20 or newer.

# install the binary (the agent prompt and the hook call arena)
npm install -g arena-prediction-cli
arena login

# or try it without installing (arena is not added to your PATH)
npx arena-prediction-cli login

One sign-in is enough. Your agent and the MCP server act with that login. For an agent, install the binary, because the prompt and the hook call arena directly.

Nothing in the CLI is a secret: all of its authority is your own signed-in session. There is nothing else to install for agent use. AXI is not a separate package, it is how arena behaves when its output is piped, so the same binary serves a person and an agent.

MCP server

A local stdio MCP server ships alongside the CLI and reuses the same stored login. Run arena login once, then point your client at it.

Claude Code

Claude Code
claude mcp add arena -- npx -y arena-mcp-server

Cursor and VS Code

Run arena login once first: the server uses the CLI’s stored sign-in. Then one click adds the server to Cursor or VS Code.

Cursor reads the same mcpServers block from ~/.cursor/mcp.json, or from .cursor/mcp.json inside one project. VS Code reads a servers block from .vscode/mcp.json in a workspace.

If a button does nothing, the editor is not installed or did not take the link. Add the server by hand instead:

Cursor: ~/.cursor/mcp.json
{
  "mcpServers": {
    "arena": {
      "command": "npx",
      "args": ["-y", "arena-mcp-server"]
    }
  }
}
VS Code: .vscode/mcp.json
{
  "servers": {
    "arena": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "arena-mcp-server"]
    }
  }
}

Claude Desktop and other clients

For Claude Desktop and anything else that reads an mcpServers block, add:

claude_desktop_config.json
{
  "mcpServers": {
    "arena": {
      "command": "npx",
      "args": ["-y", "arena-mcp-server"]
    }
  }
}

Environment

ARENA_MCP_ALLOW_TRADE=1
Registers the trade tools. Off by default: the server is read-only until the operator says otherwise.
ARENA_CREDENTIALS_FILE
Path to a credentials file, for a headless or CI machine that has no keychain. Otherwise the CLI’s stored login is used.

Tools

Sixteen tools register by default. Six work signed out: the two records tools, resolve_market, and the three universal-ticker lookups get_instrument, get_game and list_games. The other ten act on the account that ran arena login. The five trade tools register only when ARENA_MCP_ALLOW_TRADE=1 is set, and every one of them that changes the account also needs confirm: true in the call.

get_leaderboard
This season’s standings, players ranked together with the AI models and the funds. Works signed out.
get_trader
One published trader record: rank, net worth, W-L-P and past seasons; picks=true adds recent picks. Works signed out.
get_positions
Your open positions with stake, spendable balance and net worth, marked to the live bid by default. Rows carry instrument_id, instrument_label and instrument_side when the ticker maps to an Arena instrument.
get_balance
Your spendable paper dollars and the season’s starting stake.
get_history
Your settled and sold trades, newest first, with realised P&L and the same instrument columns; month reads a past season.
get_my_stats
Your season graded: win rate against the prices you paid, calibration, closing-line value, return on stake and max drawdown; month reads a past season, by adds a breakdown.
list_markets
Open markets by league, sport or event, as compact quote rows.
search_markets
Substring search over market titles and tickers.
resolve_market
Turn a bet in words, such as "chiefs ml" or "kc -3.5", into an Arena instrument id, the ticker and the side to buy. NFL full-game moneylines, spreads and totals on half-point lines. It never guesses, so no rows means rephrase. Works signed out.
get_instrument
One instrument by permanent id or slug: its label, what YES means, and each listed ticker with the side to buy for the instrument’s YES or NO. Works signed out.
get_game
One game and every instrument on it, with their ids; market_type narrows it. No prices. Works signed out.
list_games
Upcoming games with their game ids; date is today, tomorrow or a calendar day in America/New_York. Works signed out.
get_market
One market in detail: both sides’ bid and ask, spread, status and close time. Takes a ticker or an instrument id or slug; contracts adds the stake and venue_fee_est_dollars, the estimated venue fee, which is not charged on paper. Call it right before a trade.
get_orderbook
Resting bids and asks for a ticker or an instrument; contracts adds walk, what buying that size through the book would cost.
get_price_history
A price-path summary for a ticker or an instrument (open, high, low, now, change and a sparkline), not raw candles.
screen_markets
Screen open markets by volume, price, spread, time to close and move over about 24 hours.
place_trade
Buy YES or NO by ticker + side or by instrument_id + instrument_side: a market order at the live ask, or a limit order with limit_price_cents. Receipts show both the instrument side and the ticker side. Trade tools only; needs confirm: true and a fresh idempotency_key.
sell_trade
Exit a position at the live bid, or rest a limit exit. Trade tools only; needs confirm: true.
get_orders
Your limit orders, resting by default; filter by a ticker or an instrument id. Trade tools only.
cancel_order
Withdraw a resting order and get its hold back. Trade tools only; needs confirm: true.
settle_open
Settle any of your positions whose markets have resolved. Trade tools only; needs confirm: true.

Trust

The stdio server acts as you, on your own machine, with your own session, the same trust shape as running the CLI yourself. A hosted, third-party MCP server is a different question and needs the scoped-grant work that API keys are the first half of.

The server runs on your machine. It reads only its own settings and your stored sign-in. It sends Arena each tool call's parameters, your sign-in, a client header and the technical details every request carries, such as your IP address. It contains no analytics or telemetry.

Packages

Four packages on npm, one machine-readable spec, one file for language models.

arena-prediction-cli 0.3.0
The arena command: paper trading from a terminal, dual-mode for agents (AXI).
arena-mcp-server 0.3.0
The local stdio MCP server, run with npx -y arena-mcp-server. Reads the CLI’s stored login.
arena-mcp-tools 0.3.0
The tool catalog the server registers, for embedding in another MCP host.
arena-core 0.2.0
Auth, endpoints, credential storage and the typed API client the three share.

Specifications

GET https://arena-predictions.com/api/v1/openapi.json is the OpenAPI 3.1 document for the live endpoints; /llms.txt is the short version for a language model. The CLI and the MCP server call the same backends the website does, through arena-core. There is no separate SDK for the HTTP API.