A Python-based trading automation runner that connects to a Liquid MCP server. It hands a rulebook to an LLM model, loops through sub-ticks, and maintains a ledger of trading decisions. Makes no trading decisions itself; all judgement lives in the rulebook.
Critical failures across all dimensions. No input schemas visible in source code, cannot verify parameter types, constraints, or structure. Tool descriptions are present but extremely generic (10-40 chars), providing minimal LLM guidance. No output schemas documented. No error handling patterns. No parameter descriptions. Tools appear to be inferred from runner.py configuration rather than explicitly registered with full definitions. This server would require complete schema and documentation overhaul before production use.
Analyze market conditions
Check automated trading status
Cancel an open order
Close an open position
Disable paper trading mode (gated tool - requires approval)
Enable automated trading (gated tool - requires approval)
Execute a trading order
No input schemas visible in source code. Cannot verify parameter types, constraints, enums, or descriptions. All 19 tools score 0 on schema dimension.
Tool descriptions are extremely generic (10-40 characters). Examples: 'Retrieve current portfolio holdings and positions' (52 chars) is acceptable, but 'Analyze market conditions' (25 chars) lacks context for LLM selection. No descriptions explain WHEN to use each tool vs similar ones (e.g., analyze_market vs show_market_overview).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 34 | 2026-07-28+ | v2 |
Execute take-profit and stop-loss orders
Retrieve market news
Retrieve current portfolio holdings and positions
Get positioning pulse data
Retrieve technical indicator values
Check paper trading status
Search for available markets
Display price chart data
Display market overview information
Display order book data
Update trading leverage (gated tool - requires approval)
View all open orders
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields. No indication of what fields are returned, their types, or whether results are paginated.
No error handling patterns visible. No guidance on retryability, user-fixable errors, or recovery steps. Destructive tools (execute_order, close_position, cancel_order, update_leverage) lack confirmation or dry-run support.
Tool definitions appear inferred from runner.py configuration (READ_TOOLS, WRITE_TOOLS, GATED_TOOLS lists) rather than explicitly registered with full MCP schemas. No evidence of actual tool registration code in provided source.