mt5-quant 1.32.1

MCP server for MT5 strategy development on macOS/Linux
use serde_json::{json, Value};

pub fn tool_run_optimization() -> Value {
    json!({
        "name": "run_optimization",
        "description": "Launch MT5 genetic parameter optimization in fire-and-forget mode. Returns immediately with job_id. Use get_optimization_status to poll for completion. Optimization typically runs for 2-6 hours.",
        "inputSchema": {
            "type": "object",
            "required": ["expert", "set_file", "from_date", "to_date"],
            "properties": {
                "expert": { "type": "string", "description": "EA name without path or extension" },
                "set_file": { "type": "string", "description": "Path to .set file with parameter ranges for optimization" },
                "symbol": { "type": "string", "description": "Trading symbol (default: XAUUSD)" },
                "from_date": { "type": "string", "description": "Start date YYYY.MM.DD" },
                "to_date": { "type": "string", "description": "End date YYYY.MM.DD" },
                "deposit": { "type": "integer", "description": "Initial deposit (default: 10000)" }
            }
        }
    })
}

pub fn tool_get_optimization_status() -> Value {
    json!({
        "name": "get_optimization_status",
        "description": "Check progress of a running optimization job. Poll periodically until status shows 'completed'.",
        "inputSchema": {
            "type": "object",
            "required": ["job_id"],
            "properties": {
                "job_id": { "type": "string", "description": "Job ID returned by run_optimization" }
            }
        }
    })
}

pub fn tool_get_optimization_results() -> Value {
    json!({
        "name": "get_optimization_results",
        "description": "Parse completed MT5 optimization results and find best parameter combinations",
        "inputSchema": {
            "type": "object",
            "properties": {
                "job_id": { "type": "string", "description": "Job ID to parse results for" },
                "report_file": { "type": "string", "description": "Direct path to optimization report XML file" },
                "dd_threshold": { "type": "number", "description": "Max drawdown percentage filter" },
                "top_n": { "type": "integer", "description": "Number of top passes to return (default: 30)" }
            }
        }
    })
}

pub fn tool_list_jobs() -> Value {
    json!({
        "name": "list_jobs",
        "description": "List all running and completed optimization jobs with their status",
        "inputSchema": {
            "type": "object"
        }
    })
}