MCP server exposing MetaTrader5 trading operations as tools for autonomous trading analysis and execution via Claude
This server has 9 tools with mixed quality. Strengths: all tools have names starting with action verbs (get_, execute_, close_, log_), and most have non-empty descriptions (6-150+ chars). All tools have JSON Schema input definitions with typed parameters and descriptions. Weaknesses: (1) Descriptions lack depth and LLM-optimization guidance, e.g., 'Get current live bid/ask/spread for a symbol. Call this to check the latest price.' (74 chars) is bare-minimum; (2) Parameter descriptions are generic ('Trading symbol', 'Timeframe') without format/constraint guidance; (3) No documented output schemas, callers must infer structure from code; (4) Error handling is absent, no recovery guidance or error classification; (5) The log_trade_recommendation tool appears read-only but is listed as READ_ONLY risk, which is correct, but its purpose ('log' implies a side effect) conflicts with the risk designation; (6) execute_trade and close_trade are destructive but lack dry-run/confirmation patterns to prevent accidental losses in a financial domain, this is critical; (7) No pagination or result limits documented, though tools like get_candles accept 'count' parameter without specifying min/max bounds; (8) No parameter relationship documentation (e.g., when does 'tp2' matter vs 'tp1'?); (9) No output field naming consistency, source code shows inconsistent key naming (e.g., 'df' in fetch_ohlcv response is a raw pandas object, not documented as part of the tool output). Overall, the server follows basic naming conventions but lacks the depth, error guidance, and safety patterns required for production financial trading.
Close an open position by ticket number.
Place a BUY or SELL market order on MT5. ONLY use with high confidence (75+) and clear entry/SL/TP. direction: BUY or SELL. volume: lot size. sl/tp: price levels.
Get MT5 account info: balance, equity, margin, free margin, leverage, profit.
Fetch OHLCV candlestick data for a symbol and timeframe. Returns latest candles with open/high/low/close/volume. Use timeframes: M1, M5, M15, M30, H1, H4, D1, W1.
Compute technical indicators: EMA 9/21/50/200, RSI, ATR, MACD, Bollinger, VWAP, Support/Resistance levels. Returns text summary + raw values.
Get quick overview across M15, H1, H4, D1: trend, RSI, ATR, EMAs, S/R for each. Use this for top-down analysis.
Financial tools (execute_trade, close_trade) lack confirmation/dry-run patterns. In a trading domain, irreversible operations without user confirmation risk catastrophic losses.
No error handling or recovery guidance documented. Error responses should tell the LLM what to do next (e.g., 'Insufficient margin. Check get_account() for free margin before retrying.') instead of raw error codes.
Output schemas not formally documented. Tools return structured data (e.g., get_price returns {bid, ask, spread, time}) but callers must infer the schema from code or trial-and-error.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
Get all open positions. Optionally filter by symbol. Returns: ticket, symbol, type, volume, entry price, current price, SL, TP, profit.
Get current live bid/ask/spread for a symbol. Call this to check the latest price.
Log a trade recommendation. Call this EVERY time you identify a setup. direction: BUY/SELL/WAIT. confidence: 0-100.
Example values embedded in parameter descriptions ('EURUSD, XAUUSD' for symbol, 'M1, M5, M15...' for timeframe). LLMs often reuse examples literally; use formal enum constraints or regex patterns instead.
Parameter constraints missing or undocumented. timeframe parameters not formally enumerated in schema (though source code has TIMEFRAME_MAP). count parameters lack min/max bounds. confidence lacks range validation in schema.
Parameter relationships undocumented. log_trade_recommendation has optional tp2/tp3 with no guidance on when they're required. execute_trade's sl/tp default to 0.0 with no clarity on whether this means 'unset' or 'invalid'.
Descriptions below quality baseline. get_price (74 chars), close_trade (38 chars) are minimal. Descriptions should explain WHAT the tool does, WHEN to use it, and any prerequisites. Current descriptions lack context for LLM selection.
No declared enums in schema for constrained fields. direction in execute_trade and log_trade_recommendation accepts 'BUY/SELL/WAIT' but is a free string in the schema, inviting hallucinated values.