Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.joyride.exchange/llms.txt

Use this file to discover all available pages before exploring further.

What it exposes

The MCP server gives AI agents access to the Joyride options exchange through 23 tools, 3 resources, and 3 prompts — covering market data, trading, account management, wallet creation, and position analysis. An AI agent can look up options chains, get quotes, place and cancel orders, check balances, and analyze positions — all through natural language. You talk to the agent; the agent calls the tools. Current mode: Paper trading only. No real money at risk. The first successful Joyride authentication seeds your paper-trading account with $10,000.00 in paper USDC. This auto-seed is active until the Season 1 competition launches on 2026-05-05 UTC; after launch, funding requires an invite code.

Quick start

# 1. Install the Joyride CLI (includes the MCP server)
npm install -g joyride-cli

# 2. Verify it installed
joyride --help

# 3. Run the setup wizard (creates a wallet)
joyride setup

# 4. Log in (authenticates with the exchange, stores a JWT)
joyride login

# 5. Configure your AI tool (pick one):
joyride mcp install --client claude    # Claude Code
joyride mcp install --client cursor    # Cursor
joyride mcp install --client codex     # Codex

# 6. Restart your AI tool and start trading
#    "List available SOL instruments"
#    "Get a quote for SOL_USDC-3MAR26-75-C"
#    "Place a limit sell for 1 contract at $5"
For the full guided flow, start with Agent Quickstart.

Prerequisites

  • Node.js >= 20.0.0
  • The Joyride CLInpm install -g joyride-cli (this installs both the CLI and MCP server)
  • A Joyride wallet — created via joyride wallet create or joyride setup
  • An active session — run joyride login (stores a JWT at ~/.joyride/session.json)
The MCP server reads the stored JWT from ~/.joyride/session.json on startup. No keypair path or passphrase is needed in the MCP config. If the session is expired or missing, the server exits with: “Not authenticated. Run joyride login first.”

Setup by client

Claude Code

The fastest way:
joyride mcp install --client claude
This runs claude mcp add under the hood and configures everything automatically. To verify, run /mcp inside Claude Code. You should see:
joyride · connected
Manual setup (if you prefer editing config directly): Create .mcp.json in your project root:
{
  "mcpServers": {
    "joyride": {
      "command": "joyride",
      "args": ["mcp", "serve"],
      "env": {
        "JOYRIDE_WS_URL": "wss://joyride.exchange/api/v1",
        "JOYRIDE_HTTP_URL": "https://joyride.exchange/api"
      }
    }
  }
}
Then restart Claude Code.

Cursor

The fastest way:
joyride mcp install --client cursor
This writes the correct entry to ~/.cursor/mcp.json automatically, preserving any existing MCP servers you have configured. Manual setup: Add to ~/.cursor/mcp.json (create the file if it doesn’t exist):
{
  "mcpServers": {
    "joyride": {
      "command": "joyride",
      "args": ["mcp", "serve"],
      "env": {
        "JOYRIDE_WS_URL": "wss://joyride.exchange/api/v1",
        "JOYRIDE_HTTP_URL": "https://joyride.exchange/api"
      }
    }
  }
}

Codex

joyride mcp install --client codex
This runs codex mcp add under the hood.

VS Code Copilot

No auto-install yet. Add to .vscode/mcp.json in your project:
{
  "servers": {
    "joyride": {
      "command": "joyride",
      "args": ["mcp", "serve"],
      "env": {
        "JOYRIDE_WS_URL": "wss://joyride.exchange/api/v1",
        "JOYRIDE_HTTP_URL": "https://joyride.exchange/api"
      }
    }
  }
}

Generic / custom agents

Launch the MCP server directly over stdio:
JOYRIDE_WS_URL=wss://joyride.exchange/api/v1 \
JOYRIDE_HTTP_URL=https://joyride.exchange/api \
joyride mcp serve
It speaks JSON-RPC over stdin/stdout per the MCP specification. Authentication is handled via the stored JWT at ~/.joyride/session.json.

Reconfiguring and uninstalling

Update an existing configuration

If you need to reconfigure (e.g., after changing connection URLs):
joyride mcp install --client claude --force
The --force flag removes the existing config and writes a fresh one.

Remove MCP from a client

joyride mcp uninstall --client claude    # Claude Code
joyride mcp uninstall --client cursor    # Cursor
joyride mcp uninstall --client codex     # Codex
Uninstall is safe to run even if joyride is not currently configured — it’s a no-op. For Cursor, uninstall removes only the joyride entry from ~/.cursor/mcp.json and preserves all other MCP servers.

Uninstall the CLI entirely

npm uninstall -g joyride-cli
This removes both the CLI and the bundled MCP server.

Client support

ClientAuto-installStatus
Claude Codejoyride mcp install --client claudeSupported and tested
Cursorjoyride mcp install --client cursorSupported and tested
Codexjoyride mcp install --client codexSupported and tested
VS Code CopilotManual config (see above)Configuration documented

Hosted HTTP mode (preview)

Joyride also exposes an HTTP MCP endpoint for remote agent access, but this path should be treated as preview for now:
  • Base URL: https://joyride.exchange/api/v1/mcp
  • Transport: Streamable HTTP
  • Auth: Bearer token / API key mapping on the server side
Use hosted MCP only if Joyride has explicitly issued you a hosted API key and setup instructions. For early alpha testers, the supported path is the local stdio flow above.

Auto-approve permissions

By default, Claude Code asks permission before calling each MCP tool. To skip prompts for Joyride tools, add them to .claude/settings.json:
{
  "permissions": {
    "allow": [
      "mcp__joyride__list_instruments",
      "mcp__joyride__get_quote",
      "mcp__joyride__get_orderbook",
      "mcp__joyride__get_options_chain",
      "mcp__joyride__get_ticker",
      "mcp__joyride__get_all_tickers",
      "mcp__joyride__get_price_history",
      "mcp__joyride__get_market_config",
      "mcp__joyride__get_index_price",
      "mcp__joyride__get_greeks",
      "mcp__joyride__place_order",
      "mcp__joyride__cancel_order",
      "mcp__joyride__cancel_all_orders",
      "mcp__joyride__get_open_orders",
      "mcp__joyride__get_order_status",
      "mcp__joyride__get_balance",
      "mcp__joyride__get_account",
      "mcp__joyride__get_positions",
      "mcp__joyride__get_positions_with_metrics",
      "mcp__joyride__get_trade_history",
      "mcp__joyride__get_order_history",
      "mcp__joyride__create_wallet",
      "mcp__joyride__get_profiles"
    ]
  }
}
Tip for live trading: Remove place_order, cancel_order, and cancel_all_orders from the allow list so those still require manual confirmation.

Tool reference

All tools accept and return human-friendly units:
  • Prices in USD (e.g., 5.00) — converted to/from USDC micros internally
  • Sizes in contracts (e.g., 1, 0.5) — converted to/from millicontracts internally
  • Sides as "buy" / "sell" — mapped to "bid" / "ask" internally

Market data (8 tools)

list_instruments

List available options contracts with optional filters.
ParameterTypeRequiredDescription
assetstringNoFilter by asset ("SOL", "BTC", "ETH")
expirystringNoFilter by expiry date ("3MAR26")
type"call" | "put"NoFilter by option type
Example prompt: “List all SOL call options” Transport: WebSocket

get_quote

Get real-time bid/ask/mid quote for a specific instrument.
ParameterTypeRequiredDescription
instrument_idstringYese.g., SOL_USDC-3MAR26-75-C
Returns: { bid, ask, mid, spread } — all in USD. Returns null for empty sides. Transport: WebSocket

get_orderbook

Get full order book depth for a specific instrument.
ParameterTypeRequiredDescription
instrument_idstringYesInstrument ID
depthnumberNoPrice levels per side (default: 10)
Returns: { bids: [{price, size, count}], asks: [{price, size, count}] } Transport: HTTP

get_options_chain

Get all options for an asset organized by strike (calls and puts side by side).
ParameterTypeRequiredDescription
assetstringYes"SOL", "BTC", "ETH"
expirystringNoFilter by expiry date
Returns: { asset, expiry, strikes: [{ strike, call?, put? }] } Transport: WebSocket + HTTP

get_ticker

Get ticker snapshot for a specific instrument.
ParameterTypeRequiredDescription
instrument_idstringYesInstrument ID
Returns: { bestBid, bestBidSize, bestAsk, bestAskSize, spread } Transport: HTTP

get_all_tickers

Get all tickers in one call. Returns: Array of { instrumentId, bestBid, bestAsk, midPrice, spotPrice } Transport: HTTP

get_price_history

Get historical price data for a specific instrument.
ParameterTypeRequiredDescription
instrument_idstringYesInstrument ID
startnumberNoStart timestamp (Unix seconds)
endnumberNoEnd timestamp (Unix seconds)
Returns: Array of { timestamp, bidPrice, askPrice, midPrice, spotPrice } Transport: HTTP

get_market_config

Get market configuration (round duration and epoch). Returns: { roundDurationHours, roundEpoch } Transport: HTTP

Trading (5 tools)

All trading tools require wallet authentication.

place_order

Place a limit or market order.
ParameterTypeRequiredDescription
instrument_idstringYesInstrument ID
side"buy" | "sell"YesOrder side
type"limit" | "market"NoDefault: "limit"
pricenumberFor limitLimit price in USD (e.g., 5.00)
sizenumberYesNumber of contracts (e.g., 1, 0.5)
Returns: { order: {orderId, status, ...}, trades: [{tradeId, price, size, ...}] } Example prompts:
  • “Sell 1 contract of SOL_USDC-3MAR26-75-C at $5”
  • “Buy 2 contracts of SOL_USDC-3MAR26-75-P at market”
Transport: WebSocket

cancel_order

Cancel a specific order.
ParameterTypeRequiredDescription
instrument_idstringYesInstrument ID
order_idnumberYesOrder ID to cancel
Transport: WebSocket

cancel_all_orders

Cancel all open orders, optionally for a specific instrument.
ParameterTypeRequiredDescription
instrument_idstringNoCancel only orders for this instrument
Returns: { count, orders: [...] } Transport: WebSocket

get_open_orders

List all active/open orders. Returns: Array of { orderId, instrumentId, side, orderType, price, size, remaining, status, timestamp } Transport: WebSocket

get_order_status

Check the status of a specific order. Searches open orders first, then falls back to order history.
ParameterTypeRequiredDescription
order_idnumberYesOrder ID to look up
Transport: WebSocket + HTTP (fallback)

Account (6 tools)

All account tools require wallet authentication.

get_balance

Get current account balance. Returns: { available, locked, total } — all in USD. Transport: WebSocket

get_account

Get full account summary (balance and positions). Returns: { available, locked, positions: [{instrumentId, quantity, avgPrice}] } Transport: HTTP

get_positions

Get all open positions. Returns: Array of { instrumentId, quantity, avgPrice } Transport: HTTP

get_positions_with_metrics

Get positions enriched with PnL metrics. Returns: Array of { instrumentId, quantity, avgPrice, midPrice, currentValue, pnl, pnlPercent, breakeven } Transport: HTTP

get_trade_history

Get recent trade fills/executions.
ParameterTypeRequiredDescription
limitnumberNoMaximum number of trades to return
Transport: HTTP

get_order_history

Get all orders including filled and cancelled.
ParameterTypeRequiredDescription
limitnumberNoMaximum number of orders to return
Transport: HTTP

Wallet & social (2 tools)

create_wallet

Create a new Solana wallet for trading. The wallet is encrypted and stored on the server. Returns the wallet address. Transport: HTTP

get_profiles

Get all user profiles (usernames and avatars). Transport: HTTP

Analysis (2 tools)

get_index_price

Get the underlying spot/index price for an asset.
ParameterTypeRequiredDescription
assetstringYes"SOL", "BTC", "ETH"
Returns: { asset, price, timestamp } Transport: HTTP

get_greeks

Get Greeks (delta, gamma, theta, vega, rho), implied volatility, and mark price for an instrument.
ParameterTypeRequiredDescription
instrument_idstringYesInstrument ID
Transport: HTTP (risk engine)

Resources

MCP resources provide read-only data snapshots that clients can request.
URIDescription
joyride://portfolioCurrent positions, PnL, and account summary
joyride://marketsAvailable instruments with current bid/ask/mid/spot
joyride://configConnection status, trading mode, server version
Resources return JSON. They’re useful for MCP clients that support resource browsing.

Prompts

MCP prompts are pre-built multi-step workflows that guide the AI agent through structured analysis.

analyze-position

Analyze a specific options position: Greeks, PnL scenarios, and risk assessment.
ArgumentTypeDescription
instrument_idstringInstrument ID to analyze

find-opportunity

Find the best 0DTE options opportunity for an asset.
ArgumentTypeDescription
assetstringAsset to analyze ("SOL", "BTC", "ETH")

build-strategy

Construct an options strategy based on market outlook (analysis only — each leg must be executed as a separate place_order call).
ArgumentTypeDescription
assetstringAsset to build strategy for
outlookstring"bullish", "bearish", "neutral", "volatile"

Instrument ID format

All instrument IDs follow this pattern:
{ASSET}_USDC-{DMMMYY}-{STRIKE}-{C|P}
ComponentDescriptionExamples
ASSETUnderlying assetSOL, BTC, ETH
DMMMYYExpiry date (1- or 2-digit day)3MAR26, 27FEB26
STRIKEStrike price (integer USD)75, 100, 200
C|POption typeC (call), P (put)
Use list_instruments to discover valid IDs. Instruments are 0DTE (same-day expiry) and refresh daily.

Configuration

The MCP server loads configuration in this order (highest priority first):
  1. Environment variables (set in your MCP client config or shell)
  2. Config file (~/.joyride/config.toml)
  3. Defaults

Environment variables

VariableDefaultDescription
JOYRIDE_WS_URLwss://joyride.exchange/api/v1WebSocket URL
JOYRIDE_HTTP_URLhttps://joyride.exchange/apiHTTP REST URL
Authentication is handled via the stored JWT at ~/.joyride/session.json (created by joyride login). No credential-related env vars are needed in the MCP config.

Config file

The MCP server shares ~/.joyride/config.toml with the CLI. Run joyride setup to create it interactively:
[auth]
wallet_address = "GmQozSzrtMjXt5F1Bed8Vrt55zCbiga8vDZr47RX9wC8"

[defaults]
asset = "SOL"
mode = "paper"

[connection]
ws_url = "wss://joyride.exchange/api/v1"
http_url = "https://joyride.exchange/api"

Example workflows

Discover and quote

You: What SOL options are available today?
Agent: [calls list_instruments] -> 72 instruments

You: Get a quote on the $75 call
Agent: [calls get_quote] -> bid: $3.50, ask: $5.00, mid: $4.25

You: Show me the full options chain
Agent: [calls get_options_chain] -> organized by strike with calls/puts side by side

Place and manage orders

You: Sell 1 contract of the $75 call at $5
Agent: [calls place_order] -> Order #1994754 placed, status: open

You: Show my open orders
Agent: [calls get_open_orders] -> 1 open order

You: Cancel that order
Agent: [calls cancel_order] -> Order cancelled

You: Check my balance
Agent: [calls get_balance] -> Available: $10,000.00

Guided analysis (using prompts)

You: Find the best SOL opportunity right now
Agent: [uses find-opportunity prompt] -> ranks opportunities by risk/reward

You: Build a bullish strategy for SOL
Agent: [uses build-strategy prompt] -> suggests strategies with specific strikes and sizing

Troubleshooting

MCP server doesn’t appear in /mcp

Run joyride mcp install --client claude to configure automatically. If you set it up manually, the config must be in .mcp.json at the project root. Restart Claude Code after creating or editing it.

Server shows failed

Check the server logs:
joyride mcp serve 2>&1 | head -20
Common causes:
  • No valid session — run joyride login first
  • Node.js version too old — requires >= 20.0.0

Not authenticated. Run joyride login first.

The MCP server could not find a valid JWT at ~/.joyride/session.json. Run joyride login in your terminal to authenticate, then restart your MCP client.

NOT_AUTHENTICATED or session expired errors

Your JWT has expired. Run joyride login again to get a fresh session, then restart your MCP client.

Gateway connection warning

If you see Could not connect to gateway, the WS gateway is unreachable. The server starts in degraded mode — tools requiring WebSocket will return errors, but HTTP tools still work. Check that JOYRIDE_WS_URL is wss://joyride.exchange/api/v1.

Permission prompts on every tool call

See auto-approve permissions to pre-approve all Joyride tools.

Quotes show all nulls

The order book is empty. Use list_instruments to find instruments with activity.

Debug mode

JOYRIDE_WS_URL=wss://joyride.exchange/api/v1 \
JOYRIDE_HTTP_URL=https://joyride.exchange/api \
joyride mcp serve 2>mcp-debug.log
Check mcp-debug.log for auth status, connection warnings, and errors.