# MTContext (remote · mcp.mtcontext.com)

Connect any MCP client to MetaTrader 4/5 to read prices, manage positions, and place trades.

- Trust score: 36/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.mtcontext.com`: 36/100 (this document), [markdown](https://verifymcp.io/servers/mtcontext-mtcontext/mcp-v1.md), [page](https://verifymcp.io/servers/mtcontext-mtcontext/mcp-v1)

## Channel facts

- Endpoint: `https://mcp.mtcontext.com/mcp/v1`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - The endpoint enforces authorisation, but returns a challenge with no valid RFC 9728 metadata, so a client cannot discover where to get a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport blocked by authentication: the endpoint requires auth we don't have to verify streamable-http.
- **Schema Quality & AI Usability**: 0/100
  - Schema blocked by authentication: the endpoint requires auth we don't have to read it.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.
- **Capabilities**: 0/100
  - Capabilities blocked by authentication: the endpoint requires auth we don't have to read them.

**Unverified: 5 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add --transport http mtcontext-mtcontext https://mcp.mtcontext.com/mcp/v1
```

### Codex

```toml
[mcp_servers.mtcontext-mtcontext]
url = "https://mcp.mtcontext.com/mcp/v1"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mtcontext-mtcontext": {
      "type": "remote",
      "url": "https://mcp.mtcontext.com/mcp/v1",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mtcontext-mtcontext --url https://mcp.mtcontext.com/mcp/v1 --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  mtcontext-mtcontext:
    url: "https://mcp.mtcontext.com/mcp/v1"
```

### Other

```json
{
  "mcpServers": {
    "mtcontext-mtcontext": {
      "type": "http",
      "url": "https://mcp.mtcontext.com/mcp/v1"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 36, −26)

- [security regression] Endpoint reachability: reachable → behind authorisation
- [security regression] Authorization: unverified → fail
- [security regression] Transport: pass → unverified
- [security regression] Stability: 0.13 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-08-01 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 61, +3)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 58, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-29 (score 57, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-07-28 (score 57)

First indexed and scored.

## MCP tools (73)

### `get_tick` (~28 tokens)

Returns the current bid, ask, and spread for a symbol.

Input parameters:

- `symbol` (string, required)

### `get_bars` (~41 tokens)

Returns OHLCV bars for a symbol and timeframe.

Input parameters:

- `count` (integer)
- `symbol` (string, required)
- `timeframe` (string, required)

### `get_symbols` (~16 tokens)

Returns all symbols available in Market Watch.

### `get_symbol_info` (~31 tokens)

Returns contract spec for a symbol: lot size, swap rates, digits.

Input parameters:

- `symbol` (string, required)

### `get_account_info` (~22 tokens)

Returns account balance, equity, margin, leverage, and currency.

### `get_positions` (~17 tokens)

Returns all open positions with P&L.

### `get_orders` (~13 tokens)

Returns all pending orders.

### `get_trade_history` (~41 tokens)

Returns closed trades with optional date range filter.

Input parameters:

- `from_date` (string)
- `limit` (integer)
- `to_date` (string)

### `get_indicator` (~746 tokens)

Returns raw indicator values for a symbol and timeframe. Values are deterministic and
unlabelled — no directional signals or verdicts are attached; the caller interprets them.
Provide either `timeframe` (single) or `timeframes` (array, returns results keyed by timeframe
under `by_timeframe`) — exactly one.

Supported indicators:
RSI (Relative Strength Index): period 2-200 (default 14) → values: number[]
MACD (Moving Average Convergence Divergence): fast 2-200 (default 12), slow 2-200 (default 26), signal 2-200 (default 9) → macd: number[], signal: number[], histogram: number[]
ATR (Average True Range): period 1-200 (default 14) → values: number[]
SMA (Simple Moving Average): period 1-200 (default 20), applied_price CLOSE|OPEN|HIGH|LOW|MEDIAN|TYPICAL (default CLOSE) → values: number[]
EMA (Exponential Moving Average): period 1-200 (default 20), applied_price CLOSE|OPEN|HIGH|LOW|MEDIAN|TYPICAL (default CLOSE) → values: number[]
BOLLINGER (Bollinger Bands): period 2-200 (default 20), deviation 0.1-10 (default 2.0), applied_price CLOSE|OPEN|HIGH|LOW|MEDIAN|TYPICAL (default CLOSE) → upper: number[], middle: number[], lower: number[]
ADX (Average Directional Index / DMI): period 2-200 (default 14) → adx: number[], plus_di: number[], minus_di: number[]
STOCHASTIC (Stochastic Oscillator): k_period 1-200 (default 5), d_period 1-200 (default 3), slowing 1-200 (default 3) → k: number[], d: number[]
CCI (Commodity Channel Index): period 1-200 (default 14) → values: number[]
PARABOLIC_SAR (Parabolic Stop and Reverse): step 0.001-1 (default 0.02), maximum 0.01-1 (default 0.2) → values: number[]
ICHIMOKU (Ichimoku Kinko Hyo): tenkan 1-200 (default 9), kijun 1-200 (default 26), senkou 1-200 (default 52) → tenkan: number[], kijun: number[], senkou_a: number[], senkou_b: number[], chikou: number[]
WPR (Williams %R): period 1-200 (default 14) → values: number[]
MFI (Money Flow Index): period 1-200 (default 14) → values: number[]
STDDEV (Standard Deviation): period 1-200 (default 20),…

Input parameters:

- `count` (integer)
- `indicator` (string, required)
- `params` (object)
- `symbol` (string, required)
- `timeframe` (string)
- `timeframes` (array)

### `get_terminal_info` (~27 tokens)

Returns MT5 terminal metadata: name, company, path, build, max_bars.

### `list_experts` (~19 tokens)

Returns all Expert Advisors currently attached to open charts.

### `read_ea_logs` (~47 tokens)

Returns recent lines from the EA log file. available=false when the log cannot be read (MQL5 sandbox).

Input parameters:

- `count` (integer)
- `date` (string)

### `get_journal` (~42 tokens)

Returns recent lines from the MT5 Journal log. available=false when the log cannot be read.

Input parameters:

- `count` (integer)
- `date` (string)

### `get_trade_stats` (~76 tokens)

Returns aggregate statistics over closed trades: total_trades, win/loss counts, win_rate, avg_profit, avg_loss, profit_factor, total_pnl, expectancy, max_drawdown_percent, sharpe_ratio, consistency_percent.

Input parameters:

- `from_date` (string)
- `symbol` (string)
- `to_date`

### `get_pnl_by_symbol` (~56 tokens)

Returns P&L broken down per trading symbol. Result: { items: [{ symbol, pnl, trades }] } sorted by |pnl| descending.

Input parameters:

- `from_date` (string)
- `to_date`

### `get_pnl_by_time` (~60 tokens)

Returns P&L bucketed into time intervals. Result: { items: [{ period_start, pnl, trades }] } sorted chronologically.

Input parameters:

- `from_date` (string)
- `period` (string)
- `to_date`

### `check_order` (~73 tokens)

Checks whether an order can be placed without sending it. Supports both market and pending order types. Returns { feasible, required_margin, free_margin, estimated_cost, reason? }.

Input parameters:

- `order_type` (string, required)
- `price` (number)
- `symbol` (string, required)
- `volume` (number, required)

### `get_tick_history` (~59 tokens)

Returns a sequence of raw ticks for a symbol. Result: { ticks: [{ time, bid, ask, last, volume }] }.

Input parameters:

- `count` (integer)
- `from_date` (string)
- `symbol` (string, required)

### `place_order` (~161 tokens)

Places a market or pending order on MT5. Defaults to dry_run=true — set dry_run=false to execute live. Pending orders may set expiry (unix epoch seconds) for broker-side expiration; expiry is rejected on market orders. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `comment` (string)
- `dry_run` (boolean)
- `expiry` (integer): Pending orders only: expiration as unix epoch seconds (UTC). Must be in the future.
- `magic` (integer)
- `order_type` (string, required)
- `price` (number)
- `stop_loss` (number)
- `symbol` (string, required)
- `take_profit` (number)
- `volume` (number, required)

### `close_position` (~61 tokens)

Closes an open position by ticket. Defaults to dry_run=true — set dry_run=false to execute live. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `dry_run` (boolean)
- `ticket` (integer, required)

### `modify_position` (~96 tokens)

Modifies the stop_loss and/or take_profit of an open position. At least one of stop_loss or take_profit must be provided. Defaults to dry_run=true — set dry_run=false to execute live. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `dry_run` (boolean)
- `stop_loss` (number)
- `take_profit` (number)
- `ticket` (integer, required)

### `cancel_order` (~79 tokens)

Cancels a pending (limit or stop) order by ticket. Defaults to dry_run=true — set dry_run=false to execute live. Returns ORDER_NOT_FOUND if the ticket is not in pending orders. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `dry_run` (boolean)
- `ticket` (integer, required)

### `partial_close` (~103 tokens)

Closes a portion of an open position. `volume` must be less than the full position volume. Defaults to dry_run=true — set dry_run=false to execute live. Returns INVALID_PARAMETER if volume >= position volume, POSITION_NOT_FOUND if position closed between dry-run and live call. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `dry_run` (boolean)
- `ticket` (integer, required)
- `volume` (number, required)

### `modify_order` (~119 tokens)

Modifies the price, stop_loss, take_profit, or expiry of a pending order. At least one of price, stop_loss, take_profit, or expiry must be provided. Defaults to dry_run=true — set dry_run=false to execute live. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `dry_run` (boolean)
- `expiry` (integer)
- `price` (number)
- `stop_loss` (number)
- `take_profit` (number)
- `ticket` (integer, required)

### `close_all_positions` (~100 tokens)

Closes all currently open positions, optionally filtered by symbol. The EA executes all closes in a single command to avoid N round-trips and partial-disconnect risk. Returns a `results` array with per-ticket success/failure. Defaults to dry_run=true — set dry_run=false to execute live. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `dry_run` (boolean)
- `symbol` (string)

### `set_breakeven` (~110 tokens)

Moves the stop loss of a position (or all positions) to its entry price. Optional buffer_points adds N points on the safe side of entry. Returns POSITION_NOT_IN_PROFIT if the position has not yet moved favourably. Defaults to dry_run=true — set dry_run=false to execute live. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `buffer_points` (integer)
- `dry_run` (boolean)
- `ticket` (integer)

### `set_trailing_stop` (~117 tokens)

Registers a software trailing stop on a position. The EA updates the SL each timer cycle when price moves trailing_points in the position's favour. IMPORTANT: trailing state is lost if the EA restarts — callers should re-set after reconnect. trailing_points minimum is 10. Defaults to dry_run=true — set dry_run=false to register live. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `dry_run` (boolean)
- `ticket` (integer, required)
- `trailing_points` (integer, required)

### `reverse_position` (~175 tokens)

Closes an open position and opens a market order in the opposite direction as ONE EA command (single trade-context acquisition — minimises the gap between the two fills vs separate close_position + place_order calls). volume defaults to the closed volume; optional stop_loss / take_profit apply to the new position. If the close succeeds but the open fails (margin, market closed), returns REVERSE_PARTIAL with the close details and leaves the account flat — the EA never retries the open on its own. Defaults to dry_run=true — set dry_run=false to execute live. Requires the `trade` capability and inp_AllowTrading=true on the EA.

Input parameters:

- `dry_run` (boolean)
- `stop_loss` (number)
- `take_profit` (number)
- `ticket` (integer, required)
- `volume` (number)

### `calculate_lot_size` (~105 tokens)

Calculates the appropriate lot size for a trade based on account equity and risk parameters. Uses live account equity and symbol contract specs from the connected terminal. Returns the recommended lot size, risk amount in account currency, and pip value. Returns LOT_TOO_SMALL if the computed lots are below the symbol minimum. Available at Free+ tier (no analytics capability required).

Input parameters:

- `risk_percent` (number, required)
- `stop_loss_pips` (number, required)
- `symbol` (string, required)

### `get_risk_summary` (~77 tokens)

Returns a portfolio risk overview: aggregate currency exposure, margin utilisation, and correlated pairs. NOTE: Currency exposure logic assumes FX symbols (e.g., EURUSD) where the base currency is the first 3 characters. Results for indices, cryptos, and stocks will be inaccurate. Requires the `analytics` capability (Team+ tier).

### `get_correlation` (~77 tokens)

Returns the Pearson price correlation coefficient between two symbols over N daily bars. Ranges from -1.0 (perfect inverse) to +1.0 (perfect positive). Requires the `analytics` capability (Team+ tier).

Input parameters:

- `bars` (integer)
- `symbol_a` (string, required)
- `symbol_b` (string, required)

### `get_economic_calendar` (~107 tokens)

Returns upcoming and recent economic calendar events. Prefers MT5's built-in Calendar API when a terminal is connected; falls back to the server-side calendar (free feed) on MT4 or when disconnected. Response includes a `source` field ('terminal' or 'server'). Requires the `analytics` capability (Team+ tier).

Input parameters:

- `currencies` (array)
- `hours_ahead` (integer)
- `hours_back` (integer)
- `impact` (string)

### `get_market_depth` (~84 tokens)

Returns Depth of Market (DOM) bid/ask levels for a symbol. Requires the broker to supply DOM data — if unavailable, returns empty arrays with a note. On MT4 terminals, returns { error: 'NOT_SUPPORTED_ON_MT4' }. Requires the `read` capability (Pro+ tier).

Input parameters:

- `levels` (integer)
- `symbol` (string, required)

### `scan_symbols` (~96 tokens)

Scans Market Watch symbols and filters by spread, RSI, or ATR thresholds. At least one filter criterion must be provided. Returns up to 50 symbols. If scanning takes over 10 seconds, partial results are returned with partial=true. Requires the `read` capability (Pro+ tier).

Input parameters:

- `filter` (object, required)
- `limit` (integer)
- `sort_by` (string)
- `timeframe` (string)

### `get_spread_alert` (~84 tokens)

Returns the current spread for a symbol compared to an estimated historical average. The 30-day average is estimated from daily high-low range (not tick-level data). A spread is flagged as abnormal if it exceeds threshold_multiplier × the estimated average. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `symbol` (string, required)
- `threshold_multiplier` (number)

### `get_market_sessions` (~53 tokens)

Returns which major trading sessions (Sydney, Tokyo, London, New York) are currently open and when the next session opens/closes. Pure server-side UTC computation — no EA dispatch required. Available at Free+ tier.

### `get_interest_rates` (~77 tokens)

Returns current central bank policy interest rates for major currencies, sourced from MT5's built-in Calendar API. Includes the date of the last change and next scheduled decision. On MT4 terminals, returns { error: 'NOT_SUPPORTED_ON_MT4' }. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `currencies` (array)

### `get_macro_indicators` (~102 tokens)

Returns key macroeconomic indicators (CPI, GDP, NFP, PMI, unemployment, retail sales, trade balance) for a currency with the latest actual, previous, forecast, and surprise values. Data from MT5's built-in Calendar API. On MT4 terminals, returns { error: 'NOT_SUPPORTED_ON_MT4' }. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `currency` (string, required)
- `indicators` (array)

### `get_cot_report` (~128 tokens)

Returns the latest CFTC Commitments of Traders (COT) report data for a currency or commodity. Data sourced from the CFTC Socrata public API (free, no key required), cached 24 hours. Supported symbols: EUR, GBP, JPY, CHF, AUD, CAD, NZD, GOLD, OIL. Returns { error: 'COT_UNAVAILABLE' } if the feed is unreachable. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `report_type` (string)
- `symbol` (string, required)
- `weeks` (integer)

### `get_rate_differential` (~76 tokens)

Returns the interest rate differential between the two currencies in a pair, plus the annualised swap cost/credit for the specified volume. Computed server-side from get_interest_rates and get_symbol_info data. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `symbol` (string, required)
- `volume` (number)

### `get_rate_expectations` (~192 tokens)

Returns the market's expected policy path per G10 central bank: next scheduled meeting + countdown, current policy rate, last decision, and — for USD when a Fed Funds futures quote source is configured — market-implied cut/hold/hike probabilities and the implied year-end rate. Every response is labelled `data_quality: implied | calendar_only`; calendar-only entries omit probability fields entirely (never a fabricated guess). Implied values are DELAYED and APPROXIMATE (`approximate: true`, `method: ff_futures_derived`). Fully EA-independent (server-side + cache; works with no terminal connected). Pass a single G10 currency or `ALL` for the full map. Upstream failures serve cached data with `stale: true` or return { error: 'RATE_EXPECTATIONS_UNAVAILABLE' }. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `currency` (string, required)

### `get_news` (~77 tokens)

Returns recent forex/financial news articles from NewsAPI.org. Requires NEWS_API_KEY environment variable — returns NEWS_NOT_CONFIGURED if not set. Returns NEWS_UNAVAILABLE if the feed is unreachable. Results cached 5 minutes. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `limit` (integer)
- `query` (string)

### `get_sentiment` (~88 tokens)

Returns retail trader positioning sentiment for a symbol from Myfxbook Community Outlook (free, no key required). Includes long/short percentages and a contrarian signal (when retail is >70% long, signal is SHORT). Returns SENTIMENT_UNAVAILABLE if the feed is unreachable. Results cached 15 minutes. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `symbol` (string, required)

### `explain_trade` (~82 tokens)

Explains a trade: what conditions existed at entry, the risk/reward ratio, SL/ATR ratio, and whether it aligns with common strategies. Works for both open positions and closed trade history. Returns POSITION_NOT_FOUND if ticket not found. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `ticket` (integer, required)
- `timeframe` (string)

### `get_fibonacci_levels` (~64 tokens)

Computes Fibonacci retracement and extension levels from swing high and low price points. Pure server-side computation — no EA dispatch required. Available at Free+ tier.

Input parameters:

- `direction` (string)
- `swing_high` (number, required)
- `swing_low` (number, required)

### `backtest_strategy` (~152 tokens)

Runs a micro-backtest of a simple rule-based strategy over historical bars fetched from the EA. Maximum 5000 bars. Returns equity curve and basic statistics. Times out after 30 seconds and returns BACKTEST_TIMEOUT. Supported entry/exit conditions: rsi_above, rsi_below, price_above_ema, price_below_ema, macd_cross_above_zero, macd_cross_below_zero. Requires the `analytics` capability (Enterprise+ tier).

Input parameters:

- `bars` (integer, required)
- `initial_balance` (number)
- `risk_per_trade_pct` (number)
- `strategy` (object, required)
- `symbol` (string, required)
- `timeframe` (string, required)

### `get_market_snapshot` (~178 tokens)

Returns a single-call market snapshot for one symbol: current tick (bid/ask/spread) plus a chosen indicator set across up to 4 timeframes. Replaces 5-8 separate tool calls when analysing a symbol. Limits: 4 timeframes x 6 indicators, 10 values per indicator. Defaults: timeframes ["H1"], indicators ["RSI", "ATR", "EMA"]. Indicators use their registry default parameters (e.g. RSI 14). If the 10s deadline is hit, returns the completed components with partial: true and a missing[] list. Values are raw and unlabelled — interpretation is up to the caller. Available at Free+ tier.

Input parameters:

- `bars` (integer)
- `indicators` (array)
- `symbol` (string, required)
- `timeframes` (array)

### `get_currency_strength` (~107 tokens)

Ranks the 8 major currencies (USD EUR GBP JPY CHF CAD AUD NZD) by normalised % change, computed from bars across up to 28 major crosses in the terminal's Market Watch. Strongest first. Symbols missing from Market Watch are skipped and listed in skipped[]; currencies with fewer than 4 contributing pairs are flagged low_confidence. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `bars` (integer)
- `timeframe` (string)

### `get_key_levels` (~86 tokens)

Computes support/resistance key levels for a symbol: classic + Fibonacci pivot points from the prior period, swing highs/lows (fractal detection), and psychological round numbers near the current price. Each level includes its distance from the current price. Available at Free+ tier.

Input parameters:

- `swing_bars` (integer)
- `symbol` (string, required)
- `timeframe` (string)

### `detect_patterns` (~101 tokens)

Runs deterministic rule-based candlestick pattern detection over recent bars: engulfing, hammer, shooting star, doji, inside/outside bar, morning/evening star. Detection thresholds are fixed constants echoed in the response `criteria` field. Patterns are locations in the data, not trade signals. Available at Pro+ tier.

Input parameters:

- `bars` (integer)
- `patterns` (array)
- `symbol` (string, required)
- `timeframe` (string, required)

### `get_execution_quality` (~115 tokens)

Reports slippage statistics (requested vs filled price) for live market orders placed through MT-MCP: average, median, and worst slippage in points, overall and per symbol. Measurement starts from when fill auditing was enabled — earlier periods return DATA_INSUFFICIENT with the earliest measurable date. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `from_date` (string): ISO date, default 30 days ago
- `symbol` (string)
- `to_date` (string): ISO date, default today

### `create_alert` (~175 tokens)

Creates a persistent server-side alert, evaluated every ~30 seconds while the terminal is connected (not tick-precise). Types: price (level above/below), indicator (value or cross vs threshold), position_event (sl_hit / tp_hit / position_closed, optional ticket filter), margin_level (below %). mode=once fires a single time; mode=recurring re-arms after cooldown_seconds. Fired events are queued durably — retrieve them with poll_alerts. Active-alert caps by tier: Pro 10, Team 50, Enterprise 200. Available at Pro+ tier.

Input parameters:

- `condition` (object, required): Condition object; shape depends on type — see tool description.
- `cooldown_seconds` (integer)
- `mode` (string)
- `note` (string)
- `type` (string, required)

### `list_alerts` (~56 tokens)

Lists all alerts for this license with status (active/fired/cancelled), condition, mode, fire count, and last_evaluated_at (stale while the terminal is disconnected — evaluation pauses). Available at Pro+ tier.

### `cancel_alert` (~58 tokens)

Cancels an active alert by alert_id (from create_alert or list_alerts). Returns ALERT_NOT_FOUND if the alert does not exist, already fired, or was already cancelled. Available at Pro+ tier.

Input parameters:

- `alert_id` (string, required)

### `poll_alerts` (~94 tokens)

Drains undelivered fired-alert events (oldest first) and marks them delivered. Each event carries event_id, the alert's condition echo, the triggering values, and the fired timestamp. Events are retained 7 days; pass include_delivered=true to see the retained history. Call this periodically — alerts are pull-based, nothing is pushed. Available at Pro+ tier.

Input parameters:

- `include_delivered` (boolean)

### `set_equity_guard` (~251 tokens)

Configures an account-level circuit breaker enforced server-side (survives this session): when equity falls max_daily_loss_percent below the daily anchor (or max_total_drawdown_percent below initial equity), the guard breaches. breach_action: close_all = close all positions then block new live trades until the daily reset; block_new = block only; notify = record an alert event only (see poll_alerts). Evaluation runs on a ~30s sampling loop while the terminal is connected; if disconnected at breach time, the trade block still applies and close_all executes on reconnect. This is best-effort protection above the broker's own stop-out, not a replacement for stop losses. One guard per license — calling again replaces it. Requires the `trade` capability.

Input parameters:

- `breach_action` (string, required)
- `initial_balance` (number): Alias for initial_equity.
- `initial_equity` (number): Starting account equity for total drawdown calculation basis.
- `max_daily_loss_percent` (number, required)
- `max_total_drawdown_percent` (number)
- `reset_timezone` (string): IANA timezone for the daily reset boundary, e.g. 'UTC' or 'Europe/Prague'.

### `get_equity_guard_status` (~62 tokens)

Returns the current equity guard: config, status (armed / breached / breached_pending / none), day_start_equity anchor, current equity, daily P&L percent, and the equity level at which the guard breaches. Requires the `trade` capability.

### `remove_equity_guard` (~63 tokens)

Removes the equity guard. If the guard is currently breached (or breached_pending), removal requires confirm=true — this prevents silently disabling an active safety rail; without it the call returns CONFIRM_REQUIRED. Requires the `trade` capability.

Input parameters:

- `confirm` (boolean)

### `set_prop_firm_rules` (~391 tokens)

Configures a per-terminal prop-firm ruleset evaluated server-side (survives this session). Rules: max_daily_loss_percent (vs the daily equity anchor), optional max_total_drawdown_percent with drawdown_mode (static = from initial balance; trailing = from the high-watermark) and drawdown_basis (balance or equity), optional profit_target_percent, min_trading_days, and consistency_max_day_share_percent (max share of total profit from a single day). A preset (ftmo | generic) pre-fills defaults but the stored ruleset is always fully resolved — explicit params win. reset_timezone (IANA) sets the daily boundary. initial_balance seeds the drawdown basis for mid-challenge onboarding (otherwise seeded from a live sample). One ruleset per (license, terminal); re-calling replaces rule values but preserves the watermark unless initial_balance is re-supplied. ADVISORY ONLY — this never blocks trades. Pass link_equity_guard: true to also install a matching equity guard (breach_action default block_new) for actual enforcement. Requires the `trade` capability.

Input parameters:

- `breach_action` (string)
- `consistency_max_day_share_percent` (number)
- `drawdown_basis` (string)
- `drawdown_mode` (string)
- `initial_balance` (number)
- `initial_equity` (number): Alias for initial_balance. Starting account balance/equity for drawdown basis.
- `link_equity_guard` (boolean): Install a matching equity guard for enforcement.
- `max_daily_loss_percent` (number)
- `max_total_drawdown_percent` (number)
- `min_trading_days` (integer)
- `preset` (string)
- `profit_target_percent` (number)
- `reset_timezone` (string): IANA timezone for the daily reset boundary, e.g. 'Europe/Prague'.

### `get_prop_firm_status` (~174 tokens)

Returns a decision-ready prop-firm verdict: overall status (ok | warning | critical | breached), trade_advice (proceed | reduce_risk | block), max_safe_risk_percent for the next trade, per-rule headroom (percent and account currency) with human-readable reasons, days_traded, trailing watermark, and the consistency + profit-target / min-trading-days progress. Status is driven only by loss rules and a consistency violation; profit target and min trading days never worsen it. FAIL-SAFE: if the terminal is unreachable (no fresh equity sample) the response sets stale: true and forces trade_advice: block. Evaluation runs on a ~30s server-side sampling loop, so verdicts can lag intraday spikes — treat the bands as conservative. Requires the `trade` capability.

### `remove_prop_firm_rules` (~55 tokens)

Removes the prop-firm ruleset for the terminal (does not touch any linked equity guard — remove that separately with remove_equity_guard). Returns RULESET_NOT_FOUND if none exists. Requires the `trade` capability.

### `write_trade_note` (~139 tokens)

Persists a trade journal entry: rationale, setup label, and tags, optionally linked to a position/order ticket. Entries are append-only and immutable — to correct one, write a new note with amends_entry_id pointing at the original. Use at order time to capture WHY a trade was taken; query later with query_journal for post-trade review and per-setup statistics. Free tier stores up to 100 entries. Available at Free+ tier.

Input parameters:

- `amends_entry_id` (string)
- `setup` (string)
- `tags` (array)
- `text` (string, required)
- `ticket` (integer)

### `query_journal` (~127 tokens)

Queries trade journal entries, newest first. Filters: ticket, tag, setup, from_date/to_date (ISO), and search (case-insensitive text match). Entries linked to closed trades include realized_pnl when the terminal is connected (null otherwise). Available at Free+ tier.

Input parameters:

- `from_date` (string): ISO date
- `limit` (integer)
- `offset` (integer)
- `search` (string)
- `setup` (string)
- `tag` (string)
- `ticket` (integer)
- `to_date` (string): ISO date

### `get_behavioral_insights` (~154 tokens)

Computes descriptive behavioural metrics from closed trade history: overtrading (trades/day vs the trailing 30-day baseline), revenge trading (re-entry within 15 min of a loss on the same symbol at >=1.5x volume), volume escalation across consecutive losses, and winner-vs-loser hold-time asymmetry. All thresholds are fixed constants echoed in the `criteria` field. This is descriptive coaching over trade data, NOT a psychological assessment. Returns DATA_INSUFFICIENT below 10 closed trades. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `from_date` (string): ISO date, default 30 days ago
- `to_date` (string): ISO date, default today

### `get_event_risk` (~136 tokens)

Preflight check: returns a graded verdict (proceed/caution/block) for trading a symbol based on upcoming high-impact economic events within the horizon. Uses the server-side calendar — works with no terminal connected. Includes blackout windows, resume_after time, and per-event details. Unknown symbols default to caution (fail-safe). Requires the `analytics` capability (Team+ tier).

Input parameters:

- `high_after_min` (integer)
- `high_before_min` (integer)
- `horizon_hours` (number)
- `medium_after_min` (integer)
- `medium_before_min` (integer)
- `symbol` (string, required)

### `get_holding_risk` (~93 tokens)

Assesses risk for holding (or planning to hold) a position in a symbol for a specified duration. Reports events landing inside the hold window, weekend/market-closure gap exposure, and triple-swap day flags. Uses the server-side calendar — works with no terminal. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `expected_hold_hours` (number)
- `symbol` (string, required)

### `get_risk_regime` (~96 tokens)

Returns a composite risk-on/risk-off score in [−1, 1] from z-scored market inputs (VIX, DXY, gold, 2s10s spread, equities). Pure scoring function with transparent per-input drivers, confidence, missing_inputs, and sizing_advice. Requires at least 3 available inputs or returns REGIME_UNAVAILABLE. Requires the `analytics` capability (Team+ tier).

### `get_economic_surprise` (~90 tokens)

Returns a rolling actual-vs-forecast surprise index for a currency's economic events, weighted by impact tier (high=3×, medium=1×, low ignored). Reports insufficient_history when fewer than 30 days of data exist. Uses the server-side calendar. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `currency` (string, required)
- `days` (integer)

### `get_cb_stance` (~85 tokens)

Returns the central bank hawk/dove stance for a currency, scored from −1 (max dovish) to +1 (max hawkish). Reads from persisted snapshots — no LLM call in the request path. Includes recent_change indicator, source statements, and classifier provenance marker. Requires the `analytics` capability (Team+ tier).

Input parameters:

- `currency` (string, required)

### `set_news_guard` (~116 tokens)

Configures a persistent server-side news monitor. When enabled, the guard polls news at the specified interval, classifies articles by severity and affected currencies, and triggers alerts (via poll_alerts) when articles meet the threshold. One guard per license — calling again replaces the config. Notify-only: the guard never closes positions or blocks trades. Requires the `analytics` capability.

Input parameters:

- `currencies` (array, required)
- `keywords` (array)
- `min_severity` (string)
- `poll_interval_seconds` (integer)

### `get_news_guard_status` (~66 tokens)

Returns the current news guard configuration, enabled state, last poll time, classifier mode (llm/heuristic), and count of alerts raised in the last 24h. Returns { status: 'none' } if no guard is configured. Requires the `analytics` capability.

### `remove_news_guard` (~39 tokens)

Removes the news guard for this license. The guard stops polling immediately. Returns { removed: true } on success. Requires the `analytics` capability.

### `get_market_context` (~185 tokens)

Returns live cross-asset context in one call: DXY (broad USD), VIX (equity-vol risk regime), and the US 10Y yield — each with level, short-horizon (5-day) change, asof, and source — plus a transparent risk_tone (risk_on / neutral / risk_off) derived from a documented VIX+DXY heuristic. Reads the server-side market-snapshot foundation; works with no terminal connected (incl. MT4). Degrades transparently: unavailable inputs are listed in missing_inputs, never zeroed; risk_tone is 'unknown' unless both VIX and DXY are present. Returns MARKET_CONTEXT_UNAVAILABLE only when no input can be sourced. This is the raw-feed reader that get_risk_regime (a composite score) is not. Requires the `analytics` capability (Team+ tier).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/mtcontext-mtcontext/mcp-v1#diagnostics

## Score history

- 2026-08-03: 36
- 2026-08-02: 36
- 2026-08-01: 62
- 2026-07-31: 61
- 2026-07-30: 58
- 2026-07-29: 57
- 2026-07-28: 57

## Links

- Remote endpoint: https://mcp.mtcontext.com/mcp/v1
- Authorisation metadata: https://mcp.mtcontext.com/.well-known/oauth-protected-resource/mcp/v1
- Repository: https://github.com/mtcontext/mtcontext-quickstart
- Changelog RSS feed: https://verifymcp.io/servers/mtcontext-mtcontext/mcp-v1/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/mtcontext-mtcontext/mcp-v1/changelog.json
- HTML version of this page: https://verifymcp.io/servers/mtcontext-mtcontext/mcp-v1
