Skip to main content
Glama

BotSpot: AI Trading, Backtests and Bots

Get backtest artifact (auto-uses Parquet when available)

get_backtest_artifact
Read-only

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 deploymentId or deployment runId is not a backtestId. Request a short-lived download URL for a specific BACKTEST non-log artifact (tearsheet, trades, indicators, stats, agent_detail, completion JSON, etc.). Runtime logs are not artifacts; use get_backtest_logs for backtest runtime errors, warnings, tracebacks, order/fill log lines, startup lines, and strategy log output. Tool availability is already supplied by tools/list; never probe it with all-zero ids or dummy labels. For Marketplace live performance, use marketplace_strategies live/performance fields, not backtest artifacts. Missing live windows stay unavailable and do not require an artifact call. backtestId must be an actual backtest run id from list_backtests or an explicit user-provided backtest id; never pass a strategy id, aiStrategyId, revisionId, browser URL revisionId, conversation id, or placeholder such as . If you only have strategy/revision context, call list_backtests(includeArtifacts=true) first and select the relevant completed run. Once selected, keep that same backtestId for all artifacts/log calls in the answer unless the user explicitly asked to compare multiple runs or analyze a different named run. Do not mix stats/trades/agent_detail/log evidence from different backtest ids. Artifact absence is a normal result, not a tool crash: if a file has not been produced yet (common while a backtest is still running) the response returns structuredContent.unavailable=true with the backtest status and available artifact labels. IMPORTANT: When Parquet versions exist, this tool automatically serves them instead of CSV for much faster performance. The response will tell you which format was actually served. Report the actual format (Parquet or CSV) to the user. ⚠️ CRITICAL FOR DATA FILES: This tool returns ONLY the schema (column names, types, nullCount, sample rows) - NOT the full data! The csvSchema tells you what columns exist, their types, and how many NULL values each has (nullCount). Check nullCount to identify columns that may have NULLs for certain row types. Sample rows show diverse bounded examples across different values (not just first N rows). Long preview values are shortened and the preview is not the full data. For JSON artifacts, this tool inlines parsed JSON as structuredContent.jsonContent when the file is reasonably small. To actually ANALYZE the data, you MUST follow up with query_csv to run a SQL query. Calling get_backtest_artifact alone does NOT count as 'analyzing' the CSV - you have only seen metadata/previews, not enough row-level evidence. Do not patch strategy code from list_backtests.errorDetails, backtest_status text, or this artifact preview alone when query_csv is visible. For debugging/diagnostics, call get_backtest_logs. This tool intentionally rejects runtime log labels so diagnostics do not lose context through filtered log CSV artifacts.

Input Schema

NameRequiredDescriptionDefault
labelYesUser-facing artifact label from list_backtests/includeArtifacts or get_backtest_artifact guidance, e.g. stats.csv, trades.csv, agent_detail.parquet, tearsheet.html, completion.json. Runtime logs are not artifacts; use get_backtest_logs.
backtestIdYesActual backtest run UUID. Use the id returned by list_backtests or an explicit user-provided backtest id. Do not use a strategy id, aiStrategyId, revisionId, browser URL revisionId, conversation id, or a placeholder such as <unknown>.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint=true, the description discloses non-obvious behavior: only the schema/preview is returned for data files, structuredContent.unavailable=true for not-yet-produced artifacts, short-lived URL lifetime, automatic Parquet substitution, and JSON inlining as structuredContent.jsonContent. The one gap is that it doesn't say much about URL expiry duration or pagination/row limits on previews, but the behavioral coverage is well above the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Substantively dense but poorly front-loaded: the opening sentence routes to other tools before stating what this tool does, and 'runtime logs are not artifacts / use get_backtest_logs' is repeated three times. Most sentences carry real information (unavailable semantics, format reporting, query_csv follow-up), but the redundancy and volume for a 2-parameter tool cost it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything an agent needs: valid id provenance, artifact-vs-log boundary, missing-artifact semantics, format selection, preview-only limitation, and the mandatory query_csv follow-up for analysis. With no output schema, the description fully compensates by explaining response shapes (csvSchema, nullCount, structuredContent.jsonContent, unavailable flag).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter descriptions already forbid strategy ids/placeholders, so the description largely duplicates that. It does add workflow-level semantics the schema cannot: obtain backtestId from list_backtests(includeArtifacts=true), and hold that same id across all artifact and log calls unless the user asks for a comparison.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource: 'Request a short-lived download URL for a specific BACKTEST non-log artifact', and enumerates concrete artifact labels and the Parquet auto-serving behavior. It explicitly distinguishes itself from get_backtest_logs, get_deployment_logs, list_deployment_artifacts/query_deployment_artifact, and query_csv, so an agent can pick it apart from near-neighbors without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not routing is present for nearly every alternative: get_backtest_logs for runtime logs, get_deployment_logs for live deployments, list_backtests(includeArtifacts=true) when only strategy/revision context exists, marketplace_strategies for live performance, and query_csv to actually analyze the data. It also states an exclusion ('This tool intentionally rejects runtime log labels') and warns not to probe availability with dummy ids.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.