BotSpot — AI Trading Bots & Backtesting
io.github.grzesir/botspot-tradingAI 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
Score: 100/100
Handshake verified by our own probe.
why this score
Tools · 110
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…
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 …
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 …
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 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 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…
Force-stop an in-progress backtest by ID.
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…
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 …
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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-…
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…
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…
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…
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.
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…
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…
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…
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…
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…
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…
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 …
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…
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…
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…
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…
⚠️ 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…
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…
Returns full details for a single strategy including name, type, revision count, latest revision info, and deployment status. Accepts either strategyId or aiStrategyId.
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…
Updates a strategy's name. Accepts either strategyId or aiStrategyId. Use publish_to_marketplace or unpublish_from_marketplace for public marketplace visibility.
Returns payment status, active products, backtest usage, and current cycle limits for this authenticated MCP user.
Creates a checkout session URL (subscription or one-time) tied to the authenticated MCP account.
Creates a billing portal URL for the authenticated MCP user so subscriptions and payment methods can be managed.
Returns strategy visual assets for a revision: Mermaid diagram code/image and infographic image URL. Use generateInfographicIfMissing=true to trigger infographic generation when missing.
Returns signed URLs for visual backtest artifacts (tearsheet, trades, indicators, stats) plus summary metrics and strategy IDs.
Builds chart-ready time series data for equity/portfolio/drawdown/returns from stats artifacts and returns points + Vega-Lite spec.
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…
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…
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…
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…
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…
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 …
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…
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…
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…
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…
Reads one owner publication using an explicit account or strategy subject. Account sharing never implies strategy sharing; strategy sharing never exposes sibling strategies.
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…
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.
Unpublishes exactly one owner publication. Its independent private link is not changed.
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…
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…
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…
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…
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") -…
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…
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 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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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…
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. …
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.
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…
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 …
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…
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 …
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…
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…
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.
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…
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 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 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…
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 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 …
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…
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…
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…
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…
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_*,…
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…
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…
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…
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…
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…
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…
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…
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…
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
ui://botspot/visuals-v3.html
ui://botspot/visuals-v2.html
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"
}
}
}