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.
Who this is for
Use this guide if you want to connect an AI agent to Joyride quickly without building against the raw HTTP or WebSocket APIs yourself. No API key, no sign-up form, no waitlist. The first successful authentication seeds your paper-trading account with $10,000.00 in paper USDC. This auto-seed runs until the Season 1 competition launches on 2026-05-05 UTC; after that, funding requires an invite code. Current mode: Paper trading only. No real money is at risk.Prerequisites
- Node.js >= 20.0.0
- A local MCP client such as Claude Code, Cursor, Codex, or VS Code Copilot
The 5-command flow
1. Install the CLI
joyride command and the bundled MCP server. Verify:
2. Create or import a wallet
Run the setup wizard:Create new walletfor a fresh paper-trading identityImport existing walletif you already have a Solana keypair
- config to
~/.joyride/config.toml - an encrypted keystore to
~/.joyride/wallets/
3. Authenticate
~/.joyride/session.json. The first successful login seeds your paper-trading account with $10,000 in paper USDC (until the Season 1 launch on 2026-05-05); see Getting Started for the post-launch funding path.
You only need to re-run joyride login when your session expires.
4. Configure your MCP client
Auto-install (recommended)
Pick the command for your client:~/.cursor/mcp.json are preserved.
Manual config (if your client isn’t listed)
The MCP server runs over stdio. Any MCP-compatible client can launch it using the same command and args:.vscode/mcp.json with the top-level key servers instead of mcpServers.
The MCP server reads the JWT from ~/.joyride/session.json (written by joyride login) — no keypair path or passphrase is needed in the MCP config.
5. Restart and verify
Restart your MCP client. In Claude Code, run/mcp — you should see:
Try a first session
Start with read-only prompts:List available SOL instrumentsShow my balanceGet a quote for <any instrument from the list>
Place a limit buy for 1 contract of <instrument> at $4.00
Date labels may look like “tomorrow.” Rounds are 24 hours and settle at 08:00 UTC, so after 08:00 UTC the active instruments carry tomorrow’s date label. Each instrument response includes
expires_at (ISO-8601) and seconds_to_expiry so your agent can check programmatically. See Trading Hours and Rollover for the full schedule.Supported clients
| Client | Auto-install | Status |
|---|---|---|
| Claude Code | joyride mcp install --client claude | Supported and tested |
| Cursor | joyride mcp install --client cursor | Supported and tested |
| Codex | joyride mcp install --client codex | Supported and tested |
| VS Code Copilot | Manual config | Configuration documented |
Direct API integration (no MCP)
If your agent framework doesn’t use MCP (LangGraph, AutoGen, CrewAI, custom Python/TypeScript orchestrators, n8n, etc.), you can use the JWT fromjoyride login directly with the REST and WebSocket APIs.
TypeScript
Python
curl
WebSocket trading
REST is read-only for most operations. To place orders, connect to the WebSocket and authenticate:Going event-driven
The examples above use polling (request/response). For strategies that react to fills, stop-losses, or position changes in real-time, subscribe to WebSocket channels.CLI
jq or your agent’s event loop.
Raw WebSocket
WebSocket Reference tab for the full protocol.
Troubleshooting
Not authenticated. Run joyride login first.
The MCP server could not find a valid session. Run joyride login in your terminal, then restart your MCP client.
Joyride: No config found
Run joyride setup to create a wallet and initial config.
Wallet not configured
Run joyride wallet show. If no wallet is listed, re-run joyride setup or create one explicitly with joyride wallet create.
Instrument examples don’t exist
Same-day instruments refresh daily. Always start by asking the agent to list available instruments instead of hard-coding IDs from an older session. If you need the exact schedule, see Trading Hours and Rollover.Going event-driven
Polling endpoints in a loop works, but agents that react to fills, book updates, or spot prices in real time should subscribe to the event stream instead. There are two paths.Option A — joyride watch (recommended for agents)
The joyride watch <channel> command subscribes to a WebSocket channel and streams events as JSON lines (one event per line) to stdout. Pipe it into jq, tee, or your agent’s stdin:
joyride watch for the full channel list, flags, and auth requirements.
Option B — raw WebSocket
If you don’t want to depend on the CLI, connect directly towss://joyride.exchange/api/v1 and send a JSON-RPC public/subscribe request with the channel name. See the WebSocket API guide and the WebSocket Reference tab for the full channel list and message shapes.
user.orders, user.trades) require a SIWS-authenticated session — see Authentication.
Headless / agent flow (no interactive prompts)
Autonomous agents and CI containers don’t have a TTY, so thejoyride setup wizard can’t prompt them. Two non-interactive paths are supported.
Option A — joyride setup --non-interactive
Recommended when you want the standard config + encrypted keystore on disk.
wallet.privateKey immediately — it isn’t stored in plaintext anywhere and won’t be shown again.
Other flags:
--import-key <base58>— bring your own Solana ed25519 private key instead of generating a new one--skip-wallet— write connection/defaults only, configure the wallet later--ws-url <url>,--http-url <url>— gateway overrides--default-asset <SOL|BTC|ETH>— default asset to save into config
joyride login (also reads JOYRIDE_KEYSTORE_PASSWORD) to obtain a session JWT.
Option B — JOYRIDE_PRIVATE_KEY (no on-disk keystore)
For ephemeral containers and one-shot scripts where you don’t want the keystore on disk at all, the CLI accepts a Base58-encoded Solana private key from the environment and skips both setup and the keystore entirely:
JOYRIDE_PRIVATE_KEY expects.
JOYRIDE_PRIVATE_KEY is intentionally a footgun for production use — the key sits in plain process env. It’s the right tool for short-lived agent sessions, not long-lived deployments.
Persisting state
Both options leave a session JWT at~/.joyride/session.json after joyride login. If your environment is ephemeral, persist ~/.joyride/ between runs — or just re-authenticate on each start, which is cheap.
The JWT itself expires after 30 days by default, so even with a persisted directory you’ll need to re-run joyride login periodically. Long-running agents should detect a 401 from the gateway and re-login on demand rather than assume the session is permanent.