Skip to content
Back to search
100
MCP live MCP 2026-07-28 streamable-http ext: ui

BotSpot — AI Trading Bots & Backtesting

io.github.grzesir/botspot-trading

AI trading bots: generate strategies, backtest, deploy live to 10+ brokers. No coding required.

Watch this dependency

Get before/after evidence when observed tools, schemas, authentication access, availability or the endpoint changes.

Inspect evidence and set up a watch Share public evidence report
Uptime
100.0%
1 direct probes · 30d
Response
798ms
last probe
Tools
110
callable
Resources
3
readable
Prompts
0
available
Score: 100/100
Handshake verified by our own probe.
why this score
pass Answers the MCP handshake 50/50
The handshake and the list calls succeeded on the primary URL.
pass Lists tools, resources or prompts 30/30
110 tools, 3 resources, 0 prompts returned.
pass 3 or more catalogue items 10/10
113 items in total; 3 or more earns these points.
pass Describes itself 10/10
95 characters; more than 30 earns these points.

Tools · 110

commit_backtest_rules_review

Commit the conversational Agent's already-completed, per-Rule evidence review for one exact terminal backtest and revision. This tool never analyzes a Rule or retrieves evidence. Before calling it, in…

list_backtests

Summarize recent backtests for the user, optionally scoped to a strategy or conversation. For the current attached strategy, use scope='strategy' and omit id, strategyId, and aiStrategyId. The server …

get_backtest_artifact

For a live or scheduled deployment, use get_deployment_logs for runtime logs and list_deployment_artifacts/query_deployment_artifact for decisions, preserving the discovered deploymentId and runId. A …

get_backtest_logs

Fetch runtime logs for an identified historical backtest simulation. This tool does not read live/paper bot or scheduled-deployment logs. Use get_deployment_logs for those runtime logs and list_deploy…

start_parameter_experiment

Start 2-10 parameter variants against the same saved revision, same date window, and same current BotSpot Auto routing policy. BotSpot creates or resolves one immutable strategy parameter set per vari…

start_backtest

Start a new backtest for a revision with the provided date range. ASYNC: This starts a job and returns immediately with a backtest id. `backtest_status` and artifact tools expose the current state for…

stop_backtest

Force-stop an in-progress backtest by ID.

backtest_status

Fetch the latest status/stage for a backtest by id. Response includes `stage` plus a rich `structuredContent.progress` snapshot of the current heartbeat: - `percent`, `eta`, `elapsed`, `simulationDa…

query_csv

Execute a SQL query on a backtest artifact using DuckDB. backtestId must be the actual backtest run id already discovered from list_backtests or used with get_backtest_artifact; never pass a strategy …

run_deployment_once

HIGH RISK: request owner approval for one immediate iteration of an existing scheduled bot. Use this for run once, an extra run, or retrying a missed iteration. It can place live trades. Preserves the…

start_deployment

Prepares owner review for a new BotSpot deployment; this call does not start a bot or place trades before approval. After explicit owner approval, this is HIGH RISK: the deployment may place real-mone…

stop_deployment

HIGH RISK: stops an existing BotSpot live deployment and changes a running trading system. Stopping the wrong bot can leave real-money exposure unmanaged. Only call this tool after the user has explic…

update_deployment_revision

HIGH RISK: creates one website approval request to update one named BotSpot live deployment to a target saved strategy revision. Restart argument example: {"deploymentId":"RETURNED_DEPLOYMENT_ID","ai…

get_deployment_action_status

Returns the status of a pending or completed deployment authorization request created by start_deployment, stop_deployment, update_deployment_revision, run_deployment_once, or place_trade. Use this af…

get_single_trade_status

Read-only status lookup for a single trade created by place_trade. Pass the place_trade actionId returned by the approval request, or the deterministic singleTradeBotId/managerBotId single-trade-<acti…

list_deployments

Returns the user's deployments with each row's own paper/live mode, linked broker and performance data. Never transfer performance between same-named paper and live deployments; an unavailable live re…

get_deployment_logs

Returns CloudWatch logs from a live deployment's container. Supports time-range filtering (startTimeIso/endTimeIso), CloudWatch filter patterns (query), local multi-query diagnostics (queries), diagno…

list_deployment_runs

Lists owner-scoped artifact runs for one live/scheduled deployment, or for up to 10 related deployments via deploymentIds. Every returned row includes deploymentId so run IDs remain paired with the de…

list_deployment_artifacts

Returns the manifest for the latest or specified deployment run, including artifact kinds, keys, sizes, row counts, timestamps, symbols, queryability, visibility, and upload status. Use this to find t…

get_deployment_artifact

Returns a short-lived signed URL for one manifest-listed deployment artifact. Owner-scoped and manifest-only: never pass arbitrary S3 keys. Prefer query_deployment_artifact for agent_detail, memory, i…

query_deployment_artifact

Runs a read-only DuckDB SELECT against queryable deployment artifacts listed in the run manifest. For replacement-deployment history, pass up to 10 exact {deploymentId, runId} targets; they are owner-…

get_broker_quotes

Read-only: fetches current quote/last-price data from the signed-in user's saved broker connection. Pass brokerCredentialId, or omit it only when the user has exactly one active saved broker connectio…

get_broker_option_chain

Read-only: fetches option chain data from the signed-in user's saved broker connection. Always narrow large requests with expiration or expirationStart/expirationEnd, strikeMin/strikeMax, right, detai…

get_broker_positions

Read-only: fetches current positions directly from saved broker credentials, not from deployment telemetry or snapshot automation. For current performance of a named bot or a follow-up about its holdi…

get_broker_orders

Read-only: fetches current or recent broker orders directly from a saved broker credential. Use symbol, statuses, startTimeIso, and endTimeIso to narrow. Never pass raw broker credentials.

get_broker_account_snapshot

Read-only: fetches current cash, buying power, and account value from the signed-in user's saved broker connection. For current performance of a named bot or a follow-up about its account, use show_bo…

get_bot_performance

Returns recorded performance snapshots for a live deployment's bot, including total return, max drawdown, Sharpe ratio, and portfolio value over time. The hoursAgo parameter controls the lookback wind…

get_deployment_position_telemetry

A saved-code-only edit does not require live orders or positions. Implement confirmed-fill handling in the strategy runtime without inventing a current fill or deployment. The live evidence requiremen…

get_portfolio_series

Returns the owned linked-account history plus a fresh direct broker balance through the same canonical source used by Python internal_data.get. This is the whole linked account, not strategy-attribute…

get_deployment_order_telemetry

A saved-code-only edit does not require live orders or positions. Implement confirmed-fill handling in the strategy runtime without inventing a current fill or deployment. The live evidence requiremen…

create_strategy

Creates a new strategy workspace with main.py and requirements.txt. The starter files are neutral boilerplate only; they do not encode customer-specific strategy logic or fake validation trades. After…

set_strategy_revision

Updates the active conversation to use a specific revision of the already-active strategy. Pass revisionId, or pass version with the user-facing version number (for example version=641) when the user …

set_runtime_secret_requirements

Sets or clears structured runtime secret requirements for an owned strategy revision. Use this when the strategy code needs non-broker API keys or settings, such as AP_API_KEY. This metadata is checke…

set_strategy_requirements

Explicitly overrides the automatically analyzed assetClasses and dataRequirements metadata for this owned strategy revision only. Use this when the user asks for an override or the saved-code analysis…

switch_active_strategy

Changes this conversation's active strategy workspace to another strategy owned by the user. Use only when the user explicitly asks to work with, compare against, copy from, or move to a different str…

list_revisions

Returns a bounded page of available revisions for a strategy with full revisionIds and version numbers. The default returns the newest 20 revisions and is capped at 50 per call so revision history nev…

generate_other_code

⚠️ IMPORTANT: This tool is RARELY needed. Normal trading strategy requests should use create_strategy plus file tools for LumiBot Python strategies. WHY LUMIBOT IS BETTER: - Python is more powerful a…

list_strategies

Returns all strategies owned by the current user. Each item includes both strategyId and aiStrategyId so you can use either with other tools (delete_strategy, list_revisions, start_backtest, etc.). Op…

get_strategy

Returns full details for a single strategy including name, type, revision count, latest revision info, and deployment status. Accepts either strategyId or aiStrategyId.

delete_strategy

Soft-deletes a strategy so it no longer appears in lists or can be used for backtests. Data is preserved in the database for compliance. Two-phase operation: call without confirm (or confirm=false) to…

update_strategy

Updates a strategy's name. Accepts either strategyId or aiStrategyId. Use publish_to_marketplace or unpublish_from_marketplace for public marketplace visibility.

get_account_status

Returns payment status, active products, backtest usage, and current cycle limits for this authenticated MCP user.

create_checkout_link

Creates a checkout session URL (subscription or one-time) tied to the authenticated MCP account.

create_billing_portal_link

Creates a billing portal URL for the authenticated MCP user so subscriptions and payment methods can be managed.

get_strategy_visuals

Returns strategy visual assets for a revision: Mermaid diagram code/image and infographic image URL. Use generateInfographicIfMissing=true to trigger infographic generation when missing.

get_backtest_visuals

Returns signed URLs for visual backtest artifacts (tearsheet, trades, indicators, stats) plus summary metrics and strategy IDs.

get_backtest_chart_series

Builds chart-ready time series data for equity/portfolio/drawdown/returns from stats artifacts and returns points + Vega-Lite spec.

show_account_overview

Answers "How is my account doing?" with account value, cash, unrealized P&L and position count for each connected broker account, an account value history chart from saved daily snapshots, and an allo…

show_holdings

Answers "What do I hold?" and "Which positions are winning?" with a holdings table per account (value, unrealized P&L in dollars and percent, weight) and an allocation donut when the total is complete…

show_position

Answers "How is my TSLA position doing?" and "How much TSLA exposure do I have?" for a stock symbol or an options underlying: value, unrealized P&L, shares and average cost, exposure in share-equivale…

show_backtest_dashboard

Answers "How did my backtest do?" with total return, CAGR, max drawdown, Sharpe and the equity curve for one saved backtest. Use a backtestId from list_backtests or backtest_status. Results are simula…

show_backtest_comparison

Answers "Which of my backtests did better?" for 2 to 5 saved backtests: equity lines started at 100 on the same chart plus a metric table (total return, CAGR, max drawdown, Sharpe, trades). Results ar…

show_bot_activity

For a general activity or trading-today summary, call this before separate order telemetry, run history or logs. Inspect its returned dated account, holdings and orders first, then fetch only missing …

show_option_payoff

Answers "What happens to this option trade at expiration?" from legs the user describes (call or put, long or short, strike, premium, contracts). Draws profit and loss at expiration with breakevens. U…

show_trading_cards

This panel uses supplied inputs; rendering does not independently verify their prices, timestamps or account marks. For portfolio attribution, use run_data_analysis to calculate and publish every hold…

get_tool_call_metrics

Returns per-tool call duration metrics for a conversation with an explicit latency boundary. Includes individual call records and aggregates, or exact Agent-vs-Node paired comparisons with transport/A…

list_my_marketplace_publications

Lists the authenticated owner's account and strategy publications, Marketplace state, explicit capabilities, and whether a private link is active. Bearer-link secrets and broker credential identifiers…

get_my_marketplace_publication

Reads one owner publication using an explicit account or strategy subject. Account sharing never implies strategy sharing; strategy sharing never exposes sibling strategies.

save_marketplace_publication

Creates or updates a draft for exactly one explicit subject. Can set Marketplace presentation and default-deny capabilities, then optionally publish. Set regenerateHeroImage=true to generate and uploa…

upload_marketplace_publication_image

Uploads one owner publication image as bounded base64 PNG, JPG, or WebP data. The server validates and re-encodes it before private storage; remote image URLs are not accepted.

remove_marketplace_publication

Unpublishes exactly one owner publication. Its independent private link is not changed.

publish_to_marketplace

Publishes a strategy to the public marketplace where users can discover it. Marketplace listing status is the public contract; bot deployments remain private. Tags can be set for categorization (holdi…

unpublish_from_marketplace

Removes a strategy from the public marketplace. The strategy becomes private and is no longer discoverable by other users. Existing private share links (if any) are NOT affected. Uses soft-delete (set…

clone_strategy

Creates a private dormant copy for the authenticated user. To copy a Marketplace listing, pass its listingId from marketplace_strategies; the publisher must have allowed copying. This copies published…

community

Use action feed to read public bot decisions and member posts; action thread with postId reads one public root post and its paginated replies. Use action post with body to publish, or add parentPostId…

search_memory

Retrieve relevant prior memories about this user. CALL search_memory at the START of any conversation where the user: - References past context ("like we discussed", "remember when", "last time") -…

delete_memory

Permanently delete a memory about the user. CALL delete_memory when the user explicitly asks to forget something, OR when they correct a fact you retrieved ("no, I switched to IBKR last month" — dele…

get_education_offers

Live facts about the AI Trading Bootcamp and the free live challenge show, read from the database. Use when the user asks about the Bootcamp, its price, payment plans, curriculum or dates, or about th…

search_conversation_history

Search the user's full conversation history via Postgres full-text search. CALL search_conversation_history when the user refers to specific past messages, errors, decisions, or details that you do n…

list_broker_credentials

Lists saved broker credential metadata for the authenticated user. Raw credential values are never returned. Use an item's id as start_deployment.brokerCredentialId only when the user explicitly named…

get_broker_token_refresh_status

Read-only token refresh status for one saved broker credential owned by the authenticated user. Use this after Schwab or Tradier OAuth snapshot runs to verify whether Node persisted rotated token mate…

test_schwab_broker_connection

One-stop MCP smoke test for an authenticated user's saved Schwab broker connection. If brokerCredentialId is omitted and exactly one active Schwab credential exists, this selects it automatically. The…

create_broker_credential

Stores broker credential material in Vault and returns only metadata for the authenticated user. Values are encrypted at rest and are not returned to MCP. Use this for broker login/trading credentials…

update_broker_credential

Updates broker credential metadata and optionally replaces Vault material for the authenticated owner. This replaces the saved credential values when credentialValues is provided; it never returns raw…

delete_broker_credential

Deletes broker credential material from Vault and marks the authenticated user's metadata row deleted. Existing running deployments may fail if they still depend on this credential; create a new crede…

list_files

Lists files in any saved strategy revision owned by the authenticated user. Folders are represented by slash-separated file paths. For the current attached/open strategy, omit strategyId and revisionI…

get_file

Returns one file from any saved strategy revision owned by the authenticated user, including an opaque editHandle for safe edits. For the current attached/open strategy, omit strategyId and revisionId…

create_file

Creates a file in a new immutable revision for any strategy owned by the authenticated user. For the current attached workspace, omit strategyId and revisionId. When create_strategy attaches the works…

replace_file

Replaces the full contents of an existing strategy file in a new immutable revision for any strategy owned by the authenticated user. Requires editHandle from get_file/list_files. Use this for first-b…

create_dashboard_file

Creates a template-first dashboard file at dashboards/<name>.dashboard.js in a new immutable strategy revision. Use this when the user asks to create a dashboard, then use get_file and patch_file to c…

delete_file

Deletes a file in a new immutable revision for any strategy owned by the authenticated user. Requires editHandle from get_file/list_files to prevent stale edits. main.py cannot be deleted. For the cur…

patch_file

Applies exact text or guarded line-range edits to one file in any strategy owned by the authenticated user and creates a new immutable strategy revision. Requires editHandle from get_file/list_files. …

get_active_plan

Returns the active read-only user-visible plan for the current conversation. Plan tools update plan state only; they never hide, block, route, or enable other tools.

create_plan

Creates a persisted, user-visible plan for substantial work in the current conversation. Use this for strategy builds, strategy edits, research, deployment setup, backtest analysis, broker investigati…

add_plan_item

Adds a user-visible item to the active plan when new work is discovered. When working in the current conversation, omit planId unless you already have the actual plan id; never pass a plan item id as …

update_plan_item

Updates one user-visible plan item. The target is required and must be `{type:"id", itemId}` or `{type:"position", position}`; ambiguous itemId/position top-level shapes are intentionally not accepted…

update_plan_items

Applies multiple user-visible plan item updates atomically in the listed order. Use this for a necessary multi-row reconciliation. First-build handoffs use sequential update_plan_item calls: complete …

replace_plan_items

Codex-style whole-plan update. Replaces the complete visible item list for the active plan in one call while preserving item ids when supplied. Use this when the visible checklist needs simple list/st…

record_external_wait_in_plan

Generic factual plan helper for the moment after a domain tool starts asynchronous work and returns a real externalWaitId. Identity and revision come from that stored hook wait; pass externalWaitId in…

remove_plan_item

Marks one plan item as removed. The target is required and must be `{type:"id", itemId}` or `{type:"position", position}`. Users cannot manually edit plan items; redirect changes through chat.

complete_plan

Marks the active plan completed, blocked, or cancelled. When working in the current conversation, omit conversationId; never pass placeholders such as `current`, `this`, or `active`. If you include co…

search_data_catalog

Find BotSpot-provided public research datasets the agent can query. Pass datasetId alone to inspect a selected dataset contract, schemas, units, coverage and historical guarantees. Catalog metadata is…

query_data

Query a registered research dataset by datasetId. Use for versioned symbol-membership universes, SEC company facts, SEC financial statements, SEC current filings, SEC full-text search, SEC filing exhi…

search_documents

Search public research documents, initially SEC EDGAR filings. Use this to find 10-K, 10-Q, 8-K, S-1, DEF 14A, Form 4, and 13F-HR documents before calling get_document. Use datasetId sec.full_text_sea…

get_document

Retrieve a public document by id, initially SEC filing documents from EDGAR. For SEC filings, pass documentId as CIK:accessionNumber[:filename]. Optional section aliases include risk_factors, business…

run_data_analysis

Run complete Agent-generated Python in an ephemeral isolated runtime with pandas, NumPy, SciPy, and statsmodels. A retryable failed attempt below 3 is unfinished: validate the next full request using …

inspect_analysis_artifact

Read the durable datasets, stable semantic element IDs, and view bindings from one completed analysis run in the current conversation. Use this before resolving any chart-derived value or condition. T…

resolve_analysis_reference

Deterministically resolve one stable semantic element or one structured expression against the full durable dataset from a completed analysis run. Every result is persisted with its source run, expres…

set_data_provider

Updates the active conversation to use the specified backtesting data provider. AVAILABILITY AND SETUP: Read these constraints before selecting a provider. Do not probe a provider already declared OF…

file_history

List per-file history or explicitly restore one historical file into the current complete strategy snapshot. Listing is read-only. Restoring creates a new immutable strategy revision and preserves all…

saved_env_vars

List, create, update, enable, disable, or delete saved environment variables (one variable per record). Raw values are never returned. Names BotSpot sets for its own runs, such as LUMIBOT_SCHEDULED_*,…

env_var_sets

Legacy multi-variable records. Prefer saved_env_vars, one variable per record. Raw values are never returned. Set "action" to choose the operation. Only send the fields listed for that action. ## ac…

send_feedback

Record human feedback about BotSpot for the product team. kind="bug" for broken behavior, kind="frustration" for frustration or confusion, kind="feature" for a feature request, kind="praise" for posit…

remember

Save one durable memory. kind="fact" for what is true about the user, kind="preference" for how to behave in every future turn, kind="strategy_outcome" for a strategy result or design decision. Use se…

manage_schedule

Read existing schedules and their backend status, preview a proposed schedule, or save a detached schedule draft that no bot uses yet. The list and status actions are read-only. A running bot's schedu…

broker_snapshots

Read stored daily broker snapshot automation data. For realtime holdings use get_broker_positions. action="run_now" requests a fresh no-trade snapshot for the saved account and starts read-only snapsh…

strategy_share_link

action="create" creates or refreshes a private bearer share link for a strategy; a new link shares backtest results and gets a generated password returned once unless password or noPassword: true is p…

private_share_link

action="create" issues or rotates a private bearer link for one account or strategy publication; a new link gets a generated password returned once unless password or noPassword: true is passed. actio…

marketplace_strategies

action="list" searches approved strategy listings, action="get" reads one listing, action="get_code" reads its published files when code access was granted. Set "action" to choose the operation. Only…

marketplace_accounts

action="list" lists approved account publications; action="get" reads one account publication. Set "action" to choose the operation. Only send the fields listed for that action. ## action="list": Li…

Resources · 3

botspot-visuals ui://botspot/visuals-v3.html
botspot-visuals-v2 ui://botspot/visuals-v2.html
botspot-backtest ui://botspot/backtest-v1.html

How to use

Add to your Claude Desktop / Cursor / Cline MCP config:

{
  "mcpServers": {
    "botspot_\u2014_ai_trading_bots_\u0026_backtesting": {
      "url": "https://mcp.botspot.trade/mcp",
      "transport": "streamable-http"
    }
  }
}