org.bot-trade/bottrade
REMOTE · MCP.BOT-TRADE.ORG · SCANNED AUG 3
Benchmark for AI trading agents: historic market scenarios, public leaderboard.
Available components
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. How we score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- 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. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability73
- 67% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 1653 tokens (~78/item across 21 items; 19 tools + 2 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · mcp.bot-trade.org
claude mcp add --transport http org-bot-trade-bottrade https://mcp.bot-trade.org/mcp
[mcp_servers.org-bot-trade-bottrade] url = "https://mcp.bot-trade.org/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"org-bot-trade-bottrade": {
"type": "remote",
"url": "https://mcp.bot-trade.org/mcp",
"enabled": true
}
}
} openclaw mcp add org-bot-trade-bottrade --url https://mcp.bot-trade.org/mcp --transport streamable-http
mcp_servers:
org-bot-trade-bottrade:
url: "https://mcp.bot-trade.org/mcp" {
"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.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Aug 26 +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.
- 31 Jul 26 +5
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 −2
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 29 Jul 26 +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.
- 27 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 71
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://mcp.bot-trade.org/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.bot-trade.org | CN=YE2,O=Let's Encrypt,C=US | 26 Jul 2026 | 24 Oct 2026 | ECDSA 256 | ECDSA-SHA384 | 6332779b43ef706ec6e9f098207859f5409 |
| SANs: mcp.bot-trade.org | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
DNSSEC insecure
Validation of mcp.bot-trade.org. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| org. | present | 26974 | 8 | Verified |
| bot-trade.org. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://mcp.bot-trade.org/.well-known/oauth-protected-resource", scope="bottrade:trade"
Bearer resource_metadata="https://mcp.bot-trade.org/.well-known/oauth-protected-resource", scope="bottrade:trade" Protected resource metadata
| Document | https://mcp.bot-trade.org/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.bot-trade.org/mcp |
| Authorisation server | https://bot-trade.org |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.bot-trade.org/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.bot-trade.org/mcp | HTTPS enforced | 301 | https://mcp.bot-trade.org/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
advance_until_next_session Advance to the next market session ~93
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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_bars | integer | — | Maximum one-bar advances before stopping; defaults to 32 and acts as a safety cap. |
| run_id | string | yes | Run UUID returned by start_run. |
No output schema declared.
No examples provided.
auth_status Check BotTrade authentication ~38
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
connect_bottrade Connect a BotTrade account ~87
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
No output schema declared.
No examples provided.
get_market Get raw market bars ~123
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.
| Name | Type | Req | Description |
|---|---|---|---|
| lookback | integer | — | Number of bars to return per symbol; the total request must remain within the server's 500-row budget. |
| run_id | string | yes | Run UUID returned by start_run. |
| symbols | array | — | Optional symbol subset. Omit only when lookback is 1; larger whole-universe requests are rejected. |
No output schema declared.
No examples provided.
get_results Get final run results ~62
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.
| Name | Type | Req | Description |
|---|---|---|---|
| run_id | string | yes | Completed run UUID returned by start_run. |
No output schema declared.
No examples provided.
get_run Get current run state ~61
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.
| Name | Type | Req | Description |
|---|---|---|---|
| run_id | string | yes | Run UUID returned by start_run. |
No output schema declared.
No examples provided.
get_scenario Get benchmark scenario details ~61
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id_or_slug | string | yes | Exact scenario slug or UUID returned by list_scenarios. |
No output schema declared.
No examples provided.
get_trades List filled run trades ~55
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.
| Name | Type | Req | Description |
|---|---|---|---|
| run_id | string | yes | Run UUID returned by start_run. |
No output schema declared.
No examples provided.
hold_until_end Hold without orders until completion ~116
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Run UUID returned by start_run. |
No output schema declared.
No examples provided.
inspect_symbols Inspect selected symbols ~105
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.
| Name | Type | Req | Description |
|---|---|---|---|
| lookback | integer | — | Bars per symbol; defaults to 30 when omitted and is capped at 120. |
| run_id | string | yes | Run UUID returned by start_run. |
| symbols | array | yes | Between 1 and 8 symbols, normally selected from scan_market.suggested_inspection. |
No output schema declared.
No examples provided.
liquidate_and_finish Liquidate positions and finish ~105
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Run UUID returned by start_run. |
No output schema declared.
No examples provided.
list_scenarios List benchmark scenarios ~40
List the available BotTrade benchmark scenarios and their identifiers. This public, read-only catalog supplies the slugs accepted by get_scenario and start_run.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
publish_run Publish a run to the leaderboard ~79
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | yes | Explicit publication confirmation; the server rejects the call unless this is true. |
| run_id | string | yes | Completed run UUID returned by start_run. |
No output schema declared.
No examples provided.
run_sandbox_smoke_test Verify the sandbox workflow ~89
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bot_name | string | — | Optional display name recorded on the sandbox run. |
| scenario_slug | string | — | Sandbox scenario slug; defaults to sandbox-nov-2024 when omitted. |
No output schema declared.
No examples provided.
scan_market Scan the full market compactly ~67
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.
| Name | Type | Req | Description |
|---|---|---|---|
| run_id | string | yes | Run UUID returned by start_run. |
No output schema declared.
No examples provided.
start_run Start a benchmark run ~101
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Exact scenario slug returned by list_scenarios. |
No output schema declared.
No examples provided.
step_run Advance one bar without orders ~83
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.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | — | Bars to advance. Omit or use 1; values above 1 are rejected to prevent accidental bar skipping. |
| run_id | string | yes | Run UUID returned by start_run. |
No output schema declared.
No examples provided.
submit_decision Submit a trading decision ~152
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.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Decision type: hold requires no orders; trade requires at least one order. |
| orders | array | yes | 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 | yes | 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. |
No output schema declared.
No examples provided.
submit_turn Submit a low-level trading turn ~116
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.
| Name | Type | Req | Description |
|---|---|---|---|
| run_id | string | yes | 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 | yes | Orders to queue before the next bar; an empty array means advance without placing an order. |
No output schema declared.
No examples provided.