crypto-compSign in

Connect your AI over MCP

What this is

crypto-comp runs a Model Context Protocol server. Point Claude, Cursor or any MCP client at it and that assistant can read the block catalog, validate a strategy spec, save strategies, launch backtests and read their results — as you, with the same limits your plan has in the app. It cannot update or delete anything, and nothing touching money, your account or your settings is exposed.

Protocol version 2025-06-18. Whatever the assistant reads through these tools is sent to that assistant’s own provider.

1 · Mint a key

Create an API key on Settings → API keys (you need to be signed in). It is shown once, starts with mcpk_, and is what replaces mcpk_YOUR_KEY_HERE below. Give it only the scopes you want the assistant to have; you can revoke it there at any time.

2 · Add the server to your client

Each snippet below already contains this installation’s address. Claude Desktop only launches local servers from its config file, so its snippet uses the mcp-remote bridge through npx.

Server URL

https://your-crypto-comp-host/api/mcp

Streamable HTTP, JSON-RPC 2.0. Every request carries Authorization: Bearer <your key>.

Cursor

Paste into ~/.cursor/mcp.json (or .cursor/mcp.json in a project), then replace the key placeholder.

{
  "mcpServers": {
    "crypto-comp": {
      "url": "https://your-crypto-comp-host/api/mcp",
      "headers": {
        "Authorization": "Bearer mcpk_YOUR_KEY_HERE"
      }
    }
  }
}

Claude Code

Paste into a terminal, then replace the key placeholder.

claude mcp add --transport http crypto-comp https://your-crypto-comp-host/api/mcp --header "Authorization: Bearer mcpk_YOUR_KEY_HERE"

Claude Desktop

Paste into claude_desktop_config.json (Settings → Developer → Edit Config); needs Node.js for npx, then replace the key placeholder.

{
  "mcpServers": {
    "crypto-comp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://your-crypto-comp-host/api/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer mcpk_YOUR_KEY_HERE"
      }
    }
  }
}

Any other MCP client

Paste into its remote-server (Streamable HTTP) settings, then replace the key placeholder.

{
  "mcpServers": {
    "crypto-comp": {
      "type": "http",
      "url": "https://your-crypto-comp-host/api/mcp",
      "headers": {
        "Authorization": "Bearer mcpk_YOUR_KEY_HERE"
      }
    }
  }
}

3 · What the assistant can call

ToolScope it needsWhat it does
catalogcatalog:readList every strategy block the engine supports (indicators, conditions and their inputs/outputs), projected from the engine's own registry. Call this before composing a spec.
validate_speccatalog:readDeep-validate a strategy spec through the engine's own validator and return the verdict. On failure the response carries structured errors; fix them and validate again. This is the same validator that guards saving and launching — nothing bypasses it.
list_strategiesstrategies:readList your saved strategies, newest first. Specs are omitted; use get_strategy for one.
get_strategystrategies:readRead one of your saved strategies, including its full spec.
save_strategystrategies:writeSave a NEW strategy under your account. The spec is deep-validated by the engine first; an invalid spec is rejected and nothing is stored. Saving never overwrites an existing strategy.
launch_runruns:writeQueue a backtest for a spec and a run window. Subject to the same subscription limits as the UI (concurrent runs, how far back the data window may reach, spot-only markets) — a refusal comes back as a tier_limit error naming which limit. Returns a run_id; poll get_run for the outcome.
list_runsruns:readList your runs, newest first, each with its summary. Optionally filter to one of your strategies.
get_runruns:readRead one of your runs: its status, timings, error and full result.
get_resultsruns:readRead the full stored result of one of your runs (summary, equity curves, fills, signal log, and for a futures run the funding ledger, its net total, any liquidations and the execution stamp). `result.version` is the branch point: "0.1" predates the metric suite, "0.2" predates futures, "0.3" carries everything; stored results are immutable and never recomputed, so treat later fields as optional. Null until the run finishes. Large — prefer get_metrics when you only need performance figures.
get_metricsruns:readRead just the performance metrics of one of your runs (Sharpe, Sortino, max drawdown, win rate, profit factor, expectancy and the rest). Every figure is a decimal string. Null for a run that has not finished, and for runs recorded before the metric suite existed.

A refused call (a missing scope, a plan limit, something that is not yours) comes back to the assistant as a readable error, so it can tell you why. The same key also works for the REST API.