XTester MCP tool capabilities

Below is the confirmed stable list of XTester MCP tools, generated from the machine catalog (there is no second handwritten list).

Tools (262)

add_simulation_breakpoint

Adds a time-breakpoint: the running simulation pauses exactly AT this UTC time.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=false
  • Parameters: label, time (required)

apply_strategy_patch

Apply a unified-diff patch to a strategy source file. The diff must use the actual current contents as base — call read_strategy_file first if you're not 100% sure of the current state. Prefer this over write_strategy_file for surgical changes.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: filename (required), rationale (required), unified_diff (required)

check_data_gaps

Scans stored 1m history of a symbol for INTERNAL gaps (missing minutes between the first and last stored candle — e.g. left by an interrupted range download). Read-only. Note: some gaps are exchange-side (no trades / maintenance) and cannot be filled. Heal real gaps via repair_data_gaps. Args: exchange, market, symbol, from?, to?.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: exchange (required), from, market (required), symbol (required), to

check_update

Checks whether a newer XTester version is available (Velopack / GitHub release feed). Returns current version + whether an update exists. In a dev/portable build reports self-update is unavailable.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: none

cleanup_research_data

Previews or applies retention cleanup only inside the current bound XTester workspace. Preview is read-only and returns an exact token. Apply requires confirm=true, that token, the same keep_latest, and the current windowTag. It deletes only fully verified old terminal runs and verified internal retention remnants; active, corrupt, linked, or suspicious entries are preserved and counted.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, confirmation, keep_latest, preview_token

compile_strategy

Compiles the FULL active strategy through Roslyn. Returns success + diagnostics.

CALL THIS TOOL: (a) After editing the MAIN strategy file (main.cs or class inheriting Strategy) — verify your changes compile; (b) At the FINAL step of a multi-step task before reporting completion to the user; (c) User explicitly asked to compile / build / check / verify / run; (d) User reports a compile error and wants reproduction.

DO NOT call this tool:

  • After editing ONLY an indicator / helper / utility file that the strategy may not yet reference — it will fail with unrelated errors, confusing the user;
  • After every micro-edit — group related edits, compile once at the end;
  • As a sanity check between unrelated tasks in the same conversation.

Rule of thumb: if the strategy currently USES the file you just edited (directly or via dependency) — compile. If you just created a new isolated indicator that the user hasn't wired into the strategy yet — don't.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

convert_begin

Creates an in-memory, process-bound source-disclosure session for an external conversion agent. Requires the exact conversion/root hash, access_mode='redacted_text', recipient, endpoint, confirm=true and confirm_source_disclosure=true as JSON booleans. Consent is never persisted and disappears when this MCP host exits. This tool does not call an LLM, perform network I/O, or modify the project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=false
  • Parameters: access_mode (required), confirm (required), confirm_source_disclosure (required), conversion_id (required), endpoint (required), recipient (required), source_root_sha256 (required)

convert_cancel

Idempotently revokes source access for one process-bound conversion session. Requires confirm=true. It does not modify the project or conversion files; starting again requires a fresh dual-confirmed convert_begin call. It cannot return while an earlier page disclosure from that session is still in flight.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: confirm (required), conversion_id (required), session_id (required), source_root_sha256 (required)

convert_compile

Compiles the durable staged file set with the normal XTester compiler and sandbox policy, then stores a bounded compile result. Requires confirm=true. Returns sanitized logical-file diagnostics and hashes, never source code or local paths.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: confirm (required), conversion_id (required), source_root_sha256 (required)

convert_finalize

After a successful compile, atomically applies the reviewed staged file set to the selected isolated project. It revalidates workspace, source revision, decisions, staged hashes and unchanged target code. Requires confirm=true and refuses while the engine is busy. A rare failed rollback returns project_state_uncertain with projectChanged=null so the agent tells the user to inspect the project instead of claiming it stayed unchanged.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm (required), conversion_id (required), source_root_sha256 (required)

convert_get_manifest

Returns validated conversion metadata and the exact relative source inventory for one run. It verifies the current project identity, inventory root, file sizes and hashes. It never returns source content or a machine-local path. A Git run keeps its pinned revision but uses a generic source label rather than a repository name or location.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: conversion_id (required)

convert_get_xtester_context

Returns a bounded page of the current public XTester strategy API and conversion restrictions for one durable conversion run. It returns signatures and constraints, never project source, credentials, source URLs, or machine-local paths.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: conversion_id (required), limit, offset, source_root_sha256 (required), topic

convert_import_source

Captures and classifies a user-authorized strategy source inside the current isolated project workspace. Accepts one local file/folder path, a bounded file list, pasted text, an HTTPS download, or a public/private GitHub repository accessible with the configured account. Archives use the same bounded intake as the GUI. Irrelevant documents, current XTester projects, incomplete libraries and binary candidates are classified but do not create a conversion run. Requires confirm=true and confirm_rights=true; responses never echo a local path, source URL, token, or source text.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: confirm (required), confirm_rights (required), input_kind (required), local_path, local_paths, selected_entry_point, suggested_file_name, text, url

convert_read_source

Reads one exact text file from an active process-bound conversion session. The complete verified file is scrubbed of secrets, absolute URLs and local paths before character pagination; binary files are refused. The page limit is 65536 characters. Each response includes disclosed document/page hashes and merged per-file read coverage. No raw source is logged or sent to telemetry.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: conversion_id (required), limit, offset, relative_path (required), session_id (required), source_root_sha256 (required)

convert_status

Returns the durable workflow phase, counts, unresolved decision cards and next action. It works after MCP restart. Optional session_id also returns the process-bound source session state and read coverage after revalidating the same workspace, conversion and source root. If a previous finalization was interrupted, this call may finish the bounded journal recovery after verifying the current project; it never starts a new finalization or changes strategy code.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: conversion_id (required), session_id, source_root_sha256 (required)

convert_submit_behavior_model

Validates and durably replaces the conversion behavior model. Every accepted source file must be represented; behaviors and incompatibilities need exact immutable source references. Each incompatibility must offer two or three consequences with exactly one recommendation. Requires confirm=true and returns only phase, counts and next action.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: behavior_model (required), confirm (required), conversion_id (required), source_root_sha256 (required)

convert_submit_decisions

Durably records one or more user-confirmed choices for compatibility issues. For each issue choose exactly one offered option or provide a custom hypothesis. Calls may be repeated across several chat rounds. Requires confirm=true and never echoes decision text.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: confirm (required), conversion_id (required), decisions (required), source_root_sha256 (required)

convert_submit_files

Validates and durably replaces the complete staged XTester strategy and behavior coverage. Unresolved decisions block this call. Paths must be unique normalized relative .cs paths and enabled main.cs is required. Requires confirm=true; source code is never echoed in the response or telemetry.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm (required), conversion_id (required), coverage (required), files (required), source_root_sha256 (required), strategy_description, strategy_name

convert_submit_semantic_audit

Submits a separate behavior-by-behavior semantic audit after compilation. The audit must cover every behavior, distinguish covered, missing and mismatched behavior, link evidence to enabled staged files, and include findings for every missing or mismatched behavior. Core recomputes all binding hashes and decides whether finalization is allowed. Requires confirm=true and never echoes strategy source.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: behaviors (required), confirm (required), conversion_id (required), findings (required), source_root_sha256 (required)

create_project_workspace

Creates a new portable .xtproj at an absolute path, initializes its workspace, and locks this MCP process to it. Never overwrites an existing file. Use only after the user chose 'create new project'; confirm=true is mandatory.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: confirm (required), description, name (required), path (required)

create_strategy_file

Creates a new source file in the strategy. Fails if a file with that name already exists. Use only when explicitly asked — don't add new files unprompted.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: content (required), filename (required)

create_strategy_folder

Creates a virtual folder (and any missing ancestors) inside the strategy .xtproj. Folders are relative virtual paths ('/'-separated), e.g. 'Indicators' or 'Lib/Risk'.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: path (required)

delete_project_workspace

Permanently deletes one inactive XTester workspace snapshot and its local session state. It never deletes the source .xtproj, cloud project, or Launcher bundle. This destructive catalog operation is available only before this MCP process selects a workspace. First call list_project_workspaces with the exact workspace_id, obtain its current windowTag, warn the user that unsaved workspace-only changes will be lost, then require their explicit confirmation. confirm=true and an exact case-sensitive confirmation equal to window_tag are mandatory. Default, GUI-open, GUI-unknown, MCP-active, stale, and unsafe workspaces fail closed.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm (required), confirmation (required), window_tag (required), workspace_id (required)

delete_simulation_breakpoint

Deletes a simulation breakpoint by id.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: id (required)

delete_strategy_file

Deletes a source file from the strategy. confirm=true is mandatory and is enforced by the MCP server before anything is removed, so a call without it changes nothing. Cannot delete main.cs (use rename if you need to swap).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, filename (required)

delete_strategy_folder

Deletes a virtual strategy folder. With recursive=false (default), FAILS if the folder still contains files or subfolders. With recursive=true, removes the folder and everything under it. main.cs (root) is never affected. confirm=true is mandatory and is enforced by the MCP server before anything is removed, so a call without it changes nothing.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, path (required), recursive

diagnostics_get_incident

Reads one incident bundle: incident.txt (meta + user breadcrumbs + stack) and log tails.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: include_tails, name (required)

diagnostics_list_incidents

Lists on-disk crash/incident bundles recorded by the XTester GUI (cross-process, rotated to 20) + crash dumps. Complements get_app_errors (this process only).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

download_funding_history

Downloads historical funding rates into the cache (background job → poll job_status). DEX perpetuals only (HyperLiquid/Aster/dYdX); CEX symbols are skipped — the engine then uses the account profile's fixed rate.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: exchange (required), from (required), market (required), symbol, symbols, to (required)

download_history

Downloads / updates 1m candle history for a symbol from the exchange (same as the Data window's Load). PREFER the no-range mode (no from/to): it appends the missing tail, or backfills from the start of the symbol's history (can take many minutes) — this never creates gaps. With from/to (range mode): fetches only that window; a 'from' LATER than existing coverage leaves an internal GAP (reported in the result — heal via repair_data_gaps). Prepend earlier than existing data is NOT supported (start is clamped forward). Streams live progress. Args: exchange, market, symbol, from?, to?.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: exchange (required), from, market (required), symbol (required), to

evaluate_strategy_readiness

Full pre-run readiness check of the current strategy: compiled state, symbols the code uses (Roslyn scan), symbol exists on exchange, history present and covers the simulation period, accounts and balances configured. Default is READ-ONLY; apply_auto_fixes=true also auto-creates accounts/zero balances/selects symbol (mutates user settings).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: apply_auto_fixes

export_project

Exports the whole project (sources, spec, versions, breakpoints — everything) as a single .xtproj file to the given path. Refuses to overwrite without overwrite=true.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: overwrite, path (required)

find_definition

Finds a declaration. Two modes: by 'symbol' name (syntax scan of all files), or SEMANTIC go-to-definition by position — pass filename+line+column (1-based, cursor on the symbol) to resolve through the Roslyn semantic model like the built-in editor.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: code_override, column, filename, line, symbol

find_references

Finds symbol usages. Two modes: by 'symbol' name (word-boundary text match, lexical), or SEMANTIC find-all-references by position — pass filename+line+column (1-based, cursor on the symbol) to resolve through the Roslyn semantic model across all files, like the built-in editor.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: code_override, column, filename, line, symbol

format_strategy_file

Reformats the strategy file using the editor's formatting engine (Roslyn formatter + continuation indentation). For a dry-run diff of edits use get_strategy_format_edits.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: filename (required)

get_active_file_context

Returns information about the file currently active in the editor: filename, selected text range (if any). Useful when user says 'this method' / 'here'.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_app_errors

Reads the application's ErrorList (errors/warnings panel) — the same list the user sees in the IDE, filled by the last compilation (whether the user triggered it or the agent did). Prefer this over get_strategy_diagnostics when the user mentions an error they saw in the UI, since this includes whatever the IDE-side build last produced. Parameters (all optional): only_errors — bool, return only Error rows; only_warnings — bool, return only Warning rows; file — case-insensitive exact filename match; search — case-insensitive substring of Description / Code; max_count — cap on returned rows (default 50, max 200).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: file, max_count, only_errors, only_warnings, search

get_app_logs

Reads recent entries from the XTester application log (Global.log) — the same log the user sees in the Output panel. Useful to inspect what happened during user-triggered compilation, strategy runs, market data loading and other application events. Use this when the user mentions an error / warning in the IDE, or after asking them to Build/Run, to see the actual messages instead of guessing. Parameters (all optional): level — 'Debug' | 'Info' | 'Warning' | 'Error' | 'Success' | 'Trace'; category — 'General' | 'Compilation' | 'Strategy' | 'Market' | 'Orders' | etc.; since_minutes — only entries newer than N minutes ago; search — substring to match (case-insensitive) in Message; max_count — cap on the number of returned entries (default 50, max 200).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: category, level, max_count, search, since_minutes

get_backtest_summary

Returns a short summary of the MAIN strategy backtest (source, status, metrics). Status can be None/Running/Paused/Completed/Failed — metrics are present only for Completed. A completed run with 0 trades is still a valid backtest. For period, warnings and diagnostics use get_main_backtest_snapshot.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_backtest_trades

Returns closed trades from the LAST run_backtest in this session: entry/exit time, side, entry/exit price, size, pnl, pnl %, duration (minutes). Paginate with offset/limit.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: limit, offset

get_balances

Returns simulation account balances per exchange/market: asset, total, available (locked = total - available). Use when the user asks about equity, free funds or margin.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_chart_data

Chart data as JSON: candles (o/h/l/c/v), indicator series the strategy computed, trades and open orders in the window, equity of the last backtest. For candles-only paging use get_klines.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: exchange, from, market, max_points, symbol, timeframe, to

get_closed_positions

Closed positions of the current session: entry/exit time+price, quantity, PnL, duration.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: limit, offset

get_conversion_report

Returns the sanitized durable report created by convert_finalize: directly transferred, transferred with an agreed difference, and not transferred behavior. It contains no invented similarity percentage, source code, secrets, source URL, or local path. If a previous finalization was interrupted after its project write, this call may finish the bounded journal recovery after verifying the current project; it never starts a new finalization or changes strategy code.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: conversion_id (required), source_root_sha256 (required)

get_equity_curve

Returns the equity curve (account value over time) from the LAST run_backtest. Already downsampled for display; pass max_points to cap further.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: max_points

get_funding_rates

Reads cached funding rates for a symbol (optionally sliced by from/to). Rates are FRACTIONS per funding interval (0.0001 = 0.01%).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: exchange (required), from, limit, market (required), symbol (required), to

get_gui_state

Reads LIVE state from a running XTester GUI over a local pipe: the active editor file, the current text selection, unsaved code size, and the current (possibly Running/Paused) main backtest. Returns a note if no XTester window is open — then use the disk-based tools.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_indicator_doc

Returns the signature and documentation for a named indicator (RSI, EMA, MACD, ATR, etc.). Use when unsure about parameters.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: name (required)

get_indicator_series

Returns points of one series recorded during the LAST run_backtest (built-in indicator or a custom Plot(...) series such as phase markup) at FULL resolution with pagination — suitable for building CSV on the client side. Args: name (from list_indicator_series; substring match, exact match preferred), offset/limit, from/to (ISO-8601 UTC).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: from, limit, name (required), offset, to

get_klines

Reads OHLCV candles from downloaded data, aggregated to any timeframe (m1..d1..). Returns compact tuples [openTimeIso, open, high, low, close, volume]. Paginate large ranges via 'from' + the returned 'next_cursor'. Args: exchange, market, symbol, timeframe (default m1), from?, to? (ISO UTC), limit (default 500, max 2000).

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: exchange (required), from, limit, market (required), symbol (required), timeframe, to

get_launch_mode

Strategy launch mode: Debug (safety instrumentation + code breakpoints) or Release (faster, no infinite-loop watchdog, breakpoints ignored).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_loaded_symbols

Symbols currently loaded into RAM (the market-data memory the engine reads): candle count and covered range per symbol.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_main_backtest_snapshot

Returns the FULL snapshot of the MAIN strategy backtest: source, status (None/Running/Paused/Completed/Failed), run id, symbol/market/timeframe, period, started/completed timestamps, metrics and warnings. detail='diagnostic' additionally includes strategy-log errors and open positions/orders counts. Lab (Research Lab) runs are NEVER included here.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: detail

get_open_orders

Returns currently OPEN (active) orders of the simulation: symbol, side, type, price, quantity, filled quantity, status. Use when the user asks about pending/limit orders.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_order_book_settings

Current synthetic order book configuration: launch-profile semantics (enabled, mode, teacher strength, seed policy — affects results, fingerprinted) and machine-local engine settings (DOM rows, FPS, book limit).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_positions

Returns CURRENT open positions of the running/last simulation (side, quantity, entry price, mark price, unrealized PnL, leverage) plus up to 10 most recent closed positions with PnL. Use when the user asks why the strategy is (not) holding positions or about current exposure.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_project_info

Returns the exact locked XTester workspace identity, including the GUI windowTag, and the currently loaded project: name, description, and the list of strategy source files (files live INSIDE the .xtproj, not on disk — edit them via read_strategy_file / write_strategy_file / apply_strategy_patch, not the filesystem).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_project_metadata

Project metadata: name, description, version, created date, strategy id, launch mode, version counters (spec/strategy), source file count.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_project_spec

Returns the project SPECIFICATION (the strategy's ТЗ, markdown) — the same text the Spec Builder maintains.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_runtime_requirements

Runtime symbol requirements of the simulation engine: resolved run symbols, symbols observed at runtime, pending (missing) symbols with the reason, and whether the run is blocked waiting for user intervention.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_simulation_settings

Current simulation settings of THIS MCP session (symbol, period, step mode, auto-pause, visualization). Reflects in-memory session state — run_backtest/simulation_configure mutate it; it is NOT necessarily the user's on-disk config.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_statistics_series

One named statistics series of the LAST backtest as JSON points. Names: equity_strategy, equity_benchmark, drawdown, rolling_returns, rolling_volatility, rolling_sharpe, rolling_return_cagr, rolling_drawdown, monthly_returns, pnl_distribution, returns_distribution, cumulative_pnl_by_trade, exposure_over_time, position_size_over_time, exposure_distribution, ranked_drawdowns, win_vs_loss, duration_distribution.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: max_points, name (required)

get_strategy_api_doc

Returns signatures + XML documentation for one environment API type (e.g. 'IApi', 'IKline', 'PlaceOrder', 'OrderSide'). Optional 'member' filters to a single method/property. For indicators prefer get_indicator_doc.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: member, type (required)

get_strategy_code_actions

Available quick-fix code actions at a position (currently: add-missing-using for unresolved types, CS0246/CS0103 — same as the built-in editor). Returns title + text edits per action. Args: filename, line, column (1-based), optional code_override.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: code_override, column (required), filename (required), line (required)

get_strategy_completions

IntelliSense completions at a position — same Roslyn engine as the built-in editor. Args: filename, line, column (1-based), optional code_override (unsaved text), max_results. Returns label/kind/detail/documentation/insertText.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: code_override, column (required), filename (required), line (required), max_results

get_strategy_diagnostics

Returns the latest compiler diagnostics for the active strategy (errors, warnings, infos). Useful when fixing build failures.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_strategy_environment

Returns the FULL strategy runtime environment reference: auto-usings the compiler injects, ambient symbols (time/Now), allowed types, hidden/forbidden rules, the IStrategy skeleton and sandbox security rules plus host-managed Models/AiProviders/Strategy Risk/Strategy State facades. Read this before writing code.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_strategy_format_edits

Document formatting via the editor's engine (Roslyn Formatter + continuation indentation). apply=false (default) is a strict dry run: it returns the text edits and changes nothing — no file write, no project save, no revision bump. apply=true applies them to the file. Richer than format_strategy_file (edit diffs instead of a whole-file rewrite).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: apply, filename (required)

get_strategy_logs

Reads the STRATEGY's own log — messages the strategy wrote via _logger.Info/Warning/Error during the last simulation/backtest (filter hits, entry/exit reasons, order errors). Timestamps are SIMULATION time. This is a different log than get_app_logs (application log). ALWAYS use this when diagnosing why a strategy did or did not trade. Parameters (all optional): level — 'Debug' | 'Info' | 'Warning' | 'Error'; search — case-insensitive substring of the message; max_count — cap on returned rows (default 60, max 300); scope — 'last_run' (default: only entries of the last main backtest) | 'session' (process log since its last clear; note: in MCP, run_backtest clears the log when a run actually starts).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: level, max_count, scope, search

get_strategy_outline

Returns the structural outline (classes, methods, properties, fields) of a strategy file or all files (when filename is omitted). Useful for navigation without reading full source.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: filename

get_strategy_quick_info

Hover/quick-info at a position — same engine as the built-in editor: symbol signature + docs. Args: filename, line, column (1-based), optional code_override.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: code_override, column (required), filename (required), line (required)

get_strategy_runtime_info

Returns the currently loaded data context: ticker symbol, timeframe, and date range. Useful to ground recommendations in actual data scope.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

get_strategy_signature_help

Signature help at a call site (position must be INSIDE the argument list) — active overload, parameter names and docs. Args: filename, line, column (1-based), optional code_override.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: code_override, column (required), filename (required), line (required)

get_strategy_statistics

Detailed statistics of the LAST backtest (beyond get_backtest_summary): CAGR, Sharpe, Sortino, Calmar, expectancy, exposure, monthly bests/worsts, distributions summary.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

git_commit

Commits the current project state. Returns the commit sha, or reports 'nothing to commit' (use allow_empty=true to force). Note: if the user's GitAutoPushOnCommit is on, this also pushes.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: allow_empty, message (required)

git_commit_and_push

Commit + push in one step. Returns commit sha, branch, remote (redacted) and push result.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: allow_empty, message (required)

git_create_branch

Creates a branch (does NOT switch to it). Optional at_sha to branch from a commit.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: at_sha, name (required)

git_fetch

Fetches from the remote (network; needs remote + GitHub auth). Updates ahead/behind.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: none

git_get_diff

Diff: without args — working changes vs HEAD (file lists); with commit_sha — that commit vs its parent with patch text (truncated).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: commit_sha, max_patch_chars

git_get_log

Commit log (newest first): sha, message, author, date, branch tips.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: branch, limit

git_get_remote

Returns the bound remote URL (credentials redacted).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

git_get_status

Git status of the project repo: branch, head, modified/added/deleted (project state vs HEAD), ahead/behind the remote, clean flag.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

git_init

Initializes the project git repo (generates RepoId, makes the 'Initial import' commit). No-op if already initialized.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: none

git_list_branches

Lists local branches (+ which one is current).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

git_merge_branch

Merges a branch into the current one (in-memory merge; conflicts abort with the file list, repo untouched). Rewrites the project — refuses on dirty state without confirm=true.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, source (required)

git_preview_merge

Dry-run merge preview: UpToDate | FastForward | Merge | Conflicts + changed/conflicted files. Repo is not touched.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: source (required)

git_pull

Pull (fast-forward ONLY; diverged branches throw — merge manually). Rewrites the project on update; refuses on dirty state without confirm=true.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm

git_push

Pushes the current branch to the remote (network; needs remote + GitHub auth).

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: none

git_set_remote

Binds/replaces the remote URL for the project repo (persisted in .xtproj). Same durable effect as github_bind_repo, so it carries the same mandatory confirm=true, enforced by the server before the binding is written.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, url (required)

git_switch_branch

Switches to a local branch. DESTRUCTIVE when dirty: the in-memory project is rewritten from the branch — uncommitted changes are lost; refuses without confirm=true.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, name (required)

github_add_issue_comment

Adds a Markdown comment to an issue or pull request. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: body (required), confirm, dry_run, number (required), owner, repo

github_add_review_comment

Adds an inline pull-request review comment using line/side coordinates. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: body (required), commit_id (required), confirm, dry_run, line (required), number (required), owner, path (required), repo, side (required), start_line, start_side

github_auth_status

GitHub auth status: signed-in user (login) and whether a token is stored. The token itself is NEVER returned.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

github_bind_repo

Binds an existing GitHub repo (clone URL) as this project's remote, replacing any remote already bound. confirm=true is mandatory and is enforced by the server before the persistent binding is written.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, url (required)

github_cancel_workflow

Cancels a running workflow. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, owner, repo, run_id (required)

github_create_branch

Creates a remote branch at sha/source_ref/default branch. Existing same-SHA refs are treated as success. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, name (required), owner, repo, sha, source_ref

github_create_issue

Creates an issue with optional labels, assignees and milestone. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: assignees, body, confirm, dry_run, labels, milestone, owner, repo, title (required)

github_create_label

Creates a repository label. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: color (required), confirm, description, dry_run, name (required), owner, repo

github_create_milestone

Creates a repository milestone. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: confirm, description, dry_run, due_on, owner, repo, title (required)

github_create_pull_request

Creates a pull request, including draft PRs. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: base (required), body, confirm, draft, dry_run, head (required), maintainer_can_modify, owner, repo, title (required)

github_create_release

Creates a draft or published release; use draft=true for a reviewable preview. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: body, confirm, draft, dry_run, generate_release_notes, make_latest, name, owner, prerelease, repo, tag_name (required), target_commitish

github_create_repo

Creates a GitHub repository; bind=true (default) binds it as this project's remote. push=true also makes an initial commit and pushes. confirm=true is mandatory and is enforced by the server before the remote repository is created or the project remote is rewritten; dry_run=true returns the plan without creating anything.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: bind, confirm, description, dry_run, name (required), private, push

github_create_tag

Creates a lightweight remote Git tag at sha/source_ref. Existing same-SHA refs are treated as success. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, name (required), owner, repo, sha, source_ref

github_delete_branch

Deletes a remote branch; refuses the default or a protected branch. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, name (required), owner, repo

github_delete_label

Deletes a repository label. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, name (required), owner, repo

github_delete_milestone

Deletes a milestone (issues are not deleted). Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, number (required), owner, repo

github_delete_release

Deletes a GitHub release. Its Git tag is not deleted automatically. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, owner, release_id (required), repo

github_delete_tag

Deletes a remote Git tag. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, name (required), owner, repo

github_device_login_poll

Polls the started device-flow login as a background job (up to ~15 min; poll job_status). PERSISTS a credential: on success the GitHub access token is written to this machine's user settings so the login survives the process. The token itself is never returned or logged — only the LOGIN. confirm=true is mandatory and is enforced by the server before polling starts, so an unconfirmed call stores nothing.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true
  • Parameters: confirm

github_device_login_start

Starts the GitHub OAuth Device Flow: returns a user code and verification URL — show them to the user, then call github_device_login_poll. The device code stays in-process.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: none

github_dispatch_workflow

Dispatches a workflow_dispatch workflow. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: confirm, dry_run, inputs, owner, ref (required), repo, workflow_id (required)

github_download_artifact

Downloads an Actions artifact ZIP into XTester's GitHubDownloads directory as a background job. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true
  • Parameters: artifact_id (required), confirm, file_name, overwrite, owner, repo

github_download_release_asset

Downloads a release asset into XTester's GitHubDownloads directory as a background job. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true
  • Parameters: asset_id (required), confirm, file_name, overwrite, owner, repo

github_download_workflow_logs

Downloads a workflow-run log ZIP into XTester's GitHubDownloads directory as a background job. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true
  • Parameters: confirm, file_name, overwrite, owner, repo, run_id (required)

github_generate_release_notes

Generates release notes without creating a release. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, repo, tag_name (required), target_commitish

github_get_branch

Returns one branch, including protection state and the head commit. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: branch (required), owner, repo

github_get_branch_protection

Reads protection rules for one branch (read-only in v2). Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: branch (required), owner, repo

github_get_commit_status

Returns the combined commit status and individual status contexts. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, page, per_page, ref (required), repo

github_get_issue

Returns one issue with labels, assignees and milestone. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: number (required), owner, repo

github_get_pull_request

Returns one pull request and current mergeability fields. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: number (required), owner, repo

github_get_pull_request_merge_preview

Read-only merge preview from GitHub: mergeable, mergeable_state, draft, head/base SHA and links. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: number (required), owner, repo

github_get_release

Returns one release and its assets. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, release_id (required), repo

github_get_repository

Repository metadata, permissions, visibility, default branch and web links. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, repo

github_get_topics

Returns repository topics. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, repo

github_get_workflow_run

Returns one workflow run. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, repo, run_id (required)

github_list_assignees

Lists users who can be assigned to issues. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, page, per_page, repo

github_list_branches

Lists GitHub branches and protection flags. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, page, per_page, protected, repo

github_list_check_runs

Lists GitHub Check runs for a commit SHA, branch or tag. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: check_name, filter, owner, page, per_page, ref (required), repo, status

github_list_collaborators

Lists repository collaborators and their permissions. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: affiliation, owner, page, per_page, permission, repo

github_list_issue_comments

Lists comments on an issue or pull request. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: number (required), owner, page, per_page, repo, since

github_list_issues

Lists repository issues. GitHub's endpoint can also contain pull requests; inspect pull_request in each item. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: assignee, creator, direction, labels, mentioned, milestone, owner, page, per_page, repo, since, sort, state

github_list_labels

Lists repository labels. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, page, per_page, repo

github_list_milestones

Lists repository milestones. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: direction, owner, page, per_page, repo, sort, state

github_list_notifications

Lists unread/all GitHub notifications for the bound repository or the whole account. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: all, before, owner, page, participating, per_page, repo, scope, since

github_list_pull_request_commits

Lists commits in a pull request. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: number (required), owner, page, per_page, repo

github_list_pull_request_files

Lists changed files and patches for a pull request. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: number (required), owner, page, per_page, repo

github_list_pull_request_reviews

Lists submitted pull-request reviews. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: number (required), owner, page, per_page, repo

github_list_pull_requests

Lists pull requests. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: base, direction, head, owner, page, per_page, repo, sort, state

github_list_release_assets

Lists assets attached to one release. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, page, per_page, release_id (required), repo

github_list_releases

Lists published and (with push access) draft releases. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, page, per_page, repo

github_list_repos

Lists the signed-in user's GitHub repositories (name, private flag, default branch).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: none

github_list_review_comments

Lists inline review comments for a pull request. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: number (required), owner, page, per_page, repo, since

github_list_tags

Lists Git tags in the GitHub repository. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, page, per_page, repo

github_list_workflow_artifacts

Lists artifacts created by a workflow run. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: name, owner, page, per_page, repo, run_id (required)

github_list_workflow_jobs

Lists jobs and steps in a workflow run. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: filter, owner, page, per_page, repo, run_id (required)

github_list_workflow_runs

Lists Actions workflow runs, optionally for one workflow ID/file. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: actor, branch, check_suite_id, created, event, exclude_pull_requests, head_sha, owner, page, per_page, repo, status, workflow_id

github_list_workflows

Lists repository Actions workflows. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: owner, page, per_page, repo

github_merge_pull_request

Merges a pull request. Force push is intentionally unavailable. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: commit_message, commit_title, confirm, dry_run, merge_method, number (required), owner, repo, sha

github_request_pull_request_reviewers

Requests user and/or team reviewers. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, number (required), owner, repo, reviewers, team_reviewers

github_rerun_workflow

Re-runs a workflow. This is separately confirmed because it can consume CI minutes. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: confirm, dry_run, enable_debug_logging, owner, repo, run_id (required)

github_resolve_review_thread

Resolves a review thread by GraphQL node ID.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run, thread_node_id (required)

github_submit_pull_request_review

Submits APPROVE, REQUEST_CHANGES, or COMMENT review. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: body, commit_id, confirm, dry_run, event (required), number (required), owner, repo

github_update_issue

Updates, closes or reopens an issue and its labels/assignees/milestone. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: assignees, body, confirm, dry_run, labels, milestone, number (required), owner, repo, state, state_reason, title

github_update_label

Updates or renames a repository label. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: color, confirm, current_name (required), description, dry_run, name, owner, repo

github_update_milestone

Updates, closes or reopens a milestone. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, description, dry_run, due_on, number (required), owner, repo, state, title

github_update_pull_request

Updates title/body/base/state of a pull request. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: base, body, confirm, dry_run, maintainer_can_modify, number (required), owner, repo, state, title

github_update_release

Updates a release; draft=false publishes an existing draft. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: body, confirm, draft, dry_run, make_latest, name, owner, prerelease, release_id (required), repo, tag_name, target_commitish

github_upload_release_asset

Uploads a local file as a release asset in a background job. Explicit confirmation is required. Optional owner/repo override the GitHub repository bound to the current project.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: confirm, content_type, dry_run, label, owner, path (required), release_id (required), repo

github_validate_token

Validates the stored GitHub token (or a provided one) by calling the API; returns the login. The token is never echoed or logged.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: token

help_search

Searches the built-in XTester help (UI/how-to docs). Returns pages + headings with deep-links ('page.html#anchor'). For strategy-theory knowledge use query_knowledge_base.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: limit, query (required)

import_history

Imports a local JSON/CSV m1 fixture for deterministic strategy tests. Safety boundary: the target symbol must start with XTTEST, confirm=true is mandatory, and an existing fixture is replaced only with replace_existing=true. Normal fixtures reject gaps and invalid OHLCV; allow_gaps / allow_invalid_bars must be enabled explicitly for negative tests. JSON fields: time,open,high,low,close,volume. CSV uses the same header.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: allow_gaps, allow_invalid_bars, confirm (required), exchange (required), format, market (required), replace_existing, source_path (required), symbol (required)

import_strategy_model

Validates a local immutable .xtmodel package with the pinned native runtime, then attaches it to the current project. Validation completes off the request thread before the project catalog is mutated. expected_id and confirm=true are mandatory; replacing a different artifact with the same logical ID additionally requires replace_existing=true. Returns metadata and hashes only, never model bytes or a local path.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm (required), expected_id (required), path (required), replace_existing

install_update

Downloads and installs the latest XTester update, then CLOSES XTester to apply it (this MCP process terminates; your client re-spawns the updated server on the next call). Only for installed (Velopack) builds. confirm=true is mandatory and is enforced by the server before any download, file write or process exit; dry_run=true returns the plan (current and target version, update source, restart requirement) without performing it.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: confirm, dry_run

job_cancel

Requests cancellation of a running background job. Args: jobId.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: jobId (required)

job_status

State (running/done/failed/cancelled), progress tail and result of a background job (from lab_* actions). Args: jobId.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: jobId (required)

lab_apply_to_project

Applies a Lab strategy version's code to the CURRENT project (overwrites strategy files, saves .xtproj). Refuses without confirm=true while the GUI is running (two-writers rule).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, taskId (required), versionNumber (required)

lab_backtest_version

Re-backtests an existing Lab version (no LLM). Optional exchange/market/symbol/timeframe/from/to override the research pair. Job result includes completed plus this attempt's current-Workspace Research Data runId/status. Returns a jobId; poll job_status. Args: taskId, versionNumber, [overrides].

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: exchange, from, market, order_book, symbol, taskId (required), timeframe, to, versionNumber (required)

lab_compare_versions

Compares two Lab strategy versions: structural genome diff + backtest metric deltas + walk-forward robustness + current-Workspace Research Data runId/status.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: taskId (required), trainer_control, versionA (required), versionB (required)

lab_create_research

Creates a new AI Research Lab task from a strategy specification (ТЗ). Returns taskId. No LLM/backtest yet — call lab_start_initial_strategy next. Args: title, spec.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=false
  • Parameters: spec (required), title (required)

lab_get_graph

Research graph of a Lab task as JSON: nodes (task/genome/version/hypothesis/experiment/backtest/knowledge) + edges + the version parent chain.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: taskId (required)

lab_get_research

Returns one Research Lab task in detail: status, spec, user directives, token usage, and a summary of ALL its strategy versions (metrics + fitness score). Each version also reports the latest Research Data runId/status visible in the current Workspace. Args: taskId (from lab_list_research).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: taskId (required)

lab_get_runtime_health

Runtime health of a Lab version's backtest: telemetry (bars/signals/filters/orders/exit reasons), degenerate-run verdict, promotable-candidate flag.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: taskId (required), versionNumber (required)

lab_get_version

Full detail of one strategy version in a Research Lab task: source code, backtest summaries (executive / diagnostic / market / runtime-log), metrics, equity curve, fitness breakdown, and current-Workspace Research Data run associations (including failed/cancelled attempts). Args: taskId, versionNumber.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: taskId (required), versionNumber (required)

lab_improve

Runs one improvement experiment on a version (LLM: hypothesis→mutate genome→code→backtest→verdict). Long-running → jobId; poll job_status. Args: taskId, versionNumber, instruction.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: instruction (required), taskId (required), versionNumber (required)

lab_list_library

Lists the Strategy Library — best strategy versions across ALL research tasks with fitness, profit factor, return %, drawdown %, win rate, trades. Args: promotableOnly? (only valid ≥10-trade candidates without runtime defects).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: promotableOnly

lab_list_research

Lists AI Research Lab tasks (the user's autonomous strategy-research experiments): id, title, status, project, last-updated. Read-only. Use lab_get_research for details of one.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: project

lab_render_graph

Renders the research graph as a self-contained interactive HTML file (same renderer as the GUI); returns the file path.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: taskId (required)

lab_research_until

Autonomous research loop from a version until target fitness or max iterations (LLM, can run for hours). Returns a jobId; poll job_status; cancel with job_cancel. tokenBudget is REQUIRED (safety cap on LLM spend). Args: taskId, versionNumber, targetFitness (0-100), maxIterations (1-500), tokenBudget.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true
  • Parameters: maxIterations (required), targetFitness (required), taskId (required), tokenBudget (required), versionNumber (required)

lab_run_walk_forward_job

Runs walk-forward analysis of a Lab version as a background job (full period + thirds, freshest = out-of-sample; needs >=120 days of data for OOS windows). Poll job_status.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: taskId (required), trainer_control, versionNumber (required)

lab_selftest

Runs the Research Lab selftests headless as a background job (storage smoke, dialog pipeline with fake LLM in temp store, blocker, plateau). Poll job_status.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: none

lab_start_initial_strategy

Generates the FIRST strategy version for a research task (LLM: contract→genome→code→backtest→fitness). Long-running → returns a jobId; poll job_status. Args: taskId.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: taskId (required)

launcher_backtest_bundle_job

Runs the deterministic headless backtest of a bundle file as a background job (the same byte-identical run the Launcher uses to verify a bundle). Poll job_status; report also lands in launcher_get_bundle_report. Optional parameter_overrides replace the named bundle values for this run only and are validated before OnInit.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: parameter_overrides, path (required)

launcher_export_bundle

Exports the current project as a Launcher bundle (JSON: sources, symbol, period, deposit; no secrets). Compile gate first (refuses on errors). Snapshot of the loaded project — unsaved GUI editor buffers are NOT included.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=false
  • Parameters: overwrite, path

launcher_get_bundle_report

Returns the report of the last completed bundle backtest in this session.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

launcher_load_bundle

Loads and summarizes a Launcher bundle file (validates schema).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: path (required)

launcher_preflight

Launcher readiness check of a bundle: sources, compile, warm-up data, exchange reachability (real network ping for DEX), live keys/risk limits when the bundle is live-mode. It may perform network/account reads, but never starts a worker or places, cancels, or closes orders. Success is not Testnet real-order acceptance and does not clear durable quarantine. Returns ready flag + check lines.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: path

list_conversion_runs

Lists conversion runs stored in the current isolated project workspace. Returns bounded metadata only: no source content and no machine-local paths. Git inputs use a generic source label rather than a repository name or location.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_data_coverage

Lists downloaded 1m candle history on disk with its date coverage (exchange/market/symbol + first/last candle date + approx count). Call before run_backtest / get_klines to see what data exists and its range.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_exchanges

Lists exchanges supported by the tester (with isDex flag).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_funding_coverage

Funding-rate history cache coverage: per cached symbol — points count and covered range.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_indicator_series

Lists every numeric series recorded during the LAST run_backtest: built-in indicators the strategy called (EMA/RSI/...) AND custom series it wrote via Plot(name, value) — e.g. market-phase labels. Use get_indicator_series to fetch the points (full resolution, paginated).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_indicators

Returns the FULL catalog of available indicators with their exact signatures. Use when choosing an indicator ('what volatility indicators exist?') or when unsure which indicators are available at all.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_llm_models

Lists models of an LLM provider (live API when supported, else the configured list).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: providerId

list_llm_providers

Configured LLM providers (REDACTED: only hasKey flag — keys are never returned).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_markets

Lists market types (Spot, FuturesUSDT, FuturesCoin, ...). Per-exchange support varies — verify with list_symbols for a concrete exchange+market.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_project_workspaces

Lists XTester project workspaces previously opened on this machine. Returns project name, the short windowTag shown in the GUI title, kind, external ID/origin, stable workspace ID, optional source .xtproj, working snapshot, last activity, and whether the matching GUI or an MCP agent is active. This is the mandatory first call when the MCP server starts without an explicit project. The general catalog is capped; pass an exact workspace_id to look up a known workspace independently of that cap. It never scans the whole disk.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: workspace_id

list_research_datasets

Returns the latest (or an exact run_id) Research Data manifest plus a bounded page of retained run summaries from the current bound XTester workspace, including actual status, partial flags, datasets, and verified absolute local paths. It never accepts a workspace root or arbitrary path.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: run_id, run_limit, run_offset

list_simulation_breakpoints

Lists the project's simulation time-breakpoints. They fire only when breakpoints_enabled=true in simulation_configure.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_spec_versions

Lists specification versions (newest first): number, created, source, note, model.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_strategy_ai_slots

Lists logical Strategy AI slots of the active launch profile. Returns bounded metadata, limits, replay mode and readiness only. It never returns provider/model identity, endpoint, headers, API keys, prompts, responses, strategy values or replay contents. Use an exact id to inspect one slot before generating AiProviders.Open code.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: id, limit, offset

list_strategy_api

Structured JSON catalog of the API available to strategy code: interfaces (IStrategy, IApi, StrategyContext, StrategyFinishContext, IStrategyRuntime, IIndicators, IStrategyParams, IMarketData, ILogger, IKline, ...), concrete models (SymbolKey, PlaceOrder, Order, Position, Balance, Trade) and enums (OrderSide, OrderType, PositionSide, ...). Use get_strategy_api_doc for per-type details and XML docs.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_strategy_files

Lists all source files of the currently active trading strategy. Use this first when exploring an unknown strategy.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_strategy_imports

Lists the default imports (auto-usings) the compiler automatically injects into every strategy file, plus ambient symbols (time/Now). Do NOT write these usings yourself — they are already there.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_strategy_models

Lists the host-managed ONNX model contracts attached to the current strategy project. Returns only logical IDs, pinned input/feature/output schemas, hashes and training boundaries; never model bytes, local paths, feature values or predictions. Results are bounded and paged. First list models, then pass an exact id and follow nextFeatureOffset until null before writing a Models.Open/Predict call.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: feature_limit, feature_offset, id, model_limit, model_offset

list_strategy_tree

Returns the strategy's virtual file tree (folders + files, incl. disabled files and nested paths like 'Indicators/MyAtr.cs') as JSON: { flat, folders, tree }. The strategy lives inside the .xtproj — these are virtual paths, not files on disk.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_strategy_versions

Lists saved strategy versions with timestamps, source (Manual/CouncilGenerated/AiAssistedEdit/...) and a one-line note. Useful before potentially destructive changes to know rollback points.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

list_symbols

Symbol catalog for exchange+market (tickSize/stepSize/minNotional/...). Served from the persisted cache; a cold cache hits the exchange REST API (may take seconds). An empty list can mean either 'no symbols' or 'network failure'.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true
  • Parameters: exchange (required), limit, market (required), query

load_history_to_memory

Loads the stored 1m history file of exchange+market+symbol into RAM (required before the engine can read it) and remembers the choice in the project. If there is no stored file — call download_history first.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: exchange (required), market (required), symbol (required)

move_strategy_file

Moves or renames a strategy file to another virtual path (e.g. 'helpers.cs' → 'Lib/helpers.cs'). Cannot move main.cs. Fails if the source is missing or the target path already exists.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: from (required), to (required)

open_project_workspace

Opens an existing .xtproj by absolute path, registers its workspace, and locks this MCP process to it. Use only after the user chose 'open another project'; confirm=true is mandatory. Existing workspace autosave wins over an older source file.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: confirm (required), path (required)

probe_llm_model_job

Deep-probes one model (JSON mode, streaming, latency, output cap — 4 live tests, 30s+) as a background job. Poll job_status.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: model (required), providerId

proxy_get_runtime

Proxy subsystem state: static config (enabled, pool size/health, limits — WITHOUT credentials) + runtime download counters of THIS process (the GUI's live counters are not visible here; use get_gui_state for the GUI session).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

query_knowledge_base

Searches the local knowledge base under .aicopilot/knowledge/ for relevant snippets. Use when you need detailed reference: API docs, indicator details, common patterns, pitfalls.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: question (required), top_k

read_research_dataset

Resolves one Research Data CSV from the current bound XTester workspace. With limit=0 (default), returns only its verified absolute path and metadata. With limit=1..10000, also returns columns and a bounded page of rows. Omit run_id to use the latest run. It never accepts a workspace root or arbitrary path.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: limit, name (required), offset, run_id

read_strategy_file

Returns the full text content of a strategy source file. Always call this before applying any patch — the model needs the actual current state.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: filename (required)

remove_strategy_model

Detaches the model artifact with the exact logical ID from the current project catalog (same operation as the GUI model manager's delete). confirm=true is mandatory. Files on disk are not touched; strategy code still opening the ID fails closed on its next run. Blocked while a simulation or Research Lab runs.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm (required), id (required)

rename_strategy_file

Renames a strategy source file. Note: any references in OTHER files won't be auto-updated — use search_strategy_code + apply_strategy_patch to fix them.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: new_name (required), old_name (required)

rename_strategy_folder

Renames or moves a virtual strategy folder, cascading ALL files and subfolders under it to the new prefix. Fails if the folder doesn't exist, the paths are equal, or a target file path would collide with an existing file.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: new_path (required), old_path (required)

rename_strategy_symbol

Semantic SYMBOL rename via Roslyn Renamer (NOT a file rename — that's rename_strategy_file). Position the cursor on the symbol. apply=false returns the edits; apply=true rewrites the file. Note: edits cover the active file only (editor engine v1).

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=false
  • Parameters: apply, column (required), filename (required), line (required), new_name (required)

render_backtest_chart

Renders the LAST backtest as PNG: price chart with trade markers + order levels over the tested period, with the equity curve panel below. Requires a completed run_backtest in this session.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: height, output, width

render_price_chart

Renders a candlestick PNG chart (offscreen, not a GUI screenshot): candles + open-order levels + trade markers + indicator lines the strategy computed. Default symbol/window = current simulation selection / loaded data tail. output: 'file' (PNG path — read it), 'base64', or 'image' (inline image block).

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: bars_count, exchange, from, height, indicators, market, output, show_all_indicators, show_orders, show_trade_markers, symbol, timeframe, title, to, width

render_statistics_chart

Renders a statistics chart of the LAST backtest as PNG. kind: equity | drawdown | monthly_returns | pnl_distribution | rolling_sharpe | rolling_return_cagr | returns_distribution | cumulative_pnl_by_trade | exposure_over_time.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: height, kind (required), output, width

repair_data_gaps

Heals internal gaps in stored 1m history: detects gaps, re-downloads each gap window from the exchange and merges the candles into the stored series (background job → poll job_status). Gaps the exchange confirms empty (no trades / maintenance) are recorded in a persistent gap registry and skipped on future runs (shared with the GUI Data window). Args: exchange, market, symbol, from?, to?, max_gaps (default 20), recheck_known?.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: exchange (required), from, market (required), max_gaps, recheck_known, symbol (required), to

repair_dex_fee_migration

Explicit, confirmed repair of the historical x100 DEX fee defect. Trading fees are a numeric simulation input, so nothing is repaired silently and no ordinary load, save or read path touches them. dry_run=true (default behaviour when confirm is absent) reports each candidate with its exchange, market, field, value before and after, and the reason, and changes nothing. confirm=true repairs only values consistent with the historical defect; a value large enough to be an ordinary hand-typed percent is never changed and is reported for manual review instead. The repair is exactly-once by construction: a repaired value falls below the candidate threshold, so a second run finds nothing.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, dry_run

replace_simulation_breakpoints

Replaces ALL simulation breakpoints with the given list (empty list = clear all).

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=false
  • Parameters: breakpoints (required)

restore_spec_version

Restores a spec version by number. The current spec is first auto-saved as a Manual backup version (so the counter bumps by one). confirm=true required while GUI runs.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=false
  • Parameters: confirm, number (required)

restore_strategy_version

Restores the strategy from a previously saved StrategyVersion. DESTRUCTIVE: the current sources are overwritten and files absent from the version are removed. Before overwriting, the current state is snapshotted as a new backup version, and a failed restore rolls back instead of leaving a partial state. confirm=true is mandatory and is enforced by the MCP server before anything changes, so a call without it changes nothing.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, version_id (required)

run_backtest

Compiles and backtests the CURRENT project strategy headless. Any of exchange/market/symbol/timeframe/from/to/deposit overrides the Simulator config; unset args fall back to it. Runs in Bar mode by default (deterministic candle stepping); pass step_mode='Tick' only if you have tick data. parameter_overrides maps exact C# [Parameter] property names to scalar values and is validated before OnInit; an unknown, duplicate, invalid or out-of-range value blocks the run. Streams live progress via MCP notifications. Returns metrics (return %, drawdown %, profit factor, win rate, trades, orders); then call get_backtest_trades / get_equity_curve for details. One backtest at a time per process.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=false
  • Parameters: context_symbols, deposit, exchange, from, market, order_book, parameter_overrides, step_mode, symbol, timeframe, to

save_spec_version

Snapshots the CURRENT specification as a new spec version (dedupes against the last one).

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: note

save_strategy_version

Saves a snapshot of the current strategy state as a new StrategyVersion (Source=AiAssistedEdit). Call BEFORE risky multi-file edits and AFTER a task is successfully completed.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: note (required)

search_strategy_code

Searches strategy source files using a .NET regex. Returns matching lines with file:line prefix. Use to find references, occurrences of names, TODOs, etc.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: filenames, regex (required)

search_symbols

Searches the symbol catalog of exchange+market by substring (symbol/baseAsset/quoteAsset).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: exchange (required), limit, market (required), query (required)

select_project_workspace

Locks this MCP process to one workspace returned by list_project_workspaces. confirm=true means the user selected or explicitly named this exact project. Selection is idempotent for the same workspace and cannot switch to another workspace inside this process.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: confirm (required), workspace_id (required)

set_launch_mode

Sets the strategy launch mode (Debug|Release). Release disables safety instrumentation AND code breakpoints — an infinite loop in strategy code will hang headless runs.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, mode (required)

set_order_book_settings

Writes synthetic order book settings through the same validation/persistence path as the GUI. profile edits the ACTIVE launch profile semantics (Realistic/Teacher, α, seed policy); engine edits machine-local engine settings. With a prepared/running session the response carries restartRequired=true — semantics apply on the next prepare/fresh start. Requires confirm=true.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm (required), engine, profile

set_project_metadata

Updates project name/description/version. Metadata participates in the live-sync three-way merge, so an open GUI picks the change up instead of overwriting it; confirm=true is still required while the GUI is running (two-writers rule).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, description, name, version

set_simulation_settings

Updates simulation settings SESSION-SCOPED (in-memory of this MCP process; never persisted to the user's app.config — two-writers rule). Affects subsequent run_backtest defaults in this session. For a full interactive session prefer simulation_configure.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: exchange, from, market, reset_state_before_start, step_mode, symbol, timeframe, to

set_strategy_file_enabled

Enables or disables a strategy source file. Disabled files are kept in the project but excluded from compilation. Cannot disable main.cs (it's always enabled).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: enabled (required), filename (required)

simulation_configure

Configures the simulation session IN-MEMORY (never persisted to user settings): symbol, period, deposit, step mode (Bar|Tick), auto-pause flags, breakpoints_enabled. Visualization is forced Headless. Follow with simulation_prepare_fresh_start.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: breakpoints_enabled, deposit, exchange, from, market, order_book, pause_on_error, pause_on_order_filled, pause_on_order_placed, pause_on_position_closed, pause_on_position_opened, step_mode, symbol, tick_time_seconds, timeframe, to

simulation_get_events

Execution events of the session (OrderPlaced/Filled/Rejected, PositionOpened/Closed, StopTriggered, Error). Ring buffer of the last 512 events.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: kind, limit, offset

simulation_get_execution_stats

Execution counters of the current simulation session: steps, OnBar calls, orders placed/cancelled/filled, trades, balance warnings, buffer sizes.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

simulation_get_fills

Trade fills of the current session (chronological, paginated).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: limit, offset

simulation_get_order_book_bid_ask

Best bid/ask, spread (price and bps), model time and snapshot revision of the synthetic book.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: exchange, market, symbol

simulation_get_order_book_events

Public synthetic book events (Add/Cancel/Modify/Trade) after a sequence cursor. Pass the simulation_instance_token from a previous response: a token from an older run returns stale_simulation_token with the current token instead of applying the cursor.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: after_sequence, exchange, limit, market, simulation_instance_token, symbol

simulation_get_order_book_level

One aggregated synthetic book level by exact price (null when the price has no level).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: exchange, market, price (required), symbol

simulation_get_order_book_snapshot

Synthetic order book snapshot of the current interactive simulation: bids/asks with cumulative depth, reference/last-trade price, coverage, aggregates (imbalance, walls) and the trainer mark. Read-only: never activates the runtime.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: depth, exchange, market, symbol

simulation_get_state

Interactive simulation state: running/paused/stopped, sim time, symbol/timeframe, pause reason (time-breakpoint hit / auto-pause event / code breakpoint / missing data), execution counters, open positions.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

simulation_get_valuation_curve

Equity/exposure valuation curve of the current session (even-thinned to max_points).

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: max_points

simulation_pause

Pauses the running simulation (keeps position; resume with simulation_start_job or step). Also flushes the run's buffered Research Data rows to disk, so a paused run can be read without a read tool having to write anything.

  • Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

simulation_prepare_fresh_start

Prepares a FRESH simulation session: compiles the strategy if needed, loads history, clamps the period to data, restores account/strategy baselines and resets to period start. After this use simulation_step or simulation_start_job.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: none

simulation_start_job

Starts/resumes the simulation as a background job (poll job_status). Runs until the period end, a time-breakpoint, an auto-pause event or job_cancel (= pause). Resume keeps the paused position; a finished/unprepared session is prepared fresh automatically. Passing parameter_overrides forces a fresh preparation and validates the complete [Parameter] map before OnInit; omit it to resume unchanged.

  • Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true
  • Parameters: parameter_overrides

simulation_step

Advances the simulation step-by-step (Bar mode: one bar per step). Stops early on time-breakpoint / auto-pause / code breakpoint / missing data. First step pays Strategy.OnInit. Auto-prepares a fresh session when needed.

  • Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true
  • Parameters: count

simulation_stop

Stops the simulation and resets the runtime to period start (accounts/strategy baseline restored, stats wiped). Snapshot events/fills/valuation BEFORE stopping if you need them.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: none

sync_loaded_market_data

Synchronizes RAM market data with the active run's symbol requirements: loads missing stored files, optionally unloads unused symbols (same step the engine does before a run).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: unload_unused

sync_trading_fees

Pulls real maker/taker trading fees from the exchange into the account's simulation profile. NETWORK; private endpoints need credentials configured in Accounts (secrets are never returned). Default applies IN-MEMORY only (affects backtests of this process); persist=true also writes user settings (may race a live GUI — prefer doing it in GUI).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true
  • Parameters: exchange (required), market (required), persist, reference_symbol

unload_history_from_memory

Unloads a symbol's history from RAM and remembers the choice in the project.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: exchange (required), market (required), symbol (required)

update_simulation_breakpoint

Updates a breakpoint's time, label and/or enabled flag by id.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: enabled, id (required), label, time

validate_llm_provider

Live-validates an LLM provider (network). Read-only: validation status is NOT persisted.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true
  • Parameters: providerId

validate_strategy_environment_usage

Runs the sandbox security analyzer (XTS0101–XTS0105: filesystem/network/processes/reflection/unsafe/DllImport bans) over ALL enabled strategy files WITHOUT emitting or loading an assembly. Fast pre-flight check before compile_strategy.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: none

validate_strategy_file_path

Validates a virtual strategy path BEFORE mutating calls: rejects absolute paths and '..' segments, normalizes '\' to '/', enforces .cs for files. kind='file' (default) or 'folder'.

  • Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=false
  • Parameters: kind, path (required)

write_project_spec

Replaces the project specification (markdown) and records it as a new spec version. Refuses without confirm=true while the GUI is running (two-writers rule).

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: confirm, markdown (required), note

write_strategy_file

Replaces the ENTIRE content of an existing strategy file. Use only for large refactorings where a patch would be too noisy. Prefer apply_strategy_patch for small edits.

  • Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=false
  • Parameters: content (required), filename (required), rationale (required)

Annotations are behavioural hints, not a guarantee of runtime enforcement. Do not treat any tool as safe to invoke automatically based on its annotation alone — the application's own runtime checks are authoritative. The real consent and safety mechanisms are described on the Security.

See also: Install · Examples · Security.