Skip to main content
Glama

BotSpot: AI Trading, Backtests and Bots

Replace a strategy file

replace_file
Destructive

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-build main.py replacement after create_strategy returns neutral starter files. For the current attached/open strategy, omit strategyId and revisionId after get_file; the server resolves the latest conversation revision, so do not manually transcribe those UUIDs. Pass explicit ids only for a named or different strategy. For existing-strategy fixes, this is the action step after get_file identified the concrete change and returned an editHandle. Mutate only the strategy/revision named by the user when it differs from the open page context. After a successful replace, call get_file on the returned new revisionId to read back the final saved code and verify the saved executable code before final-answering; do not verify by re-reading the original/base revisionId from before the edit. For direct edits to existing saved strategies, edit plus readback completes the direct edit unless the user explicitly asked for a backtest. Do not start a backtest just because you want validation after this edit. For copy/apply-same-rules requests, do not use replace_file after reading only one strategy, and do not use it after reading only the target. A different revision of the named target is still target evidence, not source evidence, unless the user explicitly asked to copy from an older target revision. First read the source strategy code and the named target strategy code, then diff executable assignments/thresholds/cadence/branches within the requested copy scope. Copy only explicitly requested mechanics for a limited transfer; update every differing target value to the source value only for whole-strategy parity. Preserve target-specific identity such as symbol/ticker, strategy name, account/broker identity, and labels unless the user explicitly asks to change them; do not copy the source symbol/name into the target. Build the replacement from the target file and selectively copy behavior values into it; do not replace the named target wholesale with the source file when identities differ. In Python strategy code, self.symbol is target identity when source and target tickers differ; for a TQQQ source applied to an SQQQ target, keep self.symbol as SQQQ while copying behavior rules. Target identity does not include cadence, sleeptime, trigger thresholds, order sizing, entry/exit branches, helper calls, or risk rules; those are behavior and must match the source only when included in the requested copy scope. Do not add settings absent from the source or merge unrelated memory/preferences. Before replace_file in a copy/apply-same-rules edit, preserve the literal target identity line from the target readback in the replacement content. If your replacement would turn target identity into source identity, do not call this tool yet; correct the replacement first. After readback for a copy/apply-same-rules edit, if the target file contains source identity such as the source symbol/name/account/broker, edit again before final-answering. Do not list source identity as evidence of success. When the fix replaces an executable setting, guard, helper call, order path, or branch, remove or replace the stale executable code; do not append a competing line and leave the old contradictory behavior in place. When the user says to stop using a value/source, or says that value/source is stale or wrong, remove executable fallback uses of that value/source instead of keeping them as a backup path. If the readback still contains the stale executable value/source/fallback the user asked to remove, the edit is not complete; call patch_file or replace_file again before final-answering. If the user supplied a concrete replacement value for a code-owned setting such as cost basis, entry price, threshold, cadence, market, symbol, or helper path, replace the stale executable literal/path and read it back. For live fill/cost-basis fixes where live order tools fail but the user supplied a concrete bot-owned fill, record/use that exact fill value in executable state/code as the bootstrap latest verified bot-owned fill; do not add only an unset placeholder such as None. For plan-driven first-build work, make the visible implementation item in_progress with update_plan_item before using file tools so the user sees the current plan step while file work runs. If replace_file or patch_file fails, no new revision was created: read the current file/editHandle and retry with a valid edit before starting a backtest or ending the strategy build.

Input Schema

NameRequiredDescriptionDefault
pathYes
contentYes
editHandleYesOpaque edit handle returned by list_files or get_file. It replaces raw hash copying while preserving stale-write protection.
revisionIdNoBase revision ID to snapshot from. Omit with strategyId for the current attached/open strategy.
strategyIdNoBase strategy id. Omit with revisionId for the current attached/open strategy so the server uses the conversation's latest saved revision.
descriptionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses that the replacement creates a new immutable revision, that editHandle provides stale-write protection, that failed calls create no new revision, and that callers should read back the returned new revisionId for verification. It also warns not to verify by re-reading the original base revision and not to start a backtest merely for validation.

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

Conciseness2/5

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

The purpose is front-loaded, but the description is an enormous wall of repeated workflow, copy/apply, identity, readback, and verification instructions. Many sentences repeat the same identity-preservation and stale-code-removal rules, making it difficult to scan and exceeding what is needed to select and invoke the tool.

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?

For a destructive, six-parameter tool with only 50% schema coverage and no output schema, the description covers the important operational context: revision creation, editHandle use, id omission behavior, verification flow, and failure behavior. It also explains the expected follow-up action of reading the returned new revisionId.

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?

With 50% schema description coverage, the description meaningfully compensates by explaining editHandle provenance and stale-write protection, plus the nuanced omission/use of strategyId and revisionId for the current attached strategy versus an explicitly named strategy. It also shapes what content should contain through identity-preservation and stale-code-removal rules, though path and description parameters still receive little explicit semantics.

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 opening sentence states a specific verb and resource: replacing the full contents of an existing strategy file as a new immutable revision for a user-owned strategy. This distinguishes it from create_file and patch_file by emphasizing full-content replacement of an existing file, and the agent can understand the core action without inspecting the schema.

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?

The description gives extensive when-to-use and when-not-to-use guidance: after get_file/list_files supplies an editHandle, for first-build main.py replacement after create_strategy, for existing-strategy fixes after get_file identifies a concrete change, and not for copy/apply-same-rules after reading only one strategy. It also explains when to omit strategyId/revisionId versus pass explicit ids, which directly routes invocation choices.

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.