BotSpot: AI Trading, Backtests and Bots
AI agents backtest, paper trade and live trade via your broker. Free to connect; OAuth.
Connect Remote server
claude mcp add --transport http botspot-trading https://mcp.botspot.trade/mcp
{
"mcpServers": {
"botspot-trading": {
"url": "https://mcp.botspot.trade/mcp"
}
}
}
{
"servers": {
"botspot-trading": {
"type": "http",
"url": "https://mcp.botspot.trade/mcp"
}
}
}
Settings > Connectors > Add custom connector
URL: https://mcp.botspot.trade/mcp
Tools 80 found in our last check
commit_backtest_rules_reviewCommit 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, independently read the exact rules.json and main.py revision, define the evidence…
list_backtestsSummarize 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 resolves the exact strategy from the scoped MCP token, avoiding copied-identifi…
get_backtest_artifactFor 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 deploymentId or deployment runId is not a backtestId. Request a short-lived dow…
get_backtest_logsFetch 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_deployment_artifacts/query_deployment_artifact for decisions, preserving the discover…
start_parameter_experimentStart 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 variant and starts the runs in parallel with bounded concurrency through the normal…
start_backtestStart 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 that id. Backtests are asynchronous and can consume material runtime capacity.…
stop_backtestForce-stop an in-progress backtest by ID.
backtest_statusFetch 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`, `simulationDate`, `portfolioValue`, `totalReturnPct`, `heartbeatElapsedSeconds` - `orders`: ar…
query_csvExecute 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 id, aiStrategyId, revisionId, browser URL revisionId, conversation id, or place…
run_deployment_onceHIGH 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 saved revision, broker, variables, recurring schedule, history and state. Curr…
start_deploymentPrepares 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-money trades. Call for an authorized start request even when required saved variabl…
stop_deploymentHIGH 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 explicitly confirmed the stop action, broker mode, and target deployment in the curre…
update_deployment_revisionHIGH RISK: updates one named BotSpot live deployment to a target saved strategy revision after owner authorization. Without an active window it creates one website approval request. Restart argument example: {"deploymentId":"RETURNED_DEPLOYMENT_ID","aiStrategyRevisionId":"RETURN…
place_tradeHIGH RISK: creates a BotSpot website approval request for a single trade that may place real-money orders after approval. Provide reason before approval: at least 200 characters explaining the decision, supporting evidence and material risks; prefer 600–2,500. Maximum 100,000 Un…
get_deployment_action_statusReturns 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. Includes the active, expired or revoked trading window when present. Omit operation or use…
get_single_trade_statusRead-only approval and execution status for a direct trade or an existing-order cancel/modify request. Pass the actionId returned by place_trade, broker_orders(action="manage") or broker_orders(action=manage), or the deterministic singleTradeBotId/managerBotId single-trade-<acti…
list_deploymentsReturns 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 return stays unknown. Do not use this tool to prepare or route a direct buy, sell…
get_deployment_logsReturns CloudWatch logs from a live deployment's container. Supports time-range filtering (startTimeIso/endTimeIso), CloudWatch filter patterns (query), local multi-query diagnostics (queries), diagnosticPreset, noise suppression, and pagination (nextToken). Default limit is 500…
list_deployment_runsLists 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 deployment that owns them. Use this when the user asks what evidence is available…
list_deployment_artifactsReturns 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 the canonical agent_detail and memory artifacts before asking why a live or sche…
get_deployment_artifactReturns 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, indicators, stats, or other tabular artifacts when the user needs analysis rathe…
query_deployment_artifactRuns 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-checked, queried concurrently, and returned with both IDs on every row under on…
get_broker_quotesRead-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 connection. Use symbols for one or more assets. Use quoteSymbol only for crypto or forex…
get_broker_positionsRead-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 holdings, use show_bot_activity first; it performs its own exact-linked broker read.…
get_broker_account_snapshotRead-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_bot_activity first; it performs its own exact-linked broker read. Use this tool a…
get_bot_performanceReturns 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 window (default 168 = 1 week, max 720 = 30 days). For current account performance u…
get_deployment_position_telemetryA 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 requirements below apply only when investigating or preserving state for an existing live…
get_portfolio_seriesReturns 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-attributed or cash-flow-adjusted investment performance. Use show_bot_activity first for…
get_deployment_order_telemetryA 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 requirements below apply only when investigating or preserving state for an existing live…
create_strategyCreates 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 creation, use the returned files manifest instead of rediscovering starter pat…
set_strategy_revisionUpdates 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 asks to restore or pull up an exact historical version. If the user asks to wor…
set_runtime_secret_requirementsSets 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 checked before starting or updating a bot so missing saved variables are caught befor…
set_strategy_requirementsExplicitly overrides the automatically analyzed assetClasses and dataRequirements metadata for this owned strategy revision only. Optionally correct aiEnabled after inspecting that exact revision; omitted classification is preserved. Use this when the user asks for an override o…
switch_active_strategyChanges 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 strategy. If the user explicitly names or identifies a different owned strategy, t…
list_revisionsReturns 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 never overwhelms the model context. When the user names an exact historical versio…
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 and easier to maintain - Works with multiple brokers (Alpaca, Interactive Brokers…
list_strategiesReturns 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.). Optionally filter by name. The name filter is case-insensitive and also returns c…
get_strategyReturns full details for a single strategy including name, type, revision count, latest revision info, and deployment status. Accepts either strategyId or aiStrategyId.
delete_strategySoft-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 preview what will be affected. Call with confirm=true to execute the deletion.…
update_strategyUpdates a strategy's name. Accepts either strategyId or aiStrategyId. Use publish_to_marketplace or unpublish_from_marketplace for public marketplace visibility.
create_checkout_linkCreates a checkout session URL (subscription or one-time) tied to the authenticated MCP account.
create_billing_portal_linkCreates a billing portal URL for the authenticated MCP user so subscriptions and payment methods can be managed.
get_strategy_visualsReturns 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_visualsReturns signed URLs for visual backtest artifacts (tearsheet, trades, indicators, stats) plus summary metrics and strategy IDs.
get_backtest_chart_seriesBuilds chart-ready time series data for equity/portfolio/drawdown/returns from stats artifacts and returns points + Vega-Lite spec.
show_account_overviewAnswers "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 allocation donut when holdings are complete. Paper and live accounts are shown sepa…
show_holdingsAnswers "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. Fetches the holdings itself; use this first for a general holdings or allocat…
show_positionAnswers "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-equivalents (option delta only when the broker reports it), and a payoff chart at expir…
show_backtest_dashboardAnswers "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 simulated. Never starts or changes a backtest. Read-only. Shows an interactive panel…
show_backtest_comparisonAnswers "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 are simulated. Read-only. Shows an interactive panel in apps that support MCP App…
show_bot_activityFor 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 decision details. Daily price attribution requires loading data-analysis and us…
show_option_payoffAnswers "What happens to this option trade at expiration?" from legs the user describes (call or put, long or short, strike, premium, contracts). Works for every structure: one call or put, debit or credit spread, straddle, strangle, butterfly, iron condor. The reader can drag t…
show_trading_cardsThis 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 holding’s daily change/contribution and quantity × ending price versus reported mar…
get_tool_call_metricsReturns 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/Agent overhead. Use this to identify slow tools and optimize your workflow.
save_marketplace_publicationCreates or updates a draft for exactly one explicit subject. Can set Marketplace presentation and default-deny capabilities, then optionally publish. To save your default positions, filled-trade and open-order sharing for first-time strategy publications, pass publishingDefaults…
publish_to_marketplacePublishes 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 (holdingPeriod, riskLevel, plan tier). Free and paid monthly listings are supported.…
unpublish_from_marketplaceRemoves 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 (sets isActive=false). Accepts the marketplace listing ID, or a strategy/aiStrategy…
clone_strategyCreates 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 code, not a first-build workspace: continue with secure broker/key setup and t…
communityBotSpot's trader Community: what other traders and their bots are doing right now. Read it often, before building or changing a strategy, to see what is working for real people: action feed reads the newest posts (kind=trades for shared and verified trades, kind=bots for public…
competitionsBrowse public trading competitions, their rules, prizes and account leaderboards. list finds competitions; get reads one; leaderboard follows entered accounts; my_entry reads your own entry. enter registers your explicitly selected brokerage account (brokerCredentialId); no stra…
search_memoryRetrieve 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") - Asks for advice that should reflect their preferences - Describes a trading probl…
delete_memoryPermanently 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" — delete the old "user trades on Tradier" memory after writing the new one). Obtain th…
get_education_offersLive 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 the free live challenge or show (the next date and time), or when a new or stuck…
skillsBotSpot's free strategy-building skills: expert guides for writing LumiBot trading strategies (stocks, ETFs, options), making them fast, and using the BotSpot tools well. Before you write, edit or debug a strategy, call action=list, then action=get with the skill name and follow…
search_conversation_historySearch 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 not already see in the live context window. Examples of when to call: - "What was…
list_broker_credentialsLists 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 that exact saved broker connection/account for this deployment. If no matching…
get_broker_token_refresh_statusRead-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 material. In a reconnection conclusion, state the returned snapshotStatus and snaps…
test_schwab_broker_connectionOne-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 tool checks sanitized token-refresh readiness and, by default, requests one im…
update_broker_credentialUpdates 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 values. For a broker or exchange API key used to trade, tell the user to enabl…
delete_broker_credentialDeletes 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 credential and redeploy instead of deleting an active dependency.
list_filesLists 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 revisionId so the server uses the latest active revision from conversation state, fallin…
get_fileReturns one file from any saved strategy revision owned by the authenticated user, including an opaque editHandle for safe edits. Call list_files before reading optional files such as rules.json or helpers whose presence is unknown; read only paths returned for that revision. A…
create_fileCreates 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 workspace through conversationUpdate, these defaults also apply to new first-build f…
replace_fileReplaces 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-build main.py replacement after create_strategy returns neutral starter files. F…
create_dashboard_fileCreates 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 customize the dashboard from the template.
delete_fileDeletes 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 current attached/open strategy, omit strategyId and revisionId; pass explicit ids…
patch_fileApplies 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. For insert_before and insert_after operations, include an exact unique anchor.…
get_active_planReturns 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_planCreates 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 investigation, and other multi-step tasks. Do not use this for greetings, small talk, simp…
add_plan_itemAdds 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 planId. All new-item fields belong inside the nested `item` object, including i…
Details
| Endpoint | https://mcp.botspot.trade/mcp (Streamable HTTP) |
| First published | 24 Oct 2026 |
| Last updated | 24 Oct 2026 |
| Registry name | io.github.grzesir/botspot-trading |
More finance and crypto servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
