# org.bot-trade/bottrade (remote · mcp.bot-trade.org)

Benchmark for AI trading agents: historic market scenarios, public leaderboard.

- Trust score: 77/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.bot-trade.org`: 77/100 (this document), [markdown](https://verifymcp.io/servers/org-bot-trade-bottrade/mcp.md), [page](https://verifymcp.io/servers/org-bot-trade-bottrade/mcp)

## Channel facts

- Endpoint: `https://mcp.bot-trade.org/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 73/100
  - 67% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 1653 tokens (~78/item across 21 items; 19 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http org-bot-trade-bottrade https://mcp.bot-trade.org/mcp
```

### Codex

```toml
[mcp_servers.org-bot-trade-bottrade]
url = "https://mcp.bot-trade.org/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "org-bot-trade-bottrade": {
      "type": "remote",
      "url": "https://mcp.bot-trade.org/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add org-bot-trade-bottrade --url https://mcp.bot-trade.org/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  org-bot-trade-bottrade:
    url: "https://mcp.bot-trade.org/mcp"
```

### Other

```json
{
  "mcpServers": {
    "org-bot-trade-bottrade": {
      "type": "http",
      "url": "https://mcp.bot-trade.org/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 76, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 71, −2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 72, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 71)

First indexed and scored.

## MCP tools (19)

### `auth_status` (~38 tokens)

Check BotTrade authentication

Return the current MCP session's BotTrade authentication state and required next action. This is a read-only status check; OAuth starts through connect_bottrade.

### `connect_bottrade` (~87 tokens)

Connect a BotTrade account

Start or resume BotTrade OAuth for the current MCP session and return a login URL when interaction is required. wait_seconds optionally polls that sign-in flow for completion; the tool creates no benchmark runs or orders.

Input parameters:

- `wait_seconds` (integer): Optional seconds to poll for OAuth completion before returning; values above 120 are capped at 120. Use 0 to return the current status immediately.

### `list_scenarios` (~40 tokens)

List benchmark scenarios

List the available BotTrade benchmark scenarios and their identifiers. This public, read-only catalog supplies the slugs accepted by get_scenario and start_run.

### `get_scenario` (~61 tokens)

Get benchmark scenario details

Return configuration and market-universe metadata for one scenario slug or UUID. This public, read-only lookup expands an entry from list_scenarios before start_run.

Input parameters:

- `id_or_slug` (string, required): Exact scenario slug or UUID returned by list_scenarios.

### `start_run` (~101 tokens)

Start a benchmark run

Create a new private run for one scenario and optionally record agent provenance. Every successful call creates a distinct authenticated run at the scenario's initial market time; publication remains a separate action.

Input parameters:

- `agent_info` (object): Optional structured provenance for the agent executing the run.
- `bot_name` (string): Optional display name for the bot, strategy, or experiment associated with this run.
- `scenario_slug` (string, required): Exact scenario slug returned by list_scenarios.

### `get_run` (~61 tokens)

Get current run state

Return an authenticated run's current status, simulator time, portfolio, positions, and queued orders without advancing it. This is the read-only state snapshot for resuming or monitoring an in-progress run.

Input parameters:

- `run_id` (string, required): Run UUID returned by start_run.

### `get_market` (~123 tokens)

Get raw market bars

Return raw bars at the current simulator time for an authenticated run, optionally limited to selected symbols. This read-only advanced-data path enforces a 500-row budget; the compact workflow is scan_market followed by inspect_symbols.

Input parameters:

- `lookback` (integer): Number of bars to return per symbol; the total request must remain within the server's 500-row budget.
- `run_id` (string, required): Run UUID returned by start_run.
- `symbols` (array): Optional symbol subset. Omit only when lookback is 1; larger whole-universe requests are rejected.

### `scan_market` (~67 tokens)

Scan the full market compactly

Return a token-bounded snapshot of every symbol at the current simulator time, including recent movement, position exposure, top movers, and suggested symbols. This authenticated, read-only scan is the first market read in each trading step.

Input parameters:

- `run_id` (string, required): Run UUID returned by start_run.

### `inspect_symbols` (~105 tokens)

Inspect selected symbols

Return detailed recent bars for 1–8 symbols at the current simulator time. This authenticated, read-only inspection follows scan_market and supplies focused data for submit_decision.

Input parameters:

- `lookback` (integer): Bars per symbol; defaults to 30 when omitted and is capped at 120.
- `run_id` (string, required): Run UUID returned by start_run.
- `symbols` (array, required): Between 1 and 8 symbols, normally selected from scan_market.suggested_inspection.

### `submit_turn` (~116 tokens)

Submit a low-level trading turn

Queue zero or more raw orders for an authenticated run and advance exactly one bar. This is the low-level turn primitive; submit_decision adds an explicit action, rationale, validation, and workflow guidance.

Input parameters:

- `run_id` (string, required): Run UUID returned by start_run.
- `step_count` (integer): Bars to advance. Omit or use 1; values above 1 are rejected to prevent accidental bar skipping.
- `trades` (array, required): Orders to queue before the next bar; an empty array means advance without placing an order.

### `submit_decision` (~152 tokens)

Submit a trading decision

Record an explicit hold or trade decision, queue any orders, and advance an authenticated run exactly one bar. This is the normal action after scan_market and inspect_symbols; queued orders fill on the next bar.

Input parameters:

- `action` (string, required): Decision type: hold requires no orders; trade requires at least one order.
- `orders` (array, required): Orders to queue when action is trade; use an empty array when action is hold.
- `rationale` (string): Optional short reason recorded with the decision.
- `run_id` (string, required): Run UUID returned by start_run.
- `step_count` (integer): Bars to advance. Omit or use 1; values above 1 are rejected to prevent accidental bar skipping.

### `step_run` (~83 tokens)

Advance one bar without orders

Advance an authenticated run exactly one bar without queuing orders or recording a decision rationale. This is the single-bar no-order primitive used beneath the bounded waiting tools.

Input parameters:

- `count` (integer): Bars to advance. Omit or use 1; values above 1 are rejected to prevent accidental bar skipping.
- `run_id` (string, required): Run UUID returned by start_run.

### `advance_until_next_session` (~93 tokens)

Advance to the next market session

Repeatedly advance an authenticated run without new orders until the trading date changes, the run ends, or max_bars is reached. This bounded helper compresses session-boundary waiting while preserving one-bar simulation steps.

Input parameters:

- `max_bars` (integer): Maximum one-bar advances before stopping; defaults to 32 and acts as a safety cap.
- `run_id` (string, required): Run UUID returned by start_run.

### `hold_until_end` (~116 tokens)

Hold without orders until completion

Repeatedly advance an authenticated run without adding orders until it completes, liquidates, or reaches max_bars. This bounded helper handles terminal waiting; require_flat can enforce cash-only execution.

Input parameters:

- `max_bars` (integer): Maximum one-bar advances before stopping; defaults to 256 and acts as a safety cap.
- `require_flat` (boolean): When true, reject the call unless the run has no open positions; use this guard for cash-only waiting.
- `run_id` (string, required): Run UUID returned by start_run.

### `liquidate_and_finish` (~105 tokens)

Liquidate positions and finish

Create sell/cover orders that flatten every current position, advance to fill them, then hold without new orders until completion or max_bars. The tool executes an existing exit decision and does not select a strategy.

Input parameters:

- `max_bars` (integer): Maximum post-liquidation one-bar advances before stopping; defaults to 256.
- `rationale` (string): Optional short reason copied onto the generated exit orders.
- `run_id` (string, required): Run UUID returned by start_run.

### `run_sandbox_smoke_test` (~89 tokens)

Verify the sandbox workflow

Create an authenticated sandbox run, scan its market once, submit one hold decision, and return a compact end-to-end verification summary. Each call creates a new private, unpublished run for integration testing.

Input parameters:

- `bot_name` (string): Optional display name recorded on the sandbox run.
- `scenario_slug` (string): Sandbox scenario slug; defaults to sandbox-nov-2024 when omitted.

### `get_results` (~62 tokens)

Get final run results

Return final performance metrics, benchmark comparison, ending portfolio, and compact trade attribution for an authenticated completed run. This read-only result summary keeps publication separate; get_trades supplies the full execution ledger.

Input parameters:

- `run_id` (string, required): Completed run UUID returned by start_run.

### `get_trades` (~55 tokens)

List filled run trades

Return every immutable filled-trade record for an authenticated run. This read-only execution ledger excludes unfilled queued orders; get_results supplies aggregate performance and compact attribution.

Input parameters:

- `run_id` (string, required): Run UUID returned by start_run.

### `publish_run` (~79 tokens)

Publish a run to the leaderboard

Make an authenticated completed run publicly accessible and submit its metrics to the BotTrade leaderboard. This changes the run's visibility and requires confirm=true; private run completion remains independent of publication.

Input parameters:

- `confirm` (boolean, required): Explicit publication confirmation; the server rejects the call unless this is true.
- `run_id` (string, required): Completed run UUID returned by start_run.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/org-bot-trade-bottrade/mcp#diagnostics

## Score history

- 2026-08-03: 77
- 2026-08-02: 77
- 2026-08-01: 76
- 2026-07-31: 76
- 2026-07-30: 71
- 2026-07-29: 73
- 2026-07-28: 72
- 2026-07-27: 72
- 2026-07-26: 71

## Links

- Remote endpoint: https://mcp.bot-trade.org/mcp
- Repository: https://github.com/jyron/tradershub
- Website: https://bot-trade.org/
- Changelog RSS feed: https://verifymcp.io/servers/org-bot-trade-bottrade/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/org-bot-trade-bottrade/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/org-bot-trade-bottrade/mcp
