protogrid

Search / com.fxapis/mt5

fxapis — MetaTrader 5

R1· needs a key

Let AI agents trade and read MetaTrader 5 accounts. Hosted — no terminal for you to run.

v1.0.0 · active · website · descriptor JSON · versions

An agent can connect on its own if it already holds MT5_TOKEN.Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.
Quality90strong
Trust82of 100
Uptime, 30 days97%
Latency p50311 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "mt5": {
      "type": "http",
      "url": "https://api.fxapis.com/mcp",
      "headers": {
        "Authorization": "Bearer ${MT5_TOKEN}"
      }
    }
  }
}
claude mcp add --transport http mt5 https://api.fxapis.com/mcp --header "Authorization: Bearer ${MT5_TOKEN}"
[mcp_servers.mt5]
url = "https://api.fxapis.com/mcp"
bearer_token_env_var = "MT5_TOKEN"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mt5": {
      "type": "remote",
      "url": "https://api.fxapis.com/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer {env:MT5_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "mt5": {
      "type": "http",
      "url": "https://api.fxapis.com/mcp",
      "headers": {
        "Authorization": "Bearer ${MT5_TOKEN}"
      }
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=mt5&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYXBpLmZ4YXBpcy5jb20vbWNwIiwiaGVhZGVycyI6eyJBdXRob3JpemF0aW9uIjoiQmVhcmVyICR7TVQ1X1RPS0VOfSJ9fQ%3D%3D"
}
{
  "servers": {
    "mt5": {
      "type": "http",
      "url": "https://api.fxapis.com/mcp",
      "headers": {
        "Authorization": "Bearer ${MT5_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "mt5": {
      "httpUrl": "https://api.fxapis.com/mcp",
      "headers": {
        "Authorization": "Bearer ${MT5_TOKEN}"
      }
    }
  }
}
extensions:
  "mt5":
    enabled: true
    name: "mt5"
    type: streamable_http
    uri: "https://api.fxapis.com/mcp"
    headers:
      "Authorization": "Bearer ${MT5_TOKEN}"
    timeout: 300

Placeholders to fill from your own secret store: ${MT5_TOKEN}. The registry never accepts secret values.

Quality 90 / 100strong

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene93 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations29 of 29 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • warn
    tools.token_costabout 10,396 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pulltool history recorded for 3 of the 7 days needed
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

29 tools, about 10,396 tokens to load them all · tool set e7841dda6b37 · checked 2026-10-20 06:17 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 82 / 100

no-repository
provenance55
liveness99
freshness100
hygiene80

+dns-namespace +website +reachable +uptime-97% +updated-19d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://api.fxapis.com/mcp streamable-httpapi_key ${MT5_TOKEN}yes97%311 ms2026-07-282026-10-20

Tools (29)

bring_accounts_onlineStarts each account's MT5 terminal in the cloud and logs it in; poll get_account_status until `ready`. Places no trades and is safe to repeat. Example: {"account_ids": ["<id>"]}
calculateread-onlyThe margin an order would need, or its profit between two prices, as the broker computes it; opens nothing. The account must be online. Example: {"account_id": "<id>", "kind": "margin", "symbol": "EURUSD", "side": "buy", "volume": "0.10", "price": "1.08450"}
cancel_multi_account_orderdestructiveCalls off a multi-account order on the user's real broker accounts (or demo) before anything is sent. Once orders went out, close the positions instead. Example: {"multi_account_order_id": "<id>", "idempotency_key": "<new uuid>"}
cancel_orderdestructiveCancels a pending order on the user's real broker account (or demo) that has not triggered. If it triggered there is a position to close instead. Example: {"order_id": "<id>", "idempotency_key": "<new uuid>"}
close_positiondestructiveCloses a position on the user's real broker account (or demo), whole or by volume. Sent twice it opens the opposite position, so reuse an idempotency_key only to retry the same close. Example: {"account_id": "<id>", "position_id": "<brokerPositionId>", "idempotency_key": "<new uuid>"}
get_accountread-onlyOne account: login, broker, state, environment, and its last-read balance, equity and free margin. Example: {"account_id": "<id from list_accounts>"}
get_account_figuresread-onlyBalance, equity, margin, free margin and margin level as decimal strings in the account currency, read every 15 s while online. Set fresh to ask the terminal now (the account must be `ready`). Example: {"account_id": "<id>", "fresh": true}
get_account_overviewread-onlyOne account in one call: state, environment, balance and equity, and its largest open positions with their total P/L. Start here when asked how an account is doing. Example: {"account_id": "<id>"}
get_account_statusread-onlyJust an account's state, cheap enough to poll every few seconds after bring_accounts_online until `ready`. States invalid_credentials, needs_2fa, needs_certificate and trading_disabled need the user, so stop polling. Example: {"account_id": "<id>"}
get_market_hoursread-onlyWhether a market is open now on this account's broker, and when it next opens or closes, in UTC. A broker holiday missing from its schedule still refuses orders. Example: {"account_id": "<id>", "instrument": "XAUUSD"}
get_multi_account_orderread-onlyOne multi-account order and each account's result; poll it after placing one. An account left `unresolved` must not be resent, so poll its order instead. Example: {"multi_account_order_id": "<id>"}
get_orderread-onlyThe authoritative record of one order: what was asked, the broker's answer, fill volume and price. Poll it after ORDER_UNRESOLVED until it leaves `unknown`. Example: {"order_id": "<id>", "include_deals": true}
get_quotesread-onlyLive bid and ask for up to 20 symbols or instruments from this account's broker; a closed market answers its last price with marketOpen false. The account must be online. Example: {"account_id": "<id>", "instruments": ["EURUSD"]}
get_symbol_snapshotread-onlyOne symbol on one account in one call: its specification, live quote, whether the market is open, and the margin for a volume. Use it before proposing a trade. Example: {"account_id": "<id>", "instrument": "XAUUSD", "volume": "0.10", "side": "buy"}
get_usageread-onlyThis month's usage against the plan, and its cost so far in minor units (9900 is $99.00). Over quota opening is refused, closing never is. Example: {}
get_workspaceread-onlyThis connection's workspace: its plan, the plan's limits and features, and whether trading is switched off. Call it first when unsure what the user can do. Example: {}
list_account_instrumentsread-onlyEach instrument's symbol on this account's broker: mapped, ambiguous (with candidates) or missing. Trade the mapped symbol. Example: {"account_id": "<id>", "query": "XAU"}
list_accountsread-onlyThe workspace's MT5 accounts with id, login, server, state and environment (demo or live); use the id, not the login, everywhere else. Only `ready` accounts trade, so bring the others online first. Example: {"limit": 25}
list_dealsread-onlyAn account's deal history as the broker recorded it, newest first, including stops that fired, swaps and manual trades. Realised profit is here. Example: {"account_id": "<id>", "since": "2026-10-01T00:00:00Z"}
list_instrumentsread-onlyMarkets named once (XAUUSD, US30, BTCUSD) whatever each broker calls them. list_account_instruments gives one account's own symbol for each. Example: {"category": "metals"}
list_multi_account_ordersread-onlyRecent multi-account orders (one trade on many accounts), each with its per-account result. Pages with limit and cursor. Example: {}
list_ordersread-onlyOrders placed through fxapis, newest first, for one account or all; state `unknown` means still being confirmed, so never resend those. Pages with cursor. Example: {"state": "unknown"}
list_positionsread-onlyOpen positions on one account as last observed; brokerPositionId is what close_position and modify_position take. Pages with limit and cursor. Example: {"account_id": "<id>"}
modify_positiondestructiveMoves a position's stop loss or take profit on the user's real broker account (or demo); null removes a level. Remove a stop loss only when the user asks. Example: {"account_id": "<id>", "position_id": "<brokerPositionId>", "stop_loss": "1.08000", "idempotency_key": "<new uuid>"}
place_market_orderdestructiveOpens a position at market on the user's real broker account (or demo) and waits for the broker; confirm account, symbol, side and volume with the user first. On ORDER_UNRESOLVED never resend, poll get_order. Example: {"account_id": "<id>", "symbol": "EURUSD", "side": "buy", "volume": "0.10", "idempotency_key": "<new uuid>"}
place_multi_account_orderdestructivePlaces the same market order on many of the user's real broker accounts (or demo) at once and returns at once; follow it with get_multi_account_order. Confirm the accounts, symbol, side and volume with the user first. Example: {"account_ids": ["<id>", "<id>"], "instrument": "XAUUSD", "side": "buy", "volume": "0.01", "idempotency_key": "<new uuid>"}
place_pending_orderdestructivePlaces a limit or stop order on the user's real broker account (or demo) that waits at the broker; success means working, not filled. Confirm it with the user first. Example: {"account_id": "<id>", "symbol": "EURUSD", "side": "buy", "kind": "limit", "volume": "0.10", "price": "1.08000", "idempotency_key": "<new uuid>"}
search_broker_serversread-onlyMT5 broker servers matching a broker or server name, servers seen working on fxapis first. A server not listed can still be used. Example: {"query": "icmarkets"}
take_account_offlineStops an account's terminal; open positions and their stops stay at the broker. Refused while an order is in flight. Example: {"account_id": "<id>"}

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.fxapis/mt5",
  "title": "fxapis — MetaTrader 5",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://api.fxapis.com/mcp",
      "type": "streamable-http",
      "headers": [
        {
          "name": "Authorization",
          "isSecret": true,
          "isRequired": true,
          "description": "Your fxapis API key as 'Bearer fx_live_…'. Create one at https://fxapis.com/dashboard/keys; a read-only or reduce-only key is recommended for agents."
        }
      ]
    }
  ],
  "version": "1.0.0",
  "websiteUrl": "https://fxapis.com/mcp",
  "description": "Let AI agents trade and read MetaTrader 5 accounts. Hosted — no terminal for you to run."
}