PaperQuant is an agent-native crypto trading research platform built for The WebMCP Challenge. It combines real Binance public market data, interactive technical charts, simulated Spot/perpetual trading, deterministic strategy research, and a 22-tool WebMCP laboratory that ChatGPT or a compatible browser agent can use without brittle DOM clicking.
Created by Sourav Bera — Head of Tech at QuarqLabs.
Live production site: paperquant-lab.souravberaakagralius.chatgpt.site
PaperQuant is educational research software. Every balance and fill is simulated. It has no private exchange integration, exchange keys, withdrawals, deposits, or real-order route.
The public root is a concise product tour; Open laboratory enters the live terminal at /lab. Ask the browser agent:
Open PaperQuant Lab and give me the read-only observer URL. Set BTCUSDT perpetual to 1h, enable Hull Suite, VWAP, RSI, and ADX, inspect the completed candles, order book, and trade tape, then run the BTC filtered EMA strategy from 2023-01-01 through 2025-12-31 with $100,000. Poll it, explain technical status, data quality, and profitability separately, then overlay the signals. Do not change my paper account.
The agent can enter from the landing page, expose a temporary observer URL, configure the real terminal, queue/poll research, and explain provenance and profitability separately. The owner and observer see the workflow console update live. A separate explicit paper-order request is required before any simulated financial mutation.
- Search all active Binance USDT Spot markets.
- Real-time quotes, 1m through 1M candles, including native 2h/4h and deterministic 10m/3h aggregation.
- Expandable Lightweight Charts candlesticks with multiple atomic indicators: EMA/SMA, Hull Suite ribbon, VWAP, Bollinger Bands, Supertrend, Ichimoku, RSI, MACD, Stochastic RSI, ATR, and ADX/DMI.
- Binance public depth book, spread/imbalance, aggregate trade tape, and aggressor volume.
- Versioned paper-account migration, Spot holdings, signed USD-M perpetual long/short positions, reduce-only orders, funding ledger, and maximum 2× simulated leverage.
- Market/limit/stop orders with idempotency protection; paper capital is separate from research capital.
- Browser-isolated Python signal runner for local chart experiments.
- Isolated
agent-testingresearch worker for official Binance archive downloads, funding/OI/taker-side/multi-asset joins, checksum verification, deterministic backtests, UTC annual/OOS reports, and immutable compressed R2 artifacts. - A D1-backed 24-hour live session, sanitized activity ledger, collapsible owner console, and high-entropy read-only observer view that works across devices.
- Checksum-keyed reuse of an existing immutable R2 result, so the canonical judge run can return immediately after its first successful warm-up without changing its scientific hash.
- A 20-hypothesis catalog. Strategies 15, 17, and 20 are explicitly
BLOCKED_DATA; they are never omitted or assigned invented results.
The top-level page feature-detects document.modelContext, registers each imperative tool with an AbortController, and leaves the human UI unchanged when WebMCP is unavailable.
| Area | Tools |
|---|---|
| Discovery/session | get_app_capabilities, get_live_lab_session, search_markets, set_market_context, set_chart_indicators |
| Inspection | inspect_chart, inspect_order_book, inspect_trade_tape |
| Paper account | get_paper_account, get_paper_history, place_paper_order, cancel_paper_order, add_paper_funds, log_market_prediction, reset_paper_session |
| Research | list_strategies, save_strategy_code, run_strategy_backtest, run_regression_suite, get_research_run, show_run_on_chart, cancel_research_run |
Read tools carry readOnlyHint; public exchange and strategy-derived output carries untrustedContentHint; retryable writes require an idempotency key. place_paper_order, add_paper_funds, and log_market_prediction also require explicitUserIntent: true. Reset requires the exact phrase RESET PAPER SESSION.
See docs/WEBMCP.md for schemas, examples, and adversarial evaluation prompts.
ChatGPT / compatible Chrome agent
│ WebMCP
▼
ChatGPT Sites + Vinext React UI
├── shared PaperQuant controller ── human UI + tool handlers
├── Binance public REST/WebSocket ─ live chart/book/tape
├── D1 ─ sessions, strategies, run metadata, idempotency
└── R2 ─ immutable complete research artifacts
│ authenticated task-run API
▼
isolated GCP `agent-testing` Python worker
├── official Binance public archives + CHECKSUM files
├── deterministic directional + multi-asset portfolio engines
└── compact result + authenticated gzip artifact
Sites streams the gzip artifact into its own R2 binding
Detailed design: docs/ARCHITECTURE.md.
Requirements: Node.js 22.13+, npm, Python 3.11+.
npm ci
npm run devOpen http://localhost:3000 for the landing page or http://localhost:3000/lab for the terminal.
Install and test the research worker:
cd research-worker
python -m pip install -e ".[dev]"
python -m pytest -qComplete release gate:
npm run check
npm run auditDo not expose OPENAI_API_KEY or any deployment secret to the client. PaperQuant itself does not require an OpenAI key.
The UI is a ChatGPT Sites project configured by .openai/hosting.json with DB (D1) and ARTIFACTS (R2). The isolated GCP worker is deployed from research-worker. Configure RESEARCH_WORKER_API_KEY as a Sites secret; RESEARCH_WORKER_URL and RESEARCH_WORKER_TASK are non-secret routing values. The worker never receives Sites R2 credentials.
Full instructions: docs/DEPLOYMENT.md.
PASS means the engine and strategy rules executed correctly and reproducibly. It does not mean the strategy was profitable. PARTIAL_DATA discloses missing archive intervals or cost/input assumptions. BLOCKED_DATA means a required real dataset is unavailable. Profitability is always a separate metric.
Methodology and exact assumptions: docs/RESEARCH_METHODOLOGY.md. Known constraints: docs/LIMITATIONS.md.
MIT © 2026 Sourav Bera.
