Skip to main content
Glama

MetaTrader5 MCP Server

by emerzon

MetaTrader5 MCP Server

A Model Context Protocol (MCP) server that provides access to MetaTrader5 market data and trading functionality.

Features

  • Connect to MetaTrader5 terminal
  • Retrieve symbol information and market data
  • Get historical rates (OHLCV) for any timeframe
  • Access tick data and market depth (DOM)
  • Real-time market data streaming
  • Support for all major trading instruments

Installation

  1. Install the MetaTrader5 terminal.
  2. Install Python dependencies:
pip install -r requirements.txt

Configuration

You can configure the server by creating a .env file in the project root. This is optional, as the server can connect to an already running and logged-in MetaTrader5 terminal.

To pre-configure credentials, create a .env file and add the following:

MT5_LOGIN=<your_account_number> MT5_PASSWORD=<your_password> MT5_SERVER=<your_broker_server>

Timezone Configuration:

  • If your MT5 server time is not UTC, set MT5_TIME_OFFSET_MINUTES in the .env file to the offset in minutes (can be negative).
  • Example: For UTC+2, use MT5_TIME_OFFSET_MINUTES=120. For UTC-4, use MT5_TIME_OFFSET_MINUTES=-240.
  • All timestamps are normalized to UTC using this offset.

Usage

Starting the MCP Server

python server.py

The server exposes tools that can be called programmatically or via the command-line interface (cli.py).

Available Tools (CLI)

The following tools are available via python cli.py <command>:

Market Data
  • symbols_list [--search-term TERM] [--limit N] - Smart search for trading symbols.
  • symbols_list_groups [--search-term TERM] [--limit N] - Get available symbol groups.
  • symbols_describe <symbol> - Get detailed symbol information.
  • data_fetch_candles <symbol> [--timeframe TF] [--limit N] - Get historical OHLCV data.
  • data_fetch_ticks <symbol> [--limit N] - Get tick data.
  • market_depth_fetch <symbol> - Get market depth (DOM).
  • indicators_list - List available technical indicators. (Use list_capabilities --sections indicators --include-details true for JSON details.)
    • CSV: grouped rows (category shown once per group): category,name Momentum,RSI ,MACD ,Stoch
    • JSON: grouped by category { "categories": { "Momentum": ["RSI", ...], ... } }
  • indicators_describe <name> - Get detailed information for a specific indicator.
  • denoise_list_methods - List available denoising methods and their parameters.
  • patterns_detect_candlesticks <symbol> [--timeframe TF] [--limit N] - Detect candlestick patterns.
  • pivot_compute_points <symbol> [--timeframe TF] [--method METHOD] - Compute pivot point levels.
  • forecast_generate <symbol> [--timeframe TF] [--method METHOD] [--horizon N] ... - Generate price forecasts.
  • forecast_volatility_estimate <symbol> [--timeframe TF] [--horizon N] [--method METHOD] [--proxy PROXY] - Forecast volatility using direct estimators, GARCH, or general forecasters on a proxy.
  • report_generate <symbol> [--horizon N] [--template basic|advanced|scalping|intraday|swing|position] - One-stop consolidated report rendered as Markdown (context, pivots, vol, backtest->best forecast, MC barriers; advanced adds regimes, HAR-RV, conformal). Templates infer timeframes.
    • Default horizons per template: scalping=8 bars, intraday=12, swing=24, position=30, basic/advanced=12. Override with --horizon or --params "horizon=..." if needed.
  • list_capabilities [--sections ...] [--include-details true|false] - Consolidated features: frameworks, forecast/volatility methods, denoise, indicators, dimred, and pattern_search backends.

(Note: Programmatic access uses function names like get_symbols, get_rates, etc.)

Example Usage

Sample Trade Guides
  • Beginner flow: docs/SAMPLE-TRADE.md
  • Advanced flow (regimes, HAR-RV, conformal, MC barriers, risk controls): docs/SAMPLE-TRADE-ADVANCED.md
One-Stop Consolidated Report
# Basic report (context, pivots, EWMA vol, backtest->best forecast, MC barrier grid) python cli.py report_generate EURUSD --template basic # Advanced report (adds regime summaries, HAR-RV vol, conformal intervals) python cli.py report_generate EURUSD --template advanced # Style-specific templates python cli.py report_generate EURUSD --template scalping python cli.py report_generate EURUSD --template intraday python cli.py report_generate EURUSD --template swing python cli.py report_generate EURUSD --template position # Optional fine-tuning via params (grid and backtest sizing) python cli.py report_generate EURUSD --horizon 12 --template basic \ --params "backtest_steps=25 backtest_spacing=10 tp_min=0.2 tp_max=1.0 tp_steps=5 sl_min=0.2 sl_max=1.0 sl_steps=5 top_k=5"
Fetching Data
# Get all visible symbols python cli.py symbols_list # Smart search for symbols containing "EUR" python cli.py symbols_list --search-term EUR --limit 20 # Get EUR/USD hourly data python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 100 # Get tick data python cli.py data_fetch_ticks EURUSD --limit 50 python cli.py data_fetch_ticks EURUSD --start "yesterday 14:00" --end "yesterday 15:00" --limit 200
Data Simplification

The data_fetch_candles and data_fetch_ticks commands support a powerful --simplify and --simplify-params option to downsample or transform data.

Modes & Methods:

1. SELECT Mode (Default)

  • lttb (Largest Triangle Three Buckets): General-purpose downsampling preserving chart shape
  • rdp (Ramer-Douglas-Peucker): Error-tolerance based simplification
  • pla (Piecewise Linear Approximation): Linear segment approximation
  • apca (Adaptive Piecewise Constant Approximation): Constant segment approximation

2. RESAMPLE Mode

  • Buckets data into fixed time intervals
  • Parameters: bucket_seconds (time window in seconds)

3. ENCODE Mode

  • envelope: High/Low bands with Open/Close position encoding
  • delta: Integer or character-encoded deltas of O/H/L/C vs previous close
  • Parameters: bits (precision), as_chars (character output), alphabet (custom symbols), scale (delta tick size)

4. SEGMENT Mode (ZigZag)

  • zigzag (alias: zz): Detects price turning points and trend changes
  • Parameters: threshold_pct (minimum % change), value_col (price column to analyze)
  • Preserves all original columns at pivot rows and adds: value, direction, change_pct.

5. SYMBOLIC Mode

  • sax (Symbolic Aggregate approXimation): Converts time series to symbolic patterns
  • Parameters: paa (segments), alphabet (symbol set), znorm (z-normalization)
  • Preserves all requested columns via per-segment aggregation (mean for numeric columns). Time is represented by start_time and end_time.

6. APPROXIMATE Mode

  • Aggregates data into segments based on selected points

Simplify Method Comparison

MethodBest ForOutput SizeKey Parameters
lttbGeneral downsamplingUser-controlledpoints, ratio
rdpShape preservationVariesepsilon (tolerance)
zigzagSwing/trend analysisVariesthreshold_pct
saxPattern recognitionFixed segmentspaa, alphabet
envelope/deltaCompact storageFixedbits, as_chars, scale
resampleRegular intervalsTime-basedbucket_seconds

Notes:

  • Encode preserves all requested columns (e.g., indicators, volumes); it replaces OHLC with envelope positions or deltas.
  • When a transform changes columns, the response includes the exact output headers in metadata.

CLI Examples:

# Select 200 points using LTTB algorithm python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 2000 --simplify lttb --simplify-params points=200 --format json # Use ratio instead of fixed points python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 1000 --simplify lttb --simplify-params ratio=0.2 --format json # RDP with error tolerance python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 1000 --simplify rdp --simplify-params epsilon=0.001 --format json # ZigZag trend analysis - sensitive (0.2% threshold) python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 500 --simplify segment --simplify-params "algo=zigzag,threshold_pct=0.2" --format json # ZigZag swing analysis - moderate (0.6% threshold) python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 500 --simplify segment --simplify-params "algo=zigzag,threshold_pct=0.6" --format json # Resample into 6-hour buckets python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 2000 --simplify resample --simplify-params bucket_seconds=21600 --format json # Envelope encoding with numeric positions python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 200 --simplify encode --simplify-params "schema=envelope,bits=8" --format json # Envelope encoding with character output (compact UTF-8) python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 200 --simplify encode --simplify-params "schema=envelope,as_chars=true,bits=4" --format json # Delta encoding (scaled integer or base-N char deltas) python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 300 --simplify encode --simplify-params "schema=delta,scale=1e-5,as_chars=true,zero_char=." --format json # Symbolic representation (SAX) python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 500 --simplify symbolic --simplify-params "schema=sax,paa=24,znorm=true" --format json # Approximate mode with aggregation python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 2000 --simplify approximate --simplify-params points=150 --format json # ZigZag on different price columns python cli.py data_fetch_candles EURUSD --timeframe H1 --limit 500 --simplify segment --simplify-params "algo=zigzag,threshold_pct=0.8,value_col=high" --format json

Forecasting

Generate point forecasts for the next horizon bars. The server supports lightweight classical models, Monte Carlo/HMM simulation, and optional integrations with modern forecasting frameworks.

  • Discover methods: python cli.py list_capabilities --sections forecast
  • Run forecast: python cli.py forecast_generate <symbol> --timeframe <TF> --method <name> --horizon <N> [--params JSON]
  • Rolling backtest: python cli.py forecast_backtest_run <symbol> --timeframe <TF> --horizon <N> [--steps S --spacing K --methods ...]
  • Volatility forecasts: use forecast_volatility_estimate with methods like ewma, parkinson, har_rv, garch, or general arima/ets with a --proxy (e.g., log_r2).

Classical example

python cli.py forecast_generate EURUSD --timeframe H1 --method theta --horizon 12 --format json

HAR-RV volatility (daily RV from M5 returns)

python cli.py forecast_volatility_estimate EURUSD --timeframe H1 --horizon 12 \ --method har_rv --params "rv_timeframe=M5,days=150,window_w=5,window_m=22" --format json

Monte Carlo forecasts (distribution + bands)

# GBM Monte Carlo python cli.py forecast_generate EURUSD --timeframe H1 --method mc_gbm --horizon 12 --params "n_sims=2000 seed=7" --format json # Regime-aware HMM Monte Carlo python cli.py forecast_generate EURUSD --timeframe H1 --method hmm_mc --horizon 12 --params "n_states=3 n_sims=3000 seed=7" --format json

Barrier analytics (TP/SL odds from MC paths)

# Probability of hitting TP before SL within 12 bars (percent barriers) python cli.py forecast_barrier_hit_probabilities --symbol EURUSD --timeframe H1 --horizon 12 \ --method hmm_mc --tp_pct 0.5 --sl_pct 0.3 --params "n_sims=5000 seed=7" --format json # Optimize TP/SL grid to maximize edge/Kelly/EV (percent mode) python cli.py forecast_barrier_optimize --symbol EURUSD --timeframe H1 --horizon 12 \ --method hmm_mc --mode pct --tp_min 0.2 --tp_max 1.0 --tp_steps 5 --sl_min 0.2 --sl_max 1.0 --sl_steps 5 \ --params "n_sims=5000 seed=7" --format json

For advanced usage, pattern-based signals, Monte Carlo/HMM details, and barrier analytics, see docs/FORECAST.md.

Regime & Change-Points

Detect significant structural changes and market regimes to adapt strategies:

# Bayesian Online Change-Point Detection (BOCPD) on log-returns python cli.py regime_detect EURUSD --timeframe H1 --limit 1000 --method bocpd --threshold 0.6 --format json # HMM-lite regime labeling (Gaussian mixture over returns) python cli.py regime_detect EURUSD --timeframe H1 --limit 1000 --method hmm --params "n_states=3" --format json # Markov-Switching AR (statsmodels, if available) python cli.py regime_detect EURUSD --timeframe H1 --limit 1200 --method ms_ar --params "k_regimes=2 order=1" --format json

Use cp_prob and change_points from BOCPD to reset models/sizes after structural breaks; use state/state_probabilities from HMM/MS-AR to switch playbooks (trend vs. range) and adjust risk.

Conformal Prediction (Valid Intervals)

Build statistically valid prediction intervals around any base method:

python cli.py forecast_conformal_intervals EURUSD --timeframe H1 --method theta --horizon 12 \ --steps 25 --spacing 10 --alpha 0.1 --format json

This runs a rolling backtest to calibrate per-step residual quantiles and then returns point forecast + conformal bands.

Triple-Barrier Labeling

Create labels (+1 TP first, -1 SL first, 0 neither) for supervised learning and signal analysis:

python cli.py labels_triple_barrier EURUSD --timeframe H1 --limit 1500 --horizon 12 \ --tp_pct 0.5 --sl_pct 0.3 --label-on high_low --format json

Use these labels to train meta-models or to evaluate rule performance across regimes.

Closed-Form Barrier (GBM)

Compute single-barrier hit probability using GBM formulas (fast sanity check vs. MC):

python cli.py forecast_barrier_closed_form EURUSD --timeframe H1 --horizon 12 --direction up --barrier 1.1000 --format json
  • Discover reducers: python cli.py list_capabilities --sections dimred
  • Use PCA quickly: --pca-components 8
  • Flexible: --dimred-method pca|kpca|umap|isomap|diffusion|dreams_cne|dreams_cne_fast --dimred-params "key=value,..."
  • Notes:
    • Prefer reducers with transform support for online queries (e.g., PCA, KPCA, UMAP, parametric DREAMS-CNE).
    • t-SNE/Laplacian embeddings cannot transform new queries; avoid for pattern_search.
    • DREAMS-CNE requires installation from source; dreams_cne_fast uses lighter defaults for speed.
Optional Framework Integrations

You can extend forecasting with additional frameworks. Install as needed; methods will appear under forecast_methods in list_capabilities once available.

  • StatsForecast (classical, fast): pip install statsforecast
    • Methods: sf_autoarima, sf_theta, sf_autoets, sf_seasonalnaive
  • MLForecast (tree/GBMs over lags): pip install mlforecast scikit-learn (and lightgbm for LGBM)
    • Methods: mlf_rf, mlf_lightgbm
  • NeuralForecast (deep learning): pip install neuralforecast[torch]
    • Methods: nhits, nbeatsx, tft, patchtst
  • Foundation models (Transformers/Chronos/TimesFM): pip install transformers torch accelerate (plus chronos-forecasting or timesfm if desired)
    • Methods: chronos_bolt, timesfm, lag_llama

See detailed examples and parameters in docs/FORECAST.md under Framework Integrations.

Denoising

Apply smoothing algorithms to data columns.

  • Methods: ema, sma, median, lowpass_fft, wavelet, emd, eemd, ceemdan.
  • Discover methods: python cli.py denoise_list_methods
# Denoise OHLCV with an EMA before simplifying python cli.py data_fetch_candles EURUSD --timeframe H1 --denoise ema --simplify lttb --simplify-params points=50 --limit 1000 --format json # Denoise the close and an RSI indicator after they are calculated python cli.py data_fetch_candles EURUSD --timeframe H1 --indicators "rsi(14)" --denoise ema --denoise-params "columns=close,RSI_14,when=post_ti" --format json

The symbols_list command uses a smart 3-tier search strategy:

  1. Group name match (e.g., Majors, Forex)
  2. Symbol name match (e.g., EUR → EURUSD, JPYEUR, ...)
  3. Description match (symbol or group path)

Date Inputs

The start and end parameters for data_fetch_candles use dateparser for flexible date/time parsing.

  • Natural language: yesterday 14:00, 2 days ago
  • Common formats: 2025-08-29, 2025/08/29 14:30

Requirements

  • Windows OS (MetaTrader5 requirement)
  • MetaTrader5 terminal installed and running
  • Python 3.8+
  • Active internet connection

Optional dependencies (uncomment in requirements.txt):

  • Forecast frameworks: statsforecast, mlforecast, lightgbm, neuralforecast
  • Foundation models: transformers, accelerate, torch, chronos-forecasting, timesfm
  • Pattern search backends: hnswlib, tslearn, dtaidistance
  • Dimensionality reduction: scikit-learn, umap-learn, pydiffmap, pykeops, and DREAMS-CNE from source

Error Handling

All functions return a JSON object with a success flag. If success is false, an error field will contain the error message.

Security Notes

  • For unattended use, store credentials securely in a .env file.
  • Do not commit .env files to version control.
  • Use demo accounts for testing.

License

MIT License

-
security - not tested
F
license - not found
-
quality - not tested

local-only server

The server can only run on the client's local machine because it depends on local resources.

Enables access to MetaTrader5 market data and trading functionality, including real-time quotes, historical OHLCV data, tick data, symbol information, and technical indicators for forex and other trading instruments.

  1. Features
    1. Installation
      1. Configuration
        1. Usage
          1. Starting the MCP Server
          2. Available Tools (CLI)
          3. Example Usage
          4. Simplify Method Comparison
          5. Forecasting
          6. Regime & Change-Points
          7. Conformal Prediction (Valid Intervals)
          8. Triple-Barrier Labeling
          9. Closed-Form Barrier (GBM)
          10. Denoising
        2. Intelligent Symbol Search
          1. Date Inputs
            1. Requirements
              1. Error Handling
                1. Security Notes
                  1. License

                    Related MCP Servers

                    • A
                      security
                      A
                      license
                      A
                      quality
                      Provides real-time and historical cryptocurrency market data through integration with major exchanges. This server enables LLMs like Claude to fetch current prices, analyze market trends, and access detailed trading information.
                      Last updated -
                      7
                      54
                      MIT License
                      • Apple
                    • A
                      security
                      F
                      license
                      A
                      quality
                      Provides real-time cryptocurrency price data from OKX exchange through a Model Context Protocol interface, allowing access to historical candlestick data and current market prices for any trading instrument.
                      Last updated -
                      2
                      4
                      14
                      • Apple
                    • A
                      security
                      A
                      license
                      A
                      quality
                      Provides integration with Twelve Data API to access financial market data including historical time series, real-time quotes, and instrument metadata for stocks, forex pairs, and cryptocurrencies.
                      Last updated -
                      35
                      33
                      MIT License
                    • -
                      security
                      F
                      license
                      -
                      quality
                      Enables trading and market analysis through Tiger Brokers API integration. Provides real-time market data, portfolio management, order execution, and technical analysis tools with a comprehensive web dashboard for monitoring.
                      Last updated -
                      1

                    View all related MCP servers

                    MCP directory API

                    We provide all the information about MCP servers via our MCP API.

                    curl -X GET 'https://glama.ai/api/mcp/v1/servers/emerzon/mt-data-mcp'

                    If you have feedback or need assistance with the MCP directory API, please join our Discord server