ctrader-mcp-servers

Use this skill ALWAYS when working with any cTrader MCP server.

By spotware · 405 installs

npx skills add spotware/ctrader-skills --skill ctrader-mcp-servers

Source repository · Upstream listing

Top 5 critical quirks (inline teaser) The following 5 quirks are the most consequential as of the audit date. Full Detect / Workaround / Verify fixed / Removal criteria content lives in references/known quirks.md ; the rows below are link only teasers. See also references/self healing playbook.md for the named recovery patterns. Quirk Server One liner Link Q R10 remote amend position omitting a leg REMOVES it (not preserves it) [Q R10](references/known quirks.md q r10) Q R4 remote MARKET REJECTS absolute SL/TP — use relativeStopLoss / relativeTakeProfit (single call) or P REMOTE MARKET 2STEP (fallback) [Q R4](references/known quirks.md q r4) Q R1 remote period enum is 9 values, NOT 26 (delete granular claims) [Q R1](references/known quirks.md q r1) Q L2 local SL is absolute price, TP is raw pips (asymmetric get pending orders ) [Q L2](references/known quirks.md q l2) Q K19 both Pipettes vs display foot gun — silent market fills [Q K19](references/known quirks.md q k19) Self healing principle Both ctrader remote mcp and ctrader local mcp ship as is with documented runtime behaviors last re verified on 2026 05 14 against rest proxy 1.0.18 (Remote) and local build observed on 2026 05 14 (Local). Six Remote quirks remain ACTIVE on 1.0.18 (Q R1, Q R2, Q R3, Q R5, Q R8, Q R10). Two quirks had their error message format refined (Q R4 and Q R7 now return plain string error envelopes with actionable hints instead of JSON envelopes — both DETECT signatures cover both formats). One quirk is likely fixed (Q R11 — get deals propagation lag — passed Verify fixed on session 1 of 5; not yet removed pending 4 more confirmations). This skill describes SEMANTICS, GOTCHAS, and RECOVERY; the MCP JSON Schema is the source of truth on SHAPE. Never duplicate schema content in this skill. Every claim about runtime behavior in this skill carries a build stamp — either an as of: header on a reference file, or an Observed on: line on a quirk in references/known quirks.md . Every quirk in the ledger is self deprecating: it carries a Verify fixed probe (a session local check the agent can run) and a Removal criteria condition (the explicit signal that the server has been fixed and the entry should be deleted). When the server is fixed, delete the matching entry from references/known quirks.md — that is the entire cleanup cost. Optional follow up: grep for any stale QUIRK breadcrumbs across the reference files and remove them. On unexpected server behavior (anything deviating from BOTH the MCP JSON Schema AND the ledger), do NOT improvise — follow references/self healing playbook.md . The playbook names the pre flight gates (quote sanity, side direction, SL/TP sidedness, volume step, schema fields only, pipettes vs display detection, required fields), the post flight verification rules (re read after every mutation; for Remote amend position , always re read to confirm BOTH SL and TP legs survived per Q R10), the error classification matrix (Zod / INVALID REQUEST / 502 uProxy / plain text Local / available:false / truncated / hasMore), the unknown quirk decision tree (4 steps from STOP to provisional ledger entry), and the named patterns (P AMEND SAFE, P REMOTE MARKET RELATIVE (preferred for MARKET+SL/TP), P REMOTE MARKET 2STEP (fallback for absolute price SL/TP on MARKET), P REMOTE MARKET RANGE, P LOCAL OLDEST FIRST, P REMOTE HISTORY CHUNK). Per broker overlay extension point The skill's quirks ledger uses the Q B<n prefix as a reserved slot for future per broker overrides (lotSize divergences, symbol naming variants, broker specific SL/TP behaviors). A future assets/broker overrides.example.json overlay would carry these per broker values without restructuring this skill. NOT shipped this iteration — added on demand when broker specific divergences become a blocking class. Tool surface routing: Local HTTP ( ctrader local mcp ) vs Remote HTTP ( ctrader remote mcp ) The bound tool surface determines which cTrader MCP server is in front of you. Inspect tool names and response DTO shape to identify the family. Apply the routing rule below at the start of every cTrader related interaction; cache the result for the session. Server family Fingerprint to detect it What it does best Default routing rule Local HTTP ( ctrader local mcp ) ping , get accounts list , list charts , listChartIndicators , listPlugins , show notification , get server time ; volume in units; ISO 8601 with mandatory Z ; symbol identified by string name ( "EURUSD" ). HTTP transport bound to the cTrader Desktop application. Charts, drawings, indicators, watchlists, alerts, news, cBots, UI notifications, multi account work. Route here for any UI / visualization / cBot / chart bound workflow. Remote HTTP ( ctrader remote mcp ) get version , get assets , integer symbolId keyed tools ( get spot prices(symbolId) , get trendbars(symbolId) ); moneyDigits field in money responses; volume in cents (1 lot of forex = 10 000 000); prices in pipettes. HTTP transport against the remote REST proxy ( rest proxy ). Headless trading, broad symbol scans, trailing stop loss, MARKET RANGE , granular timeframe history. Route here when no chart / UI need exists. Both surfaces bound Both fingerprints visible. Depends on the action. Pick by capability: drawings / cBots / charts go to Local; trailing SL / MARKET RANGE / multi symbol batch quotes / granular timeframes go to Remote. Units conventions across the two servers The two servers encode the same trading concepts in different units and identifier types ; passing Local values to Remote (or the reverse) silently produces wrong sizes, wrong prices, or schema rejections. Dimension Local HTTP encoding Remote HTTP encoding Conversion script Volume Units (integer; for forex typically 1 lot = 100 000 units, but broker dependent — always read get symbol details.lotSize ). Cents (integer; 1 lot of forex = 10 000 000 cents). scripts/units encoding.py lots to units / lots to cents Price Display value (e.g., 1.21345 ). Pipettes (integer; divide by 10^pipDigits to display). scripts/pip math.py (handles both directions) Money (balance, commission, swap, P&L) Display value (e.g., 12345.67 ). Integer in 10^moneyDigits units ( moneyDigits field on the response; typically 2). scripts/units encoding.py display money / parse money Timestamp ISO 8601 with mandatory Z suffix ( 2026 01 15T14:30:00Z ). Epoch milliseconds for expirationTimestamp (integer only as of rest proxy 1.0.13); either form for history window endpoints. Passed through unchanged for Local; check field type for Remote. Symbol identifier String name ( "EURUSD" , "XAUUSD" ). Integer symbolId (resolve via get symbols , cache for the session). N/A (look up by ID) Stop loss / take profit on place order / amend order Pip distance integer ( stopLossPips , takeProfitPips ). Absolute price ( stopLoss , takeProfit ). scripts/pip math.py pips to price / price to pips Stop loss and take profit: pip distance vs absolute price Order placement tools take SL / TP as pip distance from entry ; position amendment tools take SL / TP as absolute price . The convention depends on which TOOL is called, not which server. Tool Server SL / TP form place market order , place limit order , place stop order , place stop limit order Local Pip distance ( stopLossPips , takeProfitPips ). amend order (pending order) Local Pip distance ( stopLossPips , takeProfitPips ). amend position (open position) Local Absolute price ( stopLoss , takeProfit ). create order Remote Absolute price ( stopLoss , takeProfit ). See references/remote http server.md for MARKET order SL/TP rejection (P REMOTE MARKET 2STEP). amend order Remote Absolute price ( stopLoss , takeProfit ). amend position Remote Absolute price ( stopLoss , takeProfit ). close position