Smart-money-concepts market analysis (BOS/CHoCH, order blocks, FVGs, liquidity sweeps) over the Model Context Protocol — for any AI agent.
Four well-structured tools with consistent naming (smc_* prefix), comprehensive parameter schemas, and detailed descriptions. All tools follow verb_noun pattern and include proper JSON Schema with type constraints, min/max bounds, and enums. Descriptions are domain-specific and actionable (150 - 250 chars). Tool annotations present (readOnlyHint, destructiveHint, idempotentHint, openWorldHint). Main gaps: output schemas documented only in docstrings (not in formal response_schema field); error handling returns helpful text but lacks structured error classification; no pagination support despite potentially large result sets.
Find fair value gaps — three-candle imbalances price tends to rebalance. Reports each gap's zone, direction, and whether it has been filled. Unfilled gaps act as magnets and make natural entry or target zones. Returns (JSON mode): {"symbol","interval", "fair_value_gaps": [{"index","top","bottom","kind","filled", "filled_index","time"}]}.
Find liquidity sweeps — swing highs/lows wicked through and rejected. A sweep takes stops resting beyond an obvious swing, then price closes back on the original side. Often precedes a reversal, and distinct from a BOS (which closes *through* the level). Returns (JSON mode): {"symbol","interval", "liquidity_sweeps": [{"index","swept_level","swept_swing_index", "kind","time"}]}.
Find order blocks — the last opposite candle before a structure break. Each block is the institutional footprint before an impulsive move, reported with its zone (top/bottom), direction, and whether price has since mitigated (revisited) it. Unmitigated blocks are the ones traders usually watch. Returns (JSON mode): {"symbol","interval", "order_blocks": [{"index","top","bottom","kind","break_index", "mitigated","mitigated_index","time"}]}.
Read market structure: swing points, BOS/CHoCH events, and trend bias. Returns the chronological sequence of structure breaks and the current directional bias (bullish / bearish / neutral) for the requested instrument and timeframe. Returns (JSON mode): {"symbol", "interval", "bias", "events": [{"index","price","event","direction","time"}], "swing_count"}.
Output schemas not formally declared in tool registration. Schemas documented only in docstrings and return examples (JSON mode: {...}). LLMs cannot parse docstring examples reliably; formal response_schema field required.
Error handling returns helpful text (_err helper) but lacks structured error classification. LLMs cannot distinguish retryable (network timeout) from user-fixable (invalid symbol) from fatal errors. No error codes or categories.
No pagination support. Tools accept 'limit' (max 1000) but return all matching results in a single response. Large result sets (e.g., 1000 candles × 12 events) risk context window exhaustion. Missing offset/page_size and total_count.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Markdown response format returns truncated results ([-12:] slice in code). Agents cannot see full analysis if more than 12 events/blocks exist. JSON mode works but markdown mode silently drops data.
No dry-run or confirmation step for analysis tools. While read-only, tools depend on external data (yfinance) which may be stale or unavailable. No graceful degradation or fallback guidance when data fetch fails.