Open the lab

API & MCP

Everything the site shows is available as JSON. Free tier: 90 requests a minute per IP, 30 compiles a day. All results are simulated.

MethodPathWhat
POST/api/v1/compile{text, mint} → DSL + plain-language rules + assumptions, or a refusal. No side effects.
POST/api/v1/validate{dsl} → validation errors or the normalized DSL, rules and warnings.
POST/api/v1/backtest{dsl, days?, to?, sol_usd?} → result (200) or fetching progress (202, poll again).
GET/api/v1/backtest/<hash>A stored backtest result by result hash.
GET/api/v1/strategy/<id>Rules, versions, backtest summary and live paper record.
GET/api/v1/signals/<id>?since=<row id>Record rows (signals and fills) with their leaf JSON.
GET/api/v1/leaderboard?mint=&timeframe=The leaderboard and its sort rule.
GET/api/v1/proof/<row id>Merkle proof of one record row against its daily root.
GET/api/v1/rootsDaily roots and their memo transactions.
GET/api/v1/token/<mint>Main pool, liquidity, market cap; 422 when not tradable.
POST/api/v1/keysCreate an owner key (the secret is shown once; also your API key).
POST/api/v1/strategiesx-api-key · {dsl, sentence?, backtest_hash?} → start a dry run.
POST/api/v1/strategy/<id>/versions | stop | restart | listingx-api-key · edit (new version), stop, restart, list/unlist.
GET/s/<id>/feed.json · /s/<id>/rss.xmlSignal feeds per strategy.

MCP

Remote MCP server (Streamable HTTP, stateless): https://dryrun.space/mcp. Tools: compile_strategy (DSL + readable rules, no side effects), backtest (DSL + mint → results), get_strategy, leaderboard.

{ "mcpServers": { "dry-run": { "url": "https://dryrun.space/mcp" } } }

Example

curl -s https://dryrun.space/api/v1/compile -H 'content-type: application/json' \
  -d '{"text":"Buy $20 when it drops 10% in an hour, stop loss 8%","mint":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"}'