fxapis — MetaTrader 5
by fxapis.com · remote · no sign-in to list tools · v1.0.0 · published by com.fxapis
Let AI agents trade and read MetaTrader 5 accounts. Hosted — no terminal for you to run.
29 tools: 7 can delete or cancel things, 4 change things and 18 only read.
Scanned Oct 21, 2026
- Deletes or cancels7Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things4Claude Code: ask: see these tools
- Only reads18Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http mt5 https://api.fxapis.com/mcp --header 'Authorization: <your-authorization>'Findings
Matches of fixed checks, with the text they matched.
- Warnlist_positions
The server marks "list_positions" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "list_positions" says "list": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
29 tools
Deletes or cancels 7Claude Code: deny
cancel_multi_account_orderCalls off a multi-account order on the user's real broker accounts (or demo) before anything is sent.No findings
Why it is in this group
- The name "cancel_multi_account_order" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Calls 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>"}
Annotations the server declares
- title: Cancel a multi-account order
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
cancel_orderCancels a pending order on the user's real broker account (or demo) that has not triggered.No findings
Why it is in this group
- The name "cancel_order" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Cancels 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>"}
Annotations the server declares
- title: Cancel a pending order
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
close_positionCloses a position on the user's real broker account (or demo), whole or by volume.No findings
Why it is in this group
- The name "close_position" says "close": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Closes 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>"}
Annotations the server declares
- title: Close a position
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
modify_positionMoves a position's stop loss or take profit on the user's real broker account (or demo); null removes a level.No findings
Why it is in this group
- The name "modify_position" says "modify": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Moves 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>"}
Annotations the server declares
- title: Move stop loss / take profit
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
place_market_orderOpens 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.No findings
Why it is in this group
- The description's first verb is "open": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Opens 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>"}
Annotations the server declares
- title: Place a market order
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
place_multi_account_orderPlaces 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.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Places 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>"}
Annotations the server declares
- title: Place one trade on many accounts
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
place_pending_orderPlaces a limit or stop order on the user's real broker account (or demo) that waits at the broker; success means working, not filled.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Places 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>"}
Annotations the server declares
- title: Place a limit or stop order
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Changes things 4Claude Code: ask
bring_accounts_onlineStarts each account's MT5 terminal in the cloud and logs it in; poll get_account_status until `ready`.No findings
Why it is in this group
- The description's first verb is "start": a word for a change.
Description, as the server wrote it Starts 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>"]}
Annotations the server declares
- title: Bring accounts online
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
calculateThe margin an order would need, or its profit between two prices, as the broker computes it; opens nothing.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it The 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"}
Annotations the server declares
- title: Margin or profit
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_positionsOpen positions on one account as last observed; brokerPositionId is what close_position and modify_position take.1 finding
Why it is in this group
- The name "list_positions" says "list": a word for reading.
- The description's first verb is "open": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "list_positions" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "list_positions" says "list": a word for reading.
Description, as the server wrote it Open 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>"}
Annotations the server declares
- title: List positions
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
take_account_offlineStops an account's terminal; open positions and their stops stay at the broker.No findings
Why it is in this group
- The description's first verb is "stop": a word for a change.
Description, as the server wrote it Stops an account's terminal; open positions and their stops stay at the broker. Refused while an order is in flight. Example: {"account_id": "<id>"}
Annotations the server declares
- title: Take an account offline
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 18Claude Code: allow
get_accountOne account: login, broker, state, environment, and its last-read balance, equity and free margin.No findings
Why it is in this group
- The name "get_account" says "get": a word for reading.
Description, as the server wrote it One account: login, broker, state, environment, and its last-read balance, equity and free margin. Example: {"account_id": "<id from list_accounts>"}
Annotations the server declares
- title: Get an account
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_account_figuresBalance, equity, margin, free margin and margin level as decimal strings in the account currency, read every 15 s while online.No findings
Why it is in this group
- The name "get_account_figures" says "get": a word for reading.
Description, as the server wrote it Balance, 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}
Annotations the server declares
- title: Get balance, equity and margin
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_account_overviewOne account in one call: state, environment, balance and equity, and its largest open positions with their total P/L.No findings
Why it is in this group
- The name "get_account_overview" says "get": a word for reading.
Description, as the server wrote it One 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>"}
Annotations the server declares
- title: Account overview
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_account_statusJust an account's state, cheap enough to poll every few seconds after bring_accounts_online until `ready`.No findings
Why it is in this group
- The name "get_account_status" says "get": a word for reading.
Description, as the server wrote it Just 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>"}
Annotations the server declares
- title: Poll account state
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_market_hoursWhether a market is open now on this account's broker, and when it next opens or closes, in UTC.No findings
Why it is in this group
- The name "get_market_hours" says "get": a word for reading.
Description, as the server wrote it Whether 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"}
Annotations the server declares
- title: Market hours
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_multi_account_orderOne multi-account order and each account's result; poll it after placing one.No findings
Why it is in this group
- The name "get_multi_account_order" says "get": a word for reading.
Description, as the server wrote it One 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>"}
Annotations the server declares
- title: Follow a multi-account order
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_orderThe authoritative record of one order: what was asked, the broker's answer, fill volume and price.No findings
Why it is in this group
- The name "get_order" says "get": a word for reading.
Description, as the server wrote it The 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}
Annotations the server declares
- title: Get an order
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_quotesLive 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.No findings
Why it is in this group
- The name "get_quotes" says "get": a word for reading.
Description, as the server wrote it Live 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"]}
Annotations the server declares
- title: Get live prices
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_symbol_snapshotOne symbol on one account in one call: its specification, live quote, whether the market is open, and the margin for a volume.No findings
Why it is in this group
- The name "get_symbol_snapshot" says "get": a word for reading.
Description, as the server wrote it One 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"}
Annotations the server declares
- title: Symbol snapshot
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_usageThis month's usage against the plan, and its cost so far in minor units (9900 is $99.00).No findings
Why it is in this group
- The name "get_usage" says "get": a word for reading.
Description, as the server wrote it This 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: {}
Annotations the server declares
- title: This month's usage
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_workspaceThis connection's workspace: its plan, the plan's limits and features, and whether trading is switched off.No findings
Why it is in this group
- The name "get_workspace" says "get": a word for reading.
Description, as the server wrote it This 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: {}
Annotations the server declares
- title: Workspace and plan
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_account_instrumentsEach instrument's symbol on this account's broker: mapped, ambiguous (with candidates) or missing.No findings
Why it is in this group
- The name "list_account_instruments" says "list": a word for reading.
Description, as the server wrote it Each instrument's symbol on this account's broker: mapped, ambiguous (with candidates) or missing. Trade the mapped symbol. Example: {"account_id": "<id>", "query": "XAU"}
Annotations the server declares
- title: Map instruments
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_accountsThe workspace's MT5 accounts with id, login, server, state and environment (demo or live); use the id, not the login, everywhere else.No findings
Why it is in this group
- The name "list_accounts" says "list": a word for reading.
Description, as the server wrote it The 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}
Annotations the server declares
- title: List MT5 accounts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_dealsAn account's deal history as the broker recorded it, newest first, including stops that fired, swaps and manual trades.No findings
Why it is in this group
- The name "list_deals" says "list": a word for reading.
Description, as the server wrote it An 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"}
Annotations the server declares
- title: List deals
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_instrumentsMarkets named once (XAUUSD, US30, BTCUSD) whatever each broker calls them.No findings
Why it is in this group
- The name "list_instruments" says "list": a word for reading.
Description, as the server wrote it Markets named once (XAUUSD, US30, BTCUSD) whatever each broker calls them. list_account_instruments gives one account's own symbol for each. Example: {"category": "metals"}
Annotations the server declares
- title: List instruments
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_multi_account_ordersRecent multi-account orders (one trade on many accounts), each with its per-account result.No findings
Why it is in this group
- The name "list_multi_account_orders" says "list": a word for reading.
Description, as the server wrote it Recent multi-account orders (one trade on many accounts), each with its per-account result. Pages with limit and cursor. Example: {}
Annotations the server declares
- title: List multi-account orders
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_ordersOrders placed through fxapis, newest first, for one account or all; state `unknown` means still being confirmed, so never resend those.No findings
Why it is in this group
- The name "list_orders" says "list": a word for reading.
Description, as the server wrote it Orders 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"}
Annotations the server declares
- title: List orders
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_broker_serversMT5 broker servers matching a broker or server name, servers seen working on fxapis first.No findings
Why it is in this group
- The name "search_broker_servers" says "search": a word for reading.
Description, as the server wrote it MT5 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"}
Annotations the server declares
- title: Search broker servers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http mt5 https://api.fxapis.com/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__mt5__get_workspace",
"mcp__mt5__get_usage",
"mcp__mt5__list_accounts",
"mcp__mt5__get_account",
"mcp__mt5__get_account_status",
"mcp__mt5__get_account_figures",
"mcp__mt5__list_instruments",
"mcp__mt5__search_broker_servers",
"mcp__mt5__list_account_instruments",
"mcp__mt5__get_market_hours",
"mcp__mt5__get_quotes",
"mcp__mt5__list_orders",
"mcp__mt5__get_order",
"mcp__mt5__list_deals",
"mcp__mt5__list_multi_account_orders",
"mcp__mt5__get_multi_account_order",
"mcp__mt5__get_account_overview",
"mcp__mt5__get_symbol_snapshot"
],
"ask": [
"mcp__mt5__bring_accounts_online",
"mcp__mt5__take_account_offline",
"mcp__mt5__list_positions",
"mcp__mt5__calculate"
],
"deny": [
"mcp__mt5__place_market_order",
"mcp__mt5__place_pending_order",
"mcp__mt5__close_position",
"mcp__mt5__modify_position",
"mcp__mt5__cancel_order",
"mcp__mt5__place_multi_account_order",
"mcp__mt5__cancel_multi_account_order"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as mt5. Review it before you use it.