trading212-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| T212_ENV | No | Target environment: demo (paper trading) or live (real money) | demo |
| T212_API_KEY | Yes | API key (Basic auth username), generated in the Trading 212 app | |
| T212_API_SECRET | Yes | API secret (Basic auth password) | |
| T212_MCP_ENABLE_TRADING | No | Set to true/1/yes/on to register the write tools | off |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tasks | {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
} |
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_account_summaryA | Get the account summary: cash breakdown, investments, and overall result. Returns a dict with:
Rate limit: 1 request per 5 seconds. |
| list_exchangesA | List exchanges with working schedules trimmed to session open/close events. Returns one entry per exchange: Rate limit: 1 request per 30 seconds (data refreshes server-side every 10 minutes). |
| list_instrumentsA | Search the tradable instrument universe. The API returns the full universe (roughly 17,000 instruments) in one
response with no server-side filtering, so Rate limit: 1 request per 50 seconds — strict. Every call fetches the whole universe, so batch your lookups into one broad search rather than issuing several calls in quick succession. Returns per instrument: |
| get_portfolioA | List all open positions in the account. Returns up to Rate limit: 1 request per 1 second. |
| get_positionA | Fetch a single open position by its Trading 212 ticker. Returns the same trimmed fields as get_portfolio: ticker, quantity (shares, fractional allowed), averagePrice and currentPrice (per share, instrument currency), ppl (unrealized profit/loss, account currency), fxImpact (nullable, account currency), initialFillDate (ISO 8601). Errors if there is no open position for the ticker. Rate limit: 1 request per 1 second. |
| list_ordersA | List all pending (not yet filled/cancelled/expired) equity orders. Returns a list of order objects with: id, ticker (e.g. 'AAPL_US_EQ'),
type (LIMIT|STOP|MARKET|STOP_LIMIT), side (BUY|SELL), status,
quantity, filledQuantity, limitPrice/stopPrice (when applicable),
timeInForce (DAY|GOOD_TILL_CANCEL), currency, extendedHours,
createdAt. The API returns every pending order; |
| get_orderA | Fetch one pending equity order by its id. Returns the order's id, ticker, type (LIMIT|STOP|MARKET|STOP_LIMIT), side (BUY|SELL), status, quantity, filledQuantity, limitPrice / stopPrice (when applicable), timeInForce, currency, extendedHours and createdAt. Responds HTTP 404 if no pending order has that id. Rate limit: 1 request per 1 second. |
| list_piesA | List all pies in the account with money-in, progress, and performance. Returns a list of pie summaries: id (use with get_pie), cash (money put into the pie, in the account currency), progress (fraction of the goal reached, 0..1), status ("AHEAD" | "ON_TRACK" | "BEHIND"), dividendDetails (gained/inCash/reinvested), and result (invested value, absolute result, result coefficient, current value). The API returns all pies; the limit is applied after fetching. Rate limit: 1 request per 30 seconds. |
| get_pieA | Fetch one pie's full definition and per-instrument breakdown. Returns the pie settings (id, name, icon, goal in account currency, creationDate, endDate, dividendCashAction, initialInvestment, instrumentShares as a ticker-to-weight map, publicUrl) plus an instruments list with each holding's ticker, ownedQuantity, currentShare vs expectedShare (weights, 0..1), result, and any issues (e.g. DELISTED, SUSPENDED) with severity. Raises HTTP 404 if the pie does not exist. Rate limit: 1 request per 5 seconds. |
| list_historical_ordersA | List executed (historical) equity orders, newest first. Returns {"items": [...], "next_cursor": str | None}. Each item has an
"order" part (id, ticker, type LIMIT|STOP|MARKET|STOP_LIMIT, side
BUY|SELL, status, quantity, filledQuantity, limitPrice, stopPrice,
timeInForce DAY|GOOD_TILL_CANCEL, currency, createdAt) and a "fill"
part (filledAt, price, quantity, type e.g. TRADE, tradingMethod
TOTV|OTC) plus a "walletImpact" with netValue and realisedProfitLoss
in the account currency. Pass next_cursor back as |
| list_dividendsA | List paid-out dividends. Returns {"items": [...], "next_cursor": str | None}. Each item:
ticker, paidOn (ISO 8601), amount (net, in the account currency),
grossAmountPerShare (in the instrument currency), quantity (shares
held), type (e.g. ORDINARY, INTEREST, CAPITAL_GAINS), reference.
Pass next_cursor back as |
| list_transactionsA | List cash transactions (deposits, withdrawals, fees, transfers). Returns {"items": [...], "next_cursor": str | None}. Each item:
type (WITHDRAW | DEPOSIT | FEE | TRANSFER), amount (in the
transaction currency), currency, dateTime (ISO 8601), reference
(transaction ID). Unlike the other history endpoints the cursor here
is a string, not a number. Pass next_cursor back as |
| list_exportsA | List requested CSV export reports and their processing status. Returns {"items": [...]} where each report has: reportId, timeFrom, timeTo, dataIncluded (the four include* flags), status, downloadLink (populated once the report is finished). Status values are Mixed-Case, not upper-case: "Queued", "Processing", "Running", "Canceled", "Failed", "Finished". Poll this after request_export until the report's status is "Finished", then fetch the CSV from downloadLink. Rate limit: 1 request per 1 minute. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Each tool targets a distinct resource or action (e.g., orders vs. positions vs. pies), and similar operations are differentiated by scope (list vs. single item) or state (pending vs. historical). No overlapping purposes exist.
All tools follow a consistent `verb_noun` pattern with snake_case: `get_*` for single items and `list_*` for collections. No mixed conventions or vague verbs.
13 tools cover the major facets of a trading account (overview, orders, positions, pies, dividends, exchanges, exports, instruments, transactions) without being excessive. Each tool earns its place.
The server is entirely read-only; it lacks tools for creating, modifying, or canceling orders, managing pies (create/update), or initiating trading actions. For a trading platform, these are critical gaps that will limit agent functionality.