Read-only access to a TradeZero trading journal for AI agents. Provides trading history, account snapshots, positions, fills, round trips, statistics, and cost reconciliation with correctness rules enforced at the API boundary.
Strong domain-specific tool design with clear, detailed descriptions (avg 180 chars) and well-structured parameters. All 9 tools have explicit descriptions and input schemas with type definitions. Naming follows verb_noun convention (sync_now, get_account_snapshot, etc.). Parameters include ISO date ranges, optional filters, and sensible defaults. However, output schemas are not formally documented in the code, return types are inferred from docstrings only. Error handling guidance is minimal; tools do not indicate what to do on failure (e.g., network timeout, invalid date format). No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Parameter descriptions lack explicit format constraints (e.g., 'ISO YYYY-MM-DD' is stated but not formalized as a regex or pattern). Overall solid for a domain-specific journal tool, but falls short of A-grade polish.
Attach a written note to a session date (ISO YYYY-MM-DD, US session). Notes are stored in the local journal database only — they are never sent to the broker or anywhere else.
Live account state straight from the broker: balances, buying power, equity, and session-to-date totals (commissions, locate costs, realized). Session totals reset daily and are not historical — use get_costs for history.
The cost reconciliation: gross trading result, commission, regulatory and exchange fees, the unattributed per-share residual, and net after everything — plus the cash ledger by category (locate fees, borrow and margin interest would appear there; empty on a cash account).
Read diary notes, optionally filtered by session-date range.
Individual executions from the journal. One row per fill with price, qty, verbatim net, fees, the unattributed residual, and the execution time in ET, UTC, and Sydney. Busted (canceled) fills are excluded unless include_canceled is true. Filter by ISO date range and/or symbol.
Output schemas not formally documented. Return types are inferred from docstrings (e.g., 'list[dict]', 'dict') but lack field-level schema definitions. LLMs cannot reliably extract nested fields or plan downstream tool calls without explicit output structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite explicit risk classifications in the spec. sync_now and append_diary_note are marked WRITE; others are READ_ONLY. Annotations would help agents reason about side effects and retry safety.
Parameter format constraints stated in prose but not formalized. 'ISO date (YYYY-MM-DD)' appears in descriptions but no regex pattern or JSON Schema format constraint. LLMs may pass invalid dates (e.g., '2024-13-45') without validation feedback.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Live open positions from the broker (symbol, side, shares, average price, day/overnight). Empty when flat. Long-only account: side is always Long.
Completed trades, FIFO-matched from fills (sound on this long-only cash account). Each trip has entry/exit price, hold duration in seconds, allocated fees, and net P&L summed from verbatim netProceeds. Any still-open lots are reported separately at the end of the list.
Performance statistics over closed round trips: net, win rate, average win and loss, expectancy per trade, hold-time distribution, session count, and a per-symbol breakdown.
Pull the latest fills, cash-ledger rows, and an account snapshot from TradeZero into the local journal (idempotent; keyed on tradeId). `days` is the lookback window, max 365. Rate-limited internally to the broker's documented 1 request/second — a full-year sync takes a few seconds. Returns counts of new and total rows.
Error handling guidance absent. Tools do not document what happens on network failure, invalid input, or missing data. E.g., get_account_snapshot returns {'raw': snap} on non-dict response but does not explain recovery steps.
Pagination not implemented for list-returning tools. get_fills, get_round_trips, and get_diary_notes return unbounded lists. Large result sets risk context window exhaustion and degraded LLM reasoning.