Connect your MetaTrader 5 terminal to Claude, Cursor, and any AI tool
27 tools with consistent naming (verb_noun pattern) and descriptions present. However, descriptions are often too long (200-400 chars, exceeding the 10-200 char sweet spot for LLM parsing) and lack actionable constraints. Input schemas are properly typed but parameter descriptions are generic. Output schemas are entirely undocumented, LLMs cannot infer what fields to expect from responses. Error handling is minimal; no recovery guidance. Destructive tools (place_order, close_position, modify_position) lack confirmation patterns or dry-run support. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification.
Validate an order WITHOUT executing it. Checks margin, limits, and restrictions. Args: symbol: Instrument (e.g. EURUSD). direction: "buy" or "sell". volume: Lot size. sl: Stop loss price (optional). tp: Take profit price (optional). Returns: Whether the order would succeed, required margin, and any errors.
Close an open position by ticket number. REQUIRES: MT5_MCP_TRADING_ENABLED=true environment variable. Args: ticket: Position ticket number (from get_positions). Returns: Close result or error.
Get account information: balance, equity, margin, and connection details. Returns: Account balance, equity, free margin, leverage, and connection info.
Calculate ATR (Average True Range). Args: symbol: Instrument (e.g. EURUSD). timeframe: Timeframe in minutes. length: ATR period (default 14). Returns: Current ATR value and recent history.
Fetch OHLCV bars from MT5 terminal. Args: symbol: Instrument name (e.g. EURUSD, XAUUSD). timeframe: Timeframe in minutes (1, 5, 15, 30, 60, 240, 1440, 10080, 43200). limit: Number of bars (default 500, max 10000). Returns: Bar count, last 5 bars with OHLCV, and price range summary.
Output schemas completely undocumented. No tool returns a documented schema, LLMs cannot infer response structure, field names, or types. Forces agents to guess what data is available.
Destructive tools (place_order, close_position, modify_position) lack confirmation/dry-run patterns. No way for agents to validate intent before executing irreversible trades. High risk of accidental losses.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Calculate Bollinger Bands. Args: symbol: Instrument (e.g. EURUSD). timeframe: Timeframe in minutes. length: SMA period (default 20). std_dev: Standard deviation multiplier (default 2.0). Returns: Upper, middle (SMA), and lower bands with price position.
Calculate EMA (Exponential Moving Average). Args: symbol: Instrument (e.g. EURUSD). timeframe: Timeframe in minutes. length: EMA period (default 20). Returns: Current EMA value and price position relative to it.
Read the MT5 terminal journal (connection events, errors, etc.). Args: lines_count: Number of lines from the end (default 30, max 100). Returns: Recent terminal journal entries.
Calculate MACD (Moving Average Convergence Divergence). Args: symbol: Instrument (e.g. EURUSD). timeframe: Timeframe in minutes. fast: Fast EMA period (default 12). slow: Slow EMA period (default 26). signal: Signal EMA period (default 9). Returns: MACD line, signal line, histogram, and crossover status.
Get pending orders (limit, stop, etc.). Returns: List of pending orders with type, price, and volume.
Break down P&L by trading symbol/instrument. Args: days: Period to analyze (default 30, max 365). Returns: P&L, trade count, and win rate per symbol, sorted by profit.
Break down P&L by day of week and hour of day. Helps identify when you trade best/worst. Args: days: Period to analyze (default 30, max 365). Returns: P&L and win rate by day of week and by hour.
Get open positions. Args: symbol: Filter by symbol (optional). Empty = all positions. Returns: List of open positions with entry price, P&L, and volume.
Calculate RSI (Relative Strength Index) using Wilder's smoothing. Args: symbol: Instrument (e.g. EURUSD). timeframe: Timeframe in minutes. length: RSI period (default 14). Returns: Current RSI value, zone, and recent history.
Calculate SMA (Simple Moving Average). Args: symbol: Instrument (e.g. EURUSD). timeframe: Timeframe in minutes. length: SMA period (default 20). Returns: Current SMA value and price position relative to it.
Get detailed information about a symbol. Args: symbol: Instrument name (e.g. EURUSD). Returns: Symbol details: digits, point, spread, lot size, trade mode, etc.
List available symbols in MT5 terminal. Args: filter_text: Optional filter (e.g. "USD", "BTC", "XAU"). Empty = all visible symbols. Returns: List of available symbols with their descriptions.
Get MT5 terminal information: version, build, paths, and trading status. Returns: Terminal version, data path, expert trading status, and connection info.
Get the latest tick (bid/ask) for a symbol. Args: symbol: Instrument name (e.g. EURUSD, XAUUSD, BTCUSD). Returns: Current bid, ask, spread, and timestamp.
Get historical tick-by-tick data for spread and timing analysis. Args: symbol: Instrument (e.g. EURUSD). count: Number of ticks (default 1000, max 10000). Returns: Tick statistics: avg/min/max spread, tick frequency, and volume.
Get closed trades history. Args: days: Number of days to look back (default 7, max 90). Returns: List of closed trades with entry/exit prices and P&L.
Calculate trading performance statistics. Args: days: Period to analyze (default 30, max 365). Returns: Win rate, profit factor, expectancy, max drawdown, best/worst trade, average win/loss, consecutive wins/losses, and Sharpe-like ratio.
List Expert Advisors (EAs) installed in the MT5 terminal. Returns: List of .ex5 and .mq5 files in MQL5/Experts/ with file sizes and dates.
Modify SL/TP of an open position. REQUIRES: MT5_MCP_TRADING_ENABLED=true environment variable. Args: ticket: Position ticket number. sl: New stop loss (0 = remove SL). tp: New take profit (0 = remove TP). Returns: Modification result or error.
Place a market order. REQUIRES: MT5_MCP_TRADING_ENABLED=true environment variable. Args: symbol: Instrument (e.g. EURUSD). direction: "buy" or "sell". volume: Lot size (e.g. 0.01, 0.1, 1.0). sl: Stop loss price (0 = no SL). tp: Take profit price (0 = no TP). comment: Order comment (default "mt5-mcp"). Returns: Order result with ticket number or error.
Read EA configuration (.set file) to see its parameters. Args: expert_name: EA name to search for (e.g. "InnovaTrading", "MyEA"). Returns: EA parameter settings from the .set file.
Read Expert Advisor logs from the MT5 terminal. Args: expert_name: Filter by EA name (optional). Empty = all EA logs. lines_count: Number of lines to read from the end (default 50, max 200). Returns: Recent EA log entries with timestamps.
Tool annotations missing. No readOnlyHint, destructiveHint, or idempotentHint declared. Agents cannot distinguish safe reads from dangerous writes without parsing descriptions.
Descriptions exceed 200 chars for many tools (e.g., get_trade_stats, get_pnl_by_time). Long descriptions waste tokens and bury key details. Descriptions should be 50-150 chars with constraints in parameter descriptions.
No error recovery guidance. Tools return raw error strings (e.g., 'Error: Could not connect to MT5 terminal') without actionable next steps. LLMs cannot self-correct or retry intelligently.