Connect your agent to pre-computed market context that improves reasoning and reduces token usage.
Strong tool definitions with clear naming, comprehensive descriptions, and well-structured schemas. All 9 tools have verb-based names (get_*, add_*, remove_) and detailed descriptions. Parameter schemas are present and mostly complete with type definitions and constraints. Primary gaps: (1) get_summary has extremely verbose description (1500+ chars, well above 1024 baseline); (2) some tools lack explicit output schema documentation; (3) error handling guidance is minimal across most tools; (4) a few parameters in get_search and get_summary use JSON-encoded strings rather than native types, adding parsing burden on LLMs.
Add tickers to the user's saved watchlist. Duplicates are skipped. Only call this when the user explicitly asks to track, save, or watch a ticker; do not add tickers just because they came up in conversation. The watchlist is capped by the plan's watchlist_limit (see get_account), so the request can be rejected or accepted only in part. Report back which tickers the response actually confirms rather than assuming every requested ticker was added.
Get your account details including current plan tier, monthly credit limits, and current usage. Response includes tier, limits (monthly_requests, overage_enabled, watchlist_limit, search_results, webhook_urls, history_days), and usage (monthly_requests_used, monthly_requests_remaining, credit_balance for pay-per-use accounts). Also returns scheduled_tier and scheduled_change_at if a plan change is pending.
Get stored end-of-day OHLCV candles for a stock, ETF, or crypto ticker, daily or weekly. Use this for exact-return calculations, charts, and backtests after get_summary identifies a setup. Results are paginated; pass next_cursor back as cursor to continue. Equity and ETF bars are split-and-dividend adjusted; crypto bars are unadjusted. Credit cost is 1 credit per 100 bars returned, rounded up, with a 1 credit minimum.
Get the schema of all available fields and their valid band values. Use this when the user asks 'what fields are available?', 'what bands does momentum_rsi_zone have?', 'what sectors exist?', or when you need to validate field/band names before calling get_summary with event parameters or get_search with filters.
get_summary description exceeds 1024-character baseline by 50% (1500+ chars), violating description brevity guidance. LLM documentation should be concise yet actionable.
get_search uses JSON-encoded string parameters ('filters', 'fields') instead of native types. Forces LLM to generate JSON strings, which are error-prone and reduce token efficiency. Same issue in get_summary 'fields' parameter.
Output schemas are documented in prose descriptions but not formally typed as JSON Schema objects. LLMs cannot programmatically extract return structure; they must infer from description text.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Search for assets matching filter criteria, including categorical states (e.g. oversold assets, strong uptrends, bull/bear flag setups, triangle or wedge setups, free-cash-flow surplus or burn, recent golden crosses, weekly stage 2 assets near the 40w MA with high volume, volatility squeeze active, volume climax detected, insider buying zone, sector-aligned breakouts) or rankings by a field such as market_cap on a historical date. Pass filters as a JSON-encoded array of {field, op, value} objects. Use get_schema to discover valid field names; fields use clean flat names for raw values such as pe_ratio, ma8, ma200, momentum_rsi, momentum_stochastic_k, and momentum_stochastic_d (aliases rsi, stochastic_k, stochastic_d accepted; all three are 0-100, null while lookbacks form, filterable and sortable, available for stocks, ETFs, and crypto), and full expanded names for semantic fields such as momentum_rsi_zone, pattern_bull_flag, pattern_bull_flag_breakout, pattern_bear_flag_breakdown, pattern_ascending_triangle, pattern_rising_wedge, trend_ma_crossover_event, trend_distance_ma40, trend_stage, fundamentals_free_cash_flow, insider_zone, sector_agreement, volatility_squeeze_active, volume_climax_detected, fundamentals_analyst_consensus, and fundamentals_earnings_proximity, fundamentals_earnings_proximity_basis. Use fields to control returned columns and sort_by to rank results server-side.
Get pre-computed market intelligence for a specific stock, crypto, or ETF ticker. Supports 4 modes: (1) Snapshot (default) for the latest categorical state; (2) Historical snapshot by date; (3) Historical series with start and end dates; (4) Events by field and optional band, including aftermath fields on paid tiers, weekly trend_stage analysis, pattern setup states such as pattern_bull_flag and pattern_ascending_triangle, MA signal fields, trend_ma_crossover_event, MA distance lookbacks such as trend_distance_ma40, and stock-only fundamentals_free_cash_flow events. Add stats=true in event mode to return aggregate event-band and aftermath distributions instead of raw rows. Results can include freshness via as_of_date, same-candle OHLCV, market_cap, market_cap_tier, trend, momentum (including raw rsi, stochastic_k, stochastic_d alongside their zones, divergence_detected, divergence_type, stochastic_zone), volatility (including squeeze_active, squeeze_days), volume (including climax_detected, climax_type), patterns, support/resistance, levels (paid tiers), sector_context (rsi_zone, trend, agreement, asset_vs_sector_rsi), and stock-only fundamentals such as raw pe_ratio (latest ratio on or before the snapshot date; negative values preserved and unavailable values null), free_cash_flow, growth_zone, earnings_proximity, earnings_proximity_basis, analyst_consensus, valuation_percentile, and nested insider_activity when available. Raw momentum values (momentum.rsi 0-100, momentum.stochastic_k, momentum.stochastic_d) are the exact numbers behind their zones for all asset classes and both timeframes, null while lookbacks form; query zone transitions via momentum_rsi_zone / momentum_stochastic_zone, not the raw values. Summary keeps sibling _meta objects off by default; set meta=true or request explicit *_meta fields when paid-tier stability metadata is needed.
Get the user's saved watchlist. Returns an array of tickers currently being tracked.
Get changes to the user's watchlist. Returns tickers added or removed since the last sync point, or over the past week.
Remove tickers from the user's saved watchlist. Only call this when the user explicitly asks to stop tracking a ticker.
Error handling guidance is absent or minimal. No tool descriptions tell LLMs what to do if a call fails (retryable? user-fixable? fatal?). Example: get_summary with invalid ticker gives no recovery hint.
get_search 'sort_by' parameter accepts any 'valid field name' but does not enumerate options or link to get_schema. LLM must guess valid field names or make speculative calls.
get_watchlist_changes lacks clarity on selection between 'last sync point' and 'past week' modes. No input parameter shown; unclear how LLM controls which mode runs.