Docs / Start

Quickstart

Connect a client, authenticate, and take one idea through the full gauntlet.

1. Get a key#

Keys are issued per principal and stored as SHA-256 digests — the server cannot show you a key again after it is created. Start on the free tier at quant.avasis.ai/start: 200 trials a month, a 10-asset universe and one holdout evaluation.

2. Connect a client#

The endpoint is https://quant-mcp.avasis.ai/mcp, streamable HTTP, TLS. Authentication is a bearer token.

Claude Code#

claude mcp add --transport http quant-research \
  https://quant-mcp.avasis.ai/mcp \
  --header "Authorization: Bearer $QUANT_KEY"

Claude Desktop / any mcpServers config#

{
  "mcpServers": {
    "quant-research": {
      "type": "http",
      "url": "https://quant-mcp.avasis.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}

Cursor — .cursor/mcp.json#

{
  "mcpServers": {
    "quant-research": {
      "url": "https://quant-mcp.avasis.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}

Raw HTTP#

curl -sS https://quant-mcp.avasis.ai/mcp \
  -H "Authorization: Bearer $QUANT_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Transport is stateless HTTP, so a redeploy will not kill your connection. The corollary is that a connected client cannot be told about new tools — reconnect to refresh the tool list.

3. Orient#

server_status()

Call this first in any new session. It reports what the server holds, what changed recently, and which research lines are already closed. It is cheaper than rediscovering that by trial and error.

4. Check whether the idea can survive its own costs#

cost_model_refresh()
cost_breakeven(trades_per_day=20)

Do this before ingesting data. At the Coinbase entry tier — 60 bps taker per side, non-promotional, so a 120 bps round trip — twenty trades a day is an 8,760% annual cost drag (120 × 20 × 365 / 100). Most intraday ideas die here, and they die in one tool call rather than a week.

5. Ingest, then check what you got#

data_ingest_universe(universe="coinbase-liquid-22", timeframe="1h")
job_status(job_id=...)
data_quality_report(...)

Heavy work is asynchronous. A submit returns a job_id; poll job_status.

6. Register a split — once#

split_register(train=..., test=..., holdout=...)

Ranges are immutable. The holdout is unreadable until you freeze a strategy. A split also freezes the data-gap policy in force when it was registered, so a later policy change cannot retroactively alter what your backtest saw.

7. Register a strategy and test it across a universe#

strategy_register(family="my-idea", spec={...})
feature_validate(...)
backtest_cross_section(universe="coinbase-liquid-22", ...)

Prefer backtest_cross_section over backtest_submit. One specification across many assets counts as one trial — the spec is the hypothesis and the assets are the sample. Testing the same idea on ten assets one at a time costs you ten trials and tells you less.

8. Find out whether the result means anything#

stats_deflated_sharpe(...)      # against the ledger's N, not yours
stats_pbo(...)                  # did selection help, or hurt?
stats_bootstrap_ci(...)         # does the interval straddle zero?
stats_min_backtest_length(...)  # do you even have enough history?

9. Gate, freeze, and spend the holdout#

gate_check(...)
strategy_freeze(...)
holdout_evaluate(...)

One holdout attempt per strategy, ever. gate_check will tell you whether you are ready before you spend it.

Next#

Read this page as Markdown: /docs/quickstart.md