6ce8808948
New debugging/diagnostics tools for crash investigation: - diagnose_wine: Check Wine installation and prefix health - get_mt5_logs: Get terminal/tester/metaeditor logs - search_mt5_errors: Search logs for error patterns - check_mt5_process: Check MT5 process status - kill_mt5_process: Kill stuck MT5 processes - check_system_resources: Check disk/memory/CPU - validate_mt5_config: Validate MT5 configuration - get_wine_prefix_info: Wine prefix details - get_backtest_crash_info: Investigate backtest failures Total tools: 85 Documentation updated in README.md and MCP_TOOLS.md
281 lines
10 KiB
Rust
281 lines
10 KiB
Rust
use serde_json::{json, Value};
|
|
|
|
pub fn tool_get_latest_report() -> Value {
|
|
json!({
|
|
"name": "get_latest_report",
|
|
"description": "Get the latest backtest report with full details and equity chart image",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"include_chart": { "type": "boolean", "description": "Include equity chart as base64 PNG (default: true)", "default": true }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_list_reports() -> Value {
|
|
json!({
|
|
"name": "list_reports",
|
|
"description": "List most recent backtest reports from the central registry (SQLite). Returns id, metrics, set file, chart paths.",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"limit": { "type": "integer", "description": "Max results (default 30)" }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_search_reports() -> Value {
|
|
json!({
|
|
"name": "search_reports",
|
|
"description": "Search backtest history with filters. All filters are optional and combinable.",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"expert": { "type": "string", "description": "EA name substring match" },
|
|
"symbol": { "type": "string", "description": "Exact symbol, e.g. XAUUSD" },
|
|
"timeframe": { "type": "string", "description": "Exact timeframe, e.g. M5" },
|
|
"after": { "type": "string", "description": "ISO8601 date — only reports created after this" },
|
|
"min_profit": { "type": "number", "description": "Minimum net profit" },
|
|
"max_dd": { "type": "number", "description": "Maximum drawdown %" },
|
|
"verdict": { "type": "string", "description": "Only reports with this verdict (pass, fail, marginal)" },
|
|
"limit": { "type": "integer", "default": 50 }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_tail_log() -> Value {
|
|
json!({
|
|
"name": "tail_log",
|
|
"description": "Stream the last N lines of a job log",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"job_id": { "type": "string" },
|
|
"file": { "type": "string" },
|
|
"lines": { "type": "integer", "default": 50 }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_archive_report() -> Value {
|
|
json!({
|
|
"name": "archive_report",
|
|
"description": "Compress a backtest report directory to tar.gz",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"required": ["report_dir"],
|
|
"properties": {
|
|
"report_dir": { "type": "string" },
|
|
"delete_after": { "type": "boolean" }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_archive_all_reports() -> Value {
|
|
json!({
|
|
"name": "archive_all_reports",
|
|
"description": "Archive all old reports except the N most recent",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"keep_last": { "type": "integer" }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_get_history() -> Value {
|
|
json!({
|
|
"name": "get_history",
|
|
"description": "Retrieve backtest history for an EA or symbol",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"ea": { "type": "string" },
|
|
"symbol": { "type": "string" },
|
|
"verdict": { "type": "string" },
|
|
"limit": { "type": "integer" }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_promote_to_baseline() -> Value {
|
|
json!({
|
|
"name": "promote_to_baseline",
|
|
"description": "Copy report metrics to config/baseline.json for future comparisons",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"required": ["report_dir"],
|
|
"properties": {
|
|
"report_dir": { "type": "string" }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_annotate_history() -> Value {
|
|
json!({
|
|
"name": "annotate_history",
|
|
"description": "Add notes, tags or verdict to a history entry",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"required": ["history_id"],
|
|
"properties": {
|
|
"history_id": { "type": "string" },
|
|
"notes": { "type": "string" },
|
|
"tags": { "type": "array", "items": { "type": "string" } },
|
|
"verdict": { "type": "string", "enum": ["pass", "fail", "marginal"] }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_prune_reports() -> Value {
|
|
json!({
|
|
"name": "prune_reports",
|
|
"description": "Delete old backtest report directories",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"keep_last": { "type": "integer" }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_get_report_by_id() -> Value {
|
|
json!({
|
|
"name": "get_report_by_id",
|
|
"description": "Get a specific report by its ID with full details and optional equity chart",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"required": ["id"],
|
|
"properties": {
|
|
"id": { "type": "string", "description": "Report ID (from list_reports or search_reports)" },
|
|
"include_chart": { "type": "boolean", "description": "Include equity chart as base64 PNG (default: true)", "default": true }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_get_reports_summary() -> Value {
|
|
json!({
|
|
"name": "get_reports_summary",
|
|
"description": "Get aggregate statistics across reports - counts, averages by EA/symbol/timeframe/verdict",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"expert": { "type": "string", "description": "Filter by EA name substring" },
|
|
"symbol": { "type": "string", "description": "Filter by exact symbol" },
|
|
"timeframe": { "type": "string", "description": "Filter by exact timeframe" },
|
|
"verdict": { "type": "string", "description": "Filter by verdict (pass/fail/marginal)" }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_get_best_reports() -> Value {
|
|
json!({
|
|
"name": "get_best_reports",
|
|
"description": "Get top N reports sorted by performance metric (profit factor, win rate, drawdown, etc.)",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"sort_by": { "type": "string", "enum": ["net_profit", "profit_factor", "max_dd_pct", "win_rate_pct", "sharpe_ratio", "recovery_factor", "total_trades"], "default": "profit_factor", "description": "Metric to sort by" },
|
|
"order": { "type": "string", "enum": ["asc", "desc"], "default": "desc", "description": "Sort order (use 'asc' for drawdown, 'desc' for profit)" },
|
|
"limit": { "type": "integer", "default": 10, "description": "Number of reports to return" },
|
|
"expert": { "type": "string", "description": "Filter by EA name substring" },
|
|
"symbol": { "type": "string", "description": "Filter by exact symbol" },
|
|
"timeframe": { "type": "string", "description": "Filter by exact timeframe" },
|
|
"verdict": { "type": "string", "description": "Filter by verdict" }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_search_reports_by_tags() -> Value {
|
|
json!({
|
|
"name": "search_reports_by_tags",
|
|
"description": "Search reports by tags - at least one tag must match (OR logic)",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"required": ["tags"],
|
|
"properties": {
|
|
"tags": { "type": "array", "items": { "type": "string" }, "description": "Tags to search for (e.g., ['production', 'verified'])" },
|
|
"limit": { "type": "integer", "default": 50 }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_search_reports_by_date_range() -> Value {
|
|
json!({
|
|
"name": "search_reports_by_date_range",
|
|
"description": "Search reports by backtest date range (from_date and to_date fields)",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"from_start": { "type": "string", "description": "From date >= this (YYYY.MM.DD)" },
|
|
"from_end": { "type": "string", "description": "From date <= this (YYYY.MM.DD)" },
|
|
"to_start": { "type": "string", "description": "To date >= this (YYYY.MM.DD)" },
|
|
"to_end": { "type": "string", "description": "To date <= this (YYYY.MM.DD)" },
|
|
"limit": { "type": "integer", "default": 50 }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_search_reports_by_notes() -> Value {
|
|
json!({
|
|
"name": "search_reports_by_notes",
|
|
"description": "Full-text search in report notes field (case-insensitive LIKE search)",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"required": ["query"],
|
|
"properties": {
|
|
"query": { "type": "string", "description": "Search text (partial match)" },
|
|
"limit": { "type": "integer", "default": 50 }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_get_reports_by_set_file() -> Value {
|
|
json!({
|
|
"name": "get_reports_by_set_file",
|
|
"description": "Find all reports that used a specific .set parameter file",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"required": ["set_file"],
|
|
"properties": {
|
|
"set_file": { "type": "string", "description": "Set filename or partial path to match" },
|
|
"limit": { "type": "integer", "default": 50 }
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
pub fn tool_get_comparable_reports() -> Value {
|
|
json!({
|
|
"name": "get_comparable_reports",
|
|
"description": "Find reports comparable to a given report (same EA, symbol, timeframe) - useful for before/after analysis",
|
|
"inputSchema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"report_id": { "type": "string", "description": "Reference report ID (if provided, uses its expert/symbol/timeframe)" },
|
|
"expert": { "type": "string", "description": "EA name (required if report_id not provided)" },
|
|
"symbol": { "type": "string", "description": "Symbol (required if report_id not provided)" },
|
|
"timeframe": { "type": "string", "description": "Timeframe (required if report_id not provided)" },
|
|
"exclude_id": { "type": "string", "description": "Exclude this report ID from results" },
|
|
"limit": { "type": "integer", "default": 20 }
|
|
}
|
|
}
|
|
})
|
|
}
|