MCP server exposing Freqtrade backtesting, hyperopt and data tools to LLM clients, plus a LangGraph agent for autonomous strategy development
The Freqtrade MCP server has significant definition quality gaps. While 12 tools are registered with names and basic descriptions, the implementation lacks comprehensive schema documentation, parameter descriptions, and proper error handling guidance. The provided source code is incomplete (truncated at line 116 of server.py), preventing full verification of tool registration, input validation, and error recovery patterns. Based on visible tool specifications, most tools have adequate naming (verb-noun pattern: download_candles, backtest_strategy, etc.), but descriptions are generic and lack context about when to use each tool vs. alternatives. Parameter schemas are partially visible for only 2 tools (download_candles and backtest_strategy); the remaining 10 tools show no parameter specifications in the provided code. Output schemas are not documented. Error handling sections are absent from all visible tool descriptions.
Run backtest for a strategy with specified parameters
Generate a Freqtrade configuration file
Create a complete trading strategy file from specification
Create a strategy skeleton/template for development
Create a new Freqtrade user directory structure
Download historical candle data and return cache filenames (format: symbol-tf-timerange.json)
Extract and parse backtest result data from JSON exports
10 of 12 tools have no visible input schema definitions in provided source code. Tools hyperopt_strategy, list_results, get_result, create_userdir, create_config, create_strategy, create_strategy_wireframe, extract_backtest_data, extract_hyperopt_data have description-only specs with no parameter type/constraint documentation.
Tool descriptions are minimal and generic. 'List available backtest and hyperopt results' (list_results), 'Get detailed results from a specific backtest or hyperopt run' (get_result) lack WHEN-to-use context, dependencies, and expected output format.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 38 | <=2025-11-25 | v2 |
Extract and parse hyperopt result data from JSON exports
Get detailed results from a specific backtest or hyperopt run
Run hyperparameter optimization for a strategy
List available backtest and hyperopt results
Search through backtest and hyperopt results with filters and ranking
No visible error handling or recovery guidance in any tool description. Tools do not indicate what errors are retryable, what indicates user misconfiguration, or what actionable steps an LLM should take on failure.
Parameter descriptions incomplete for visible schemas. download_candles params 'pairs', 'timeframes', 'date_range' have brief descriptions but lack format constraints, examples, or relationships (e.g., 'top15' is ambiguous, does it refer to by market cap? By volume?). backtest_strategy stake_amount lacks min/max bounds.
No output schemas documented for any tool. LLMs cannot predict what fields to expect (e.g., does list_results return pagination info? count? total_count? next_cursor?).
Source code truncation prevents verification of tool registration in src/server.py. Only import statements and partial class definition visible; _setup_handlers() and actual tool handler implementations not shown. Cannot verify if tools are properly registered with Server.add_tool() or equivalent.
Ambiguous parameter semantics. 'date_range' parameter in download_candles accepts 'natural language' (e.g., 'last year', 'september', 'last 3 months') but no documentation on exact parsing behavior, date boundaries (UTC? local?), or handling of ambiguous inputs like 'september' in a year context.
No documented relationship between tools. E.g., download_candles returns 'cache filenames (format: symbol-tf-timerange.json)', do backtest_strategy and hyperopt_strategy accept these filenames as input? How do extracted results (extract_backtest_data, extract_hyperopt_data) chain with search_results? Tool composition not evident.