Multi-language reference implementation of the APEX Protocol, an MCP server for trading and market data operations. Includes TypeScript, Go, Rust, and Java implementations with support for session management, account operations, order placement, market data, risk management, and various asset classes (FX, CFD, Crypto, Futures).
APEX is a reference implementation with 24 tools covering trading workflows. Strengths: all tools have descriptions (194-char baseline met), input schemas present with types and enums, clear risk classifications (READ_ONLY, DESTRUCTIVE, REVERSIBLE, WRITE). Weaknesses: descriptions are functional but terse (many 50-100 chars, below the 194-char baseline); parameter descriptions lack detail on constraints, ranges, and format expectations; output schemas not documented in source; error handling guidance absent; no tool annotations (readOnlyHint/destructiveHint) despite risk metadata available. Tool naming follows verb_noun pattern well (authenticate, place, cancel, close). Composition is sound, tools are single-responsibility and chainable (e.g., authenticate → account.summary → order.place). However, parameter documentation is sparse: 'modifications' in apex.order.modify is an untyped object; 'currency' in apex.account.summary lacks format guidance; 'timeframe' enums are present but descriptions don't explain M1 vs M5 vs H1 semantics.
Retrieve account transaction history.
List all orders in the account.
List all open positions in the account.
Retrieve account summary including balance, equity, and margin information.
Get CFD contract specifications.
Get current funding rate for a crypto perpetual.
Estimate liquidation price for a crypto position.
Output schemas not documented. No tool returns a documented response structure. LLMs cannot plan downstream calls or extract required fields (e.g., what does apex.account.summary return? Does it include account_id for chaining to apex.order.place?).
Parameter descriptions lack constraint details. 'currency' in apex.account.summary has no format (ISO 4217?). 'limit' in apex.account.history has no range (1-1000?). 'modifications' in apex.order.modify is an untyped object with no guidance on valid fields.
No error handling guidance. Tools lack recovery hints. E.g., if apex.order.place fails due to insufficient margin, does the LLM retry, ask the user, or call apex.account.summary first? No error classification or actionable messages documented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | <=2025-11-25 | v2 |
Get futures contract rollover information.
Get current FX rates.
Get historical candle data for an instrument.
Get current market quote for an instrument.
Cancel an existing order.
Modify an existing order or position.
Place a new order.
Query the status of an order.
Close an open position.
Query or control the kill switch for risk management.
Get risk summary for the account.
Acknowledge receipt of notifications and manage session state.
Establish an authenticated trading session. The broker validates credentials directly and binds the result to the MCP session.
Query the full capability manifest of this broker implementation.
Send a heartbeat to maintain session liveness and receive server status.
Force-close the current partial candle for a given timeframe. Test-only.
Stop the tick engine. Test-only tool for deterministic event counts.
Tool annotations missing. Risk metadata (READ_ONLY, DESTRUCTIVE, REVERSIBLE, WRITE) exists in source but not exposed as MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot infer safety properties from tool names alone.
Descriptions are terse (50-100 chars typical; baseline 194 chars). E.g., 'Query the full capability manifest of this broker implementation' (60 chars) lacks WHEN to call it or what it reveals. Descriptions should explain intent, prerequisites, and downstream use.