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).
- Release version: 0.0.89 (status: stable)
- Catalog profile:
canonical - Immutable release: v.0.0.89
- Catalog SHA-256:
81c6515bb234d37af486f3eaacb1d744b3ed3bd39e4d7d6a29bd2143b29c4c8f - Machine catalog: https://xtester.pw/mcp/tools.json · https://xtester.pw/mcp/releases/0.0.89/tools.json · release metadata
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.