# io.github.Hlobo-dev/tengu-firm (remote · firm.tengu.co)

One MCP key: prices, fundamentals, SEC filings, insider/13F/congressional trades. 336 tools.

- Trust score: 61/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-21

## Components

- remote · `firm.tengu.co`: 61/100 (this document), [markdown](https://verifymcp.io/servers/hlobo-dev-tengu-firm/firm.md), [page](https://verifymcp.io/servers/hlobo-dev-tengu-firm/firm)

## Channel facts

- Endpoint: `https://firm.tengu.co/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `2.114`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-21.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 337 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 38166 tokens (~113/item across 337 items; 337 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 73/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 18% of tool parameters carry a description.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http hlobo-dev-tengu-firm https://firm.tengu.co/mcp
```

### Codex

```toml
[mcp_servers.hlobo-dev-tengu-firm]
url = "https://firm.tengu.co/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "hlobo-dev-tengu-firm": {
      "type": "remote",
      "url": "https://firm.tengu.co/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add hlobo-dev-tengu-firm --url https://firm.tengu.co/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  hlobo-dev-tengu-firm:
    url: "https://firm.tengu.co/mcp"
```

### Other

```json
{
  "mcpServers": {
    "hlobo-dev-tengu-firm": {
      "type": "http",
      "url": "https://firm.tengu.co/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-20 (score 61, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-18 (score 60, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-16 (score 59, +1)

- [functional] Server version: 2.116 → 2.117

### 2026-08-14 (score 58, +1)

- [functional] Server version: 2.114 → 2.116
- [functional] New tool “tengu_crypto_universe”
- [cosmetic] “tengu_v3_intel_darkpool_recent” added an optional parameter “freshness”
- [cosmetic] “tengu_v3_intel_darkpool_ticker” added an optional parameter “freshness”
- [cosmetic] “tengu_v3_intel_gex” added an optional parameter “freshness”
- [cosmetic] “tengu_v3_intel_macro_snapshot” added an optional parameter “freshness”
- [cosmetic] “tengu_v3_intel_off_exchange” added an optional parameter “freshness”
- [cosmetic] “tengu_v3_intel_options_flow” added an optional parameter “freshness”
- [cosmetic] “tengu_v3_intel_options_flow_ticker” added an optional parameter “freshness”
- [cosmetic] “tengu_v3_system_health” added an optional parameter “freshness”

### 2026-08-13 (score 57, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-08-12 (score 57)

First indexed and scored.

## MCP tools (337)

### `tengu_snapshot` (~71 tokens)

Live price snapshot for one ticker: latest price plus basic trading stats. Call it when the user asks 'where is X trading right now?' or needs a current quote before any single-name analysis. Heavy endpoint — fetch one ticker per call.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_insider_clusters` (~54 tokens)

Clusters of insider buying across companies: names where multiple distinct insiders bought around the same time. Call it when the user asks 'where are insiders buying?' or wants market-wide insider conviction rather than one company's filings.

### `tengu_crypto_universe` (~147 tokens)

The tradeable crypto universe, ranked by 24h dollar volume across the WHOLE book (~419 pairs) in one call. Stablecoins (USDT/USDC/UST...) are excluded — huge volume, no directional tradeability. Call this to get the liquid crypto candidate set instead of a hand-picked list. IMPORTANT: this is a LIQUIDITY ranking, NOT a conviction ranking — `rank` orders by tradeability, never by expected return. FIRM has no validated crypto edge, so these are candidates by tradeability only; never present `rank` as a signal.

Input parameters:

- `limit` (integer)
- `min_dollar_volume` (number)

### `tengu_crypto` (~125 tokens)

Live crypto quote from the market-data feed (real-time entitlement, 439 pairs): last-trade price, 24h change/volume (UTC-day basis), day + prev-day OHLC, optional last-7 daily bars, honest as_of. PRIMARY tool for 'what is BTC at?' — accepts BTC/BTCUSD/X:BTCUSD plus a vs currency (e.g. EUR); unknown symbols return a structured 404.

Input parameters:

- `series` (boolean)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `vs` (string)

### `tengu_macro` (~61 tokens)

One-call macro dashboard: VIX, DXY, treasury spreads, fear-greed, and the current regime read. Call it FIRST for any 'how is the overall market / macro backdrop?' question, or to frame a single-name view against market conditions.

### `tengu_regime` (~70 tokens)

Current market regime label plus the model's regime probabilities. Call it when the user asks 'what regime are we in?' or before positioning advice that depends on the prevailing regime; use tengu_v2_regime_forecast for the forward view and tengu_v2_regime_history for the past.

### `tengu_research_knowledge` (~16 tokens)

Research knowledge base

### `tengu_status` (~35 tokens)

System status for the service. Call when the user asks whether the system/data pipeline is healthy or why data looks missing/stale.

### `tengu_ready` (~41 tokens)

Readiness flags showing which subsystems are up and serving. Call when the user asks whether the system/data pipeline is healthy or why data looks missing/stale.

### `tengu_logs` (~40 tokens)

Recent service log lines. Call when the user asks whether the system/data pipeline is healthy or why data looks missing/stale and status alone doesn't explain it.

### `tengu_cache_stats` (~39 tokens)

Cache hit-rate statistics for the data layer. Call when the user asks whether the system/data pipeline is healthy or why data looks stale or slow.

### `tengu_v2_intervals` (~95 tokens)

Conformal prediction intervals for one ticker's forecast: a calibrated lower/upper band at the requested miscoverage alpha (default 0.1 = 90% interval). Call it when the user asks 'how confident is the model?' or wants an uncertainty range around a prediction rather than just a point estimate.

Input parameters:

- `alpha` (number)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v2_drift` (~61 tokens)

Feature and prediction drift over a rolling window (default 30 days). Call it when the user asks whether the models are still well calibrated, why predictions look off, or whether model inputs have shifted recently.

Input parameters:

- `window_days` (integer)

### `tengu_v2_feature_importance` (~72 tokens)

Top-N feature importances for the prediction models (default top 50, optionally filtered to one model). Call it when the user asks 'what is the model actually looking at?' or which inputs are driving current predictions.

Input parameters:

- `model` (string)
- `top_n` (integer)

### `tengu_v2_factor_decay` (~58 tokens)

IC/IR half-life per factor — how fast each factor's predictive power decays. Call it when the user asks which signals are going stale, how long a factor's edge lasts, or before weighting factors in a strategy.

### `tengu_v2_regime_forecast` (~71 tokens)

Forecast regime probabilities N days ahead (default 21-day horizon). Call it when the user asks 'is the regime about to change?' or wants the forward market-state outlook rather than today's label — use tengu_regime for the current read.

Input parameters:

- `horizon_days` (integer)

### `tengu_v2_regime_history` (~63 tokens)

Historical regime labels over the last N days (default 180). Call it when the user asks how long the current regime has lasted, when the last regime shift happened, or wants past behavior broken out by regime.

Input parameters:

- `days` (integer)

### `tengu_v2_var` (~76 tokens)

Portfolio VaR and CVaR at a chosen horizon and confidence (defaults: 1-day, 99%). Call it when the user asks 'how much could the portfolio lose?' or needs a tail-risk number before sizing or hedging decisions.

Input parameters:

- `confidence` (number)
- `horizon_days` (integer)

### `tengu_v2_stress` (~54 tokens)

Stress-test scenarios from the risk engine. Call it when the user asks 'what happens if things go bad?' before sizing risk; use tengu_v2_crash_scenarios to replay specific historical crashes.

### `tengu_v2_crash_scenarios` (~62 tokens)

Historical crash replay through past market crash episodes. Call it when the user asks 'how would this have held up in previous crashes?' or wants tail risk anchored to real historical events; use tengu_v2_stress for hypothetical scenarios.

### `tengu_v2_signal_correlation` (~52 tokens)

Correlation matrix across the voter signals feeding the ensemble. Call it when the user asks whether the model's signals are independent or redundant — high pairwise correlation means the vote count overstates conviction.

### `tengu_v2_short_interest` (~77 tokens)

Short interest for one ticker: shares short, days-to-cover (DTC), and fails-to-deliver (FTD). Call it FIRST for any 'is X heavily shorted / squeeze candidate?' question or before evaluating short-side risk in a position.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v2_alpha_discoveries` (~84 tokens)

Mined alpha expressions from the research pipeline, filtered to a minimum information ratio (min_ir, default 0.5) and capped at `limit` (default 25). Call this when the user asks what alpha signals or factor expressions the research engine has actually discovered.

Input parameters:

- `limit` (integer)
- `min_ir` (number)

### `tengu_v2_strategy_evolution` (~80 tokens)

Strategy genealogy with out-of-sample (OOS) scores — how each evolved strategy variant descends from its parents and how it validated OOS, up to `limit` entries (default 50). Call this when the user asks how strategies were developed, mutated, or which generations survived validation.

Input parameters:

- `limit` (integer)

### `tengu_v2_research_datasets` (~148 tokens)

Discover the 39 licensed research datasets servable via the research-dataset reader — equity prices (daily/monthly/delistings/distributions/mutual funds), fundamentals (annual/quarterly/segments/customers/supply-chain), analyst estimates (summary/detail/guidance/price-targets/actuals/recs), implied volatility, securities-finance (full-history CDS + short interest), transcripts/ratings/key-developments, board relationships, forensic-audit filings, syndicated loans, ESG ratings, crowd estimates, TRACE bond trades and Fama-French factors. Call FIRST when unsure of a slug; not_ingested lists any slug awaiting a table (currently empty).

### `tengu_v2_research_read` (~156 tokens)

Read any licensed research dataset by slug (discover via tengu_v2_research_datasets). ?ticker= pushes an exact server-side filter down the dataset's own symbol column when it has one; datasets keyed by an internal security id instead state explicitly that ticker was ignored. The `implied_vol_by_ticker` slug REQUIRES ?ticker= and resolves the symbol to that id automatically before pushdown. The `cds_composites` slug serves the FULL 2005–2025 spread history. Unfiltered reads are capped at 5000 rows.

Input parameters:

- `dataset` (string, required): Path parameter 'dataset' (required).
- `limit` (integer)
- `ticker` (string)

### `tengu_v3_agents_list` (~55 tokens)

Catalogue of every agent in the swarm — one entry per agent. Call this when the user asks which agents exist, what the swarm is composed of, or to resolve an agent's name before drilling into its output.

### `tengu_v3_agent_status` (~36 tokens)

Latest heartbeat + stats for one agent

Input parameters:

- `agent_name` (string, required): Path parameter 'agent_name' (required).

### `tengu_v3_agent_latest` (~49 tokens)

Recent outputs from a named agent

Input parameters:

- `agent_name` (string, required): Path parameter 'agent_name' (required).
- `limit` (integer)
- `ticker` (string)

### `tengu_v3_trade_setups` (~206 tokens)

Top trade setups from the decision engine with **defensive-alternates baked in**. When the screen is one-sided (>=70% same direction across 3+ picks), the response carries `universe_skew` = 'bearish' | 'bullish' | 'mixed' AND a `regime_warranted_alternative` block containing the editorial fallback basket (defensive | cash_heavy | value_tilt | momentum). Each alternative carries strategy label, curated candidates with thesis per name, and a one-sentence rationale. Brain consumes the alternative when the primary picks don't fit the user's risk frame — e.g. all-bearish screen on a long-bias capital-allocation query surfaces the `defensive` basket so the model never has to refuse or invent. Schema is ADDITIVE — primary `setups` array unchanged from v2.41.

Input parameters:

- `limit` (integer)
- `min_conviction` (number)

### `tengu_v3_universe_scan` (~75 tokens)

Latest universe-scanner output: the most recent scan results across the tradable universe, up to `limit` names (default 100). Call this when the user asks what the scanner is flagging right now or wants a market-wide sweep before drilling into single tickers.

Input parameters:

- `limit` (integer)

### `tengu_v3_ultimate_decision` (~69 tokens)

Ultimate-engine aggregate decision for one ticker — the top-level verdict aggregated across the engine stack. PRIMARY tool for 'so what's the final call on <ticker>?' — call it when the user wants one consolidated decision rather than raw component signals.

Input parameters:

- `ticker` (string)

### `tengu_v3_position_monitor` (~23 tokens)

Live position monitor (exits, stops, flags)

### `tengu_v3_cost_estimate` (~103 tokens)

Pre-trade expected execution cost for a ticker: spread, market impact, and commission for a given qty (default 100) and side (buy/sell). Call it to know what a trade will actually cost before sizing or routing it; use twap_plan/vwap_plan for the execution schedule itself.

Input parameters:

- `qty` (integer)
- `side` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_slippage` (~46 tokens)

Realised slippage stats (mean/median/p95)

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).
- `window_days` (integer)

### `tengu_v3_twap_plan` (~105 tokens)

TWAP child-order schedule for a ticker: a qty (default 100) sliced into evenly-timed child orders over `minutes` (default 60). Call this when the user asks how to work an order over time; use vwap_plan for a volume-curve schedule and cost_estimate for expected cost.

Input parameters:

- `minutes` (integer)
- `qty` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_vwap_plan` (~95 tokens)

VWAP child-order schedule for a ticker: a qty (default 100) sliced along the intraday U-curve volume profile. Call this when the user wants an order worked in line with typical intraday volume; use twap_plan for even time-slicing and cost_estimate for expected cost.

Input parameters:

- `qty` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_smart_route` (~51 tokens)

Recommended venue mix (lit/dark/algo)

Input parameters:

- `qty` (integer)
- `side` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_strategies_list` (~58 tokens)

Catalogue of the 21-strategy library — one entry per strategy. Call this when the user asks which strategies exist or what the system can run, or to resolve a strategy name before drilling into its evolution or signals.

### `tengu_v3_strategy_signals` (~43 tokens)

Latest signals from a named strategy

Input parameters:

- `limit` (integer)
- `strategy_name` (string, required): Path parameter 'strategy_name' (required).

### `tengu_v3_strategy_metrics` (~35 tokens)

Historical metrics for a named strategy

Input parameters:

- `strategy_name` (string, required): Path parameter 'strategy_name' (required).

### `tengu_v3_signals_fusion` (~72 tokens)

Latest fused signals across all voters — the combined signal after voter aggregation, up to `limit` names (default 100). Call this when the user asks what the system's current signals are overall; use signals_mtf for one ticker's timeframe alignment.

Input parameters:

- `limit` (integer)

### `tengu_v3_signals_mtf` (~92 tokens)

One EQUITY cross-horizon ensemble row for a ticker. Despite the legacy `mtf` path name, the warehouse does NOT emit independent per-timeframe rows, so this tool cannot confirm 1m/4h/1w agreement and must not be cited as multi-timeframe evidence. Crypto requests fail closed.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_signals_veto` (~68 tokens)

Active veto state — which risk, regime, or circuit-breaker (CB) vetoes are currently in force over signals. Call it to know whether signals are being suppressed before trusting any signal read; PRIMARY for 'why isn't the system acting on <ticker>?'.

### `tengu_v3_signals_cross_asset` (~58 tokens)

Cross-asset regime signals — the regime read taken across asset classes rather than from single tickers. Call this when the user asks about the broader market regime or wants cross-asset confirmation of a single-asset view.

### `tengu_v3_self_healing` (~47 tokens)

Recent and pending self-healing actions the system has taken or queued. Call when the user asks whether the system/data pipeline is healthy or why data looks missing/stale.

### `tengu_v3_alerts_active` (~24 tokens)

Currently-active alerts

Input parameters:

- `severity` (string)

### `tengu_v3_system_health` (~48 tokens)

Aggregate system health with per-subsystem status. Call when the user asks whether the system/data pipeline is healthy or why data looks missing/stale.

Input parameters:

- `freshness` (string)

### `tengu_v3_metrics` (~29 tokens)

Recent system metrics (latency/QPS/error)

Input parameters:

- `window_minutes` (integer)

### `tengu_v3_api_quotas` (~56 tokens)

Per-feed external API quota usage and cap status (news, news-analytics, market-data, alt-data). Call when the user asks whether the system/data pipeline is healthy or why data looks missing/stale.

### `tengu_v3_accuracy` (~78 tokens)

Realised-vs-predicted accuracy over a rolling window (window_days, default 90) — how well predictions matched what actually happened. Call this when the user asks how accurate the system has been or wants a track record before trusting a new call; use prediction_tracker for individual predictions.

Input parameters:

- `window_days` (integer)

### `tengu_v3_resolver_status` (~18 tokens)

Outcome-resolver status

### `tengu_v3_prediction_tracker` (~76 tokens)

Recent predictions with their resolution state, up to `limit` entries (default 200) — each call and whether it has resolved yet and how. Call this when the user asks what the system has predicted lately or how specific calls turned out; use accuracy for the aggregate hit-rate.

Input parameters:

- `limit` (integer)

### `tengu_v3_optimizer_latest` (~48 tokens)

Latest optimizer weights — the current weight set from the most recent optimization run. Call this when the user asks what the optimizer is currently recommending or how the latest run set its weights.

### `tengu_v3_memory_recall` (~35 tokens)

Recall memory items by free-text query

Input parameters:

- `limit` (integer)
- `query` (string)

### `tengu_v3_memory_reflections` (~26 tokens)

Post-trade reflections journal

Input parameters:

- `limit` (integer)

### `tengu_v3_backtest_runs` (~26 tokens)

List recent backtest runs

Input parameters:

- `limit` (integer)

### `tengu_v3_backtest_run_detail` (~38 tokens)

Detail for a single backtest run

Input parameters:

- `run_id` (string, required): Path parameter 'run_id' (required).

### `tengu_v3_lab_strategies` (~27 tokens)

Strategies in the sandbox lab

Input parameters:

- `limit` (integer)

### `tengu_v3_lab_deployments` (~23 tokens)

Live lab deployments (paper/tiny-cap)

### `tengu_v3_news_aggregated` (~75 tokens)

MARKET-WIDE feed — not per-ticker (that is tengu_v3_news_summary). Aggregated cross-source news stream over the last N hours (default 24) for broad market-news sweeps and cross-source coverage checks.

Input parameters:

- `hours` (integer)
- `limit` (integer)

### `tengu_v3_news_events` (~76 tokens)

Detected market-moving events across the market over a lookback window (hours param, default 24). Call this when the user asks 'did anything big happen today?' or wants a scan of recent catalysts market-wide; use tengu_v3_news_latest for headlines on one ticker.

Input parameters:

- `hours` (integer)

### `tengu_v3_believability` (~36 tokens)

Calibrated trust per signal source

Input parameters:

- `limit` (integer)
- `source` (string)

### `tengu_v3_thresholds` (~49 tokens)

Currently-active decision thresholds — the live cutoff values gating automated trade decisions right now. Call it to know which thresholds are in force before interpreting why a signal did or didn't become a decision.

### `tengu_v3_hedging` (~64 tokens)

Index hedge proposals (SPY/QQQ/IWM) computed from live dealer positioning — protective puts when dealers are short gamma and IV rank is cheap, collars when the 25-delta risk reversal shows calls rich, plus IV term-structure context

### `tengu_v3_portfolio_risk_parity_latest` (~24 tokens)

Latest naive risk-parity weights

### `tengu_v3_validation_trials` (~64 tokens)

Recent trials recorded in the DSR registry (limit param, default 100). Call it when the user asks what backtests or experiments have been run, or to audit the multiple-testing history behind a deflated Sharpe.

Input parameters:

- `limit` (integer)

### `tengu_v3_validation_trial_count` (~60 tokens)

Lifetime count of registered trials — the N used for DSR deflation. Call it to know how heavy the multiple-testing burden is before interpreting any deflated Sharpe, or when the user asks how many strategy variants have been tried.

### `tengu_v3_kelly_uncertainty` (~83 tokens)

Uncertainty-discounted Kelly fraction for one ticker — the bet size after haircutting full Kelly for estimation error. Call this when the user asks 'how much should I bet on X?' or to know how large a position the evidence actually supports before sizing a trade.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_stream_ticks` (~52 tokens)

SSE stream of live US-equity trades. A filtered connect queues cross-process T+Q coverage; the dedicated producer reconciles it asynchronously (target ~5s).

Input parameters:

- `symbols` (string)

### `tengu_v3_stream_bars` (~121 tokens)

SSE stream of live 1-minute OHLCV bars for EVERY US-listed ticker (no subscribe step needed — the all-ticker feed is always on). Each frame closes one 1-minute candle ~1s after the venue closes it: open/high/low/close/volume/vwap + bar_period_s=60. The live-candle feed for charting; quiet outside ~04:00-20:00 ET, which is correct. For chart HISTORY use REST aggregates, not a stream.

Input parameters:

- `symbols` (string)

### `tengu_v3_stream_quotes` (~89 tokens)

SSE stream of live per-venue bid/ask quote events for the requested symbols (bid/ask price+size + per-side venue IDs). Connecting auto-subscribes coverage within ~5s. Quiet outside US market hours — that is correct, not broken. Sizes are the venue's numbers untransformed; never present them as share counts.

Input parameters:

- `symbols` (string, required)

### `tengu_v3_stream_signals` (~26 tokens)

SSE stream of fused signals

Input parameters:

- `symbols` (string)

### `tengu_v3_stream_decisions` (~28 tokens)

SSE stream of decision-lifecycle events

Input parameters:

- `symbols` (string)

### `tengu_v3_stream_alerts` (~22 tokens)

SSE stream of risk / guardrail alerts

### `tengu_v3_stream_news` (~26 tokens)

SSE stream of structured-news items

Input parameters:

- `symbols` (string)

### `tengu_v3_stream_events` (~27 tokens)

Per-user scoped SSE event stream

Input parameters:

- `user_id` (string, required)

### `tengu_v3_stream_market_events` (~53 tokens)

SSE stream of freshness-labelled market events. Every record carries source as-of time, feed lag and staleness so old data cannot masquerade as a new breach.

Input parameters:

- `symbols` (string)

### `tengu_v3_market_events_catchup` (~63 tokens)

Finite catch-up page for retained market events after a Redis stream id; use after reconnect and preserve each event's source freshness fields.

Input parameters:

- `limit` (integer)
- `since` (string)
- `symbols` (string)

### `tengu_v3_stream_status` (~56 tokens)

Bounded Redis reachability plus expiring market-producer and signal-pipeline heartbeats, per-capability readiness, coverage modes/limits and known SSE endpoints. Call before claiming live data or diagnosing missing/stale feeds.

### `tengu_v3_stream_ingest_status` (~48 tokens)

Live-data ingest daemon status: provider, subscribed symbols, connection uptime, tick/bar counters, last error. Call when the user asks why live data looks missing/stale.

### `tengu_v3_stream_signal_generator_status` (~47 tokens)

Effective signal-generator status across the optional in-process worker and dedicated processor heartbeat: input ticks, emitted signals and deployment state. Call when live signals look missing/stale.

### `tengu_v3_stream_tick_writer_status` (~52 tokens)

Tick writer (tick-persistence buffer) status: buffered rows, batches written, last flush duration. Call when the user asks whether the pipeline is healthy or why stored tick data looks missing.

### `tengu_v3_stream_decision_generator_status` (~49 tokens)

Effective decision-generator status across the optional in-process worker and dedicated processor heartbeat: input signals, emitted decisions, deployment state and local gate counters. Call when decisions are missing.

### `tengu_v3_stream_news_publisher_status` (~53 tokens)

News publisher status: polls completed, articles seen/published, dedup hits, newswire availability. Call when the user asks why news looks missing/stale or whether the pipeline is healthy.

### `tengu_v3_stream_universe_status` (~45 tokens)

Legacy in-process UniverseManager diagnostics for dev. For production cross-process warm coverage use tengu_v3_market_universe and tengu_v3_stream_status.

### `tengu_v3_market_universe` (~47 tokens)

Cross-process shared warm-set catalog plus the dedicated US-equity producer heartbeat, research-universe count, capacity and effective readiness. Warm means requested, not provider-confirmed.

### `tengu_v3_stream_realtime_guide` (~59 tokens)

Agent protocol for real-time queries: which SSE feed maps to which intent (live price, signals, decisions, news, alerts), payload shapes, when to prefer SSE over REST, and fallback rules when flags are off

### `tengu_v3_news_latest` (~94 tokens)

DRILL-DOWN ONLY — never a first-round call and never alongside tengu_v3_news_summary (it already includes recent stories). Raw newswire headlines for one ticker over a lookback window (minutes param, default 60; 60s TTL) for when the summary's stories are insufficient or you need a tighter time window.

Input parameters:

- `minutes` (integer)
- `ticker` (string)

### `tengu_v3_news_by_topic` (~122 tokens)

Topic-filtered headlines (earnings, analysts, dividend, mergers, acquisition, ipo, fda, guidance, stock_buyback, insider, lawsuit, esg, crypto, and more), optionally per ticker, over a date_range (default last7days, 50 items). Call it when the user asks about a specific event type — 'any FDA news?', 'recent M&A headlines'.

Input parameters:

- `date_range` (string)
- `items` (integer)
- `ticker` (string)
- `topic` (string, required)

### `tengu_v3_news_sentiment_stats` (~98 tokens)

Daily news-sentiment rollup for one ticker: a -1.5 to +1.5 score per day with article counts, over a date_range (default last30days). Call it when the user asks how sentiment on X is trending or whether coverage has turned negative; use tengu_v3_news_latest for the actual headlines.

Input parameters:

- `date_range` (string)
- `ticker` (string, required)

### `tengu_v3_news_market_sentiment` (~73 tokens)

Overall market-wide news-sentiment rollup over a date_range (default last7days). Call this when the user asks how the market 'feels' right now or whether the news backdrop is bullish or bearish — before drilling into single tickers.

Input parameters:

- `date_range` (string)

### `tengu_v3_news_trending` (~66 tokens)

DRILL-DOWN ONLY — never alongside tengu_v3_news_summary (it already includes trending status). The newswire's noise-filtered top stories for a ticker, for when you specifically need the trending ranking on its own.

Input parameters:

- `ticker` (string)

### `tengu_v3_news_top_mentions` (~75 tokens)

Most-mentioned tickers in the news over a window (default today), optionally filtered by sector — a market-attention proxy. Call this when the user asks which stocks are getting the most buzz or where the crowd's focus is today.

Input parameters:

- `date_range` (string)
- `sector` (string)

### `tengu_v3_news_sundown` (~74 tokens)

Curated end-of-day 'sundown' digest — a market-close recap of the day's news from the newswire, over an optional date_range. Call this when the user asks 'what happened in the market today' or wants a daily wrap-up.

Input parameters:

- `date_range` (string)

### `tengu_v3_news_curated_events` (~102 tokens)

Structured market events — earnings, M&A, FDA decisions, guidance changes, price-target moves — filterable by ticker, event_type, and date_range (default today). Call this when the user asks 'what events happened' or 'any catalysts for X' instead of scanning raw headlines.

Input parameters:

- `date_range` (string)
- `event_type` (string)
- `items` (integer)
- `ticker` (string)

### `tengu_v3_news_ticker_news` (~216 tokens)

FILTERED-SEARCH ONLY — reach for this when the user specifies filters (topic, sector, source, sentiment, date_range, article/video, free-text search) or multi-ticker search. Never for plain 'what's the news on X?' (that is tengu_v3_news_summary). Full newswire filter spec; sortby rank or oldestfirst.

Input parameters:

- `date_range` (string)
- `days` (integer)
- `fallback` (boolean)
- `items` (integer)
- `news_type` (string)
- `page` (integer)
- `search` (string)
- `search_or` (string)
- `sector` (string)
- `sentiment` (string)
- `sortby` (string)
- `source` (string)
- `source_exclude` (string)
- `tickers` (string, required)
- `topic` (string)
- `topic_exclude` (string)
- `topic_or` (string)

### `tengu_v3_news_ticker_only` (~80 tokens)

News stories tagged with ONLY this one ticker — the strictest filter, excluding articles that co-tag competitors or peers. Call this when the user wants pure company-specific coverage without sector noise; use ticker_news for broader filtered search.

Input parameters:

- `items` (integer)
- `page` (integer)
- `ticker` (string, required)

### `tengu_v3_news_multi_ticker` (~91 tokens)

News stories where ALL the listed tickers co-appear in the same article — a correlation feed. Call this when the user asks how two or more companies are linked in the news (deals, rivalries, shared catalysts); use ticker_news for per-ticker coverage.

Input parameters:

- `items` (integer)
- `page` (integer)
- `tickers` (string, required)

### `tengu_v3_news_all_tickers_sentiment` (~80 tokens)

Sentiment leaderboard across the full tracked ticker universe over a date_range (default last7days), paginated. Call this when the user asks which stocks have the most positive or negative news sentiment right now — a screening pass before single-name digs.

Input parameters:

- `date_range` (string)
- `page` (integer)

### `tengu_v3_news_alerts` (~96 tokens)

Headline-only alert stream — lighter and faster than full news items; category=general for market-wide or category=ticker with tickers for specific names. Call this when the user wants breaking headlines or the very latest on a name and speed matters more than article bodies.

Input parameters:

- `category` (string)
- `items` (integer)
- `page` (integer)
- `tickers` (string)

### `tengu_v3_news_ratings` (~115 tokens)

Analyst rating actions — upgrades, downgrades, and initiations, filterable by tickers, rating_type, and date_range; history goes back to 2022-04-08. PRIMARY tool for 'any recent upgrades or downgrades on X?' and for gauging how sell-side conviction is shifting.

Input parameters:

- `date_range` (string)
- `items` (integer)
- `page` (integer)
- `rating_type` (string)
- `tickers` (string)

### `tengu_v3_news_event_by_id` (~83 tokens)

All news items belonging to one clustered event, looked up by eventid, paginated. Call this when you already have an eventid from another news result and the user wants the full article set behind that single catalyst or story cluster.

Input parameters:

- `eventid` (string, required)
- `items` (integer)
- `page` (integer)

### `tengu_v3_news_category` (~121 tokens)

Category-scoped news feed: section=general for market-wide or alltickers for company-tagged stories, filterable by topic, sector, industry, and source. Call this when the user wants themed or sector-level news rather than coverage of a specific ticker.

Input parameters:

- `date_range` (string)
- `industry` (string)
- `items` (integer)
- `page` (integer)
- `section` (string)
- `sector` (string)
- `source` (string)
- `topic` (string)

### `tengu_v3_news_summary` (~99 tokens)

One-shot news intelligence for a ticker: recent stories, sentiment stats, trending status, structured events, and analyst actions in a single parallel fetch (90s TTL). THE primary tool for 'what's the news on X?' — this ALONE answers most single-ticker news questions; do NOT stack other news tools in the same round unless it returns nothing useful.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_news_structured` (~61 tokens)

LLM-structured news items — event_type, tickers, sentiment, magnitude, confidence

Input parameters:

- `event_type` (string)
- `hours` (integer)
- `limit` (integer)
- `ticker` (string)

### `tengu_v3_fundamentals_income_statements` (~95 tokens)

SEC EDGAR income statements (P&L line-items, revenue through net income/EPS) for a ticker — quarterly, annual, or TTM (default quarterly, last 8 periods). Call this when the user asks about revenue or earnings trends and wants the actual reported statements.

Input parameters:

- `limit` (integer)
- `period` (string)
- `ticker` (string, required)

### `tengu_v3_fundamentals_balance_sheets` (~92 tokens)

SEC EDGAR balance sheets for a ticker — assets, liabilities, and equity line-items per period, quarterly or annual (default quarterly, last 8 periods). Call this when the user asks about cash on hand, debt load, or book value straight from reported filings.

Input parameters:

- `limit` (integer)
- `period` (string)
- `ticker` (string, required)

### `tengu_v3_fundamentals_cash_flow_statements` (~95 tokens)

SEC EDGAR cash-flow statements for a ticker — operating, investing, and financing flows per period, quarterly or annual (default quarterly, last 8 periods). Call this when the user asks about cash generation, capex, buybacks, or how earnings convert to actual cash.

Input parameters:

- `limit` (integer)
- `period` (string)
- `ticker` (string, required)

### `tengu_v3_fundamentals_all` (~86 tokens)

All three financial statements — income, balance sheet, and cash flow — for a ticker in one round-trip (default quarterly, last 4 periods). Call this when the user wants a full fundamental picture of a company instead of three separate statement calls.

Input parameters:

- `limit` (integer)
- `period` (string)
- `ticker` (string, required)

### `tengu_v3_fundamentals_metrics` (~99 tokens)

Derived financial-metric rows per period for a ticker — P/E, ROE, margins, FCF yield, debt ratios — quarterly, annual, or TTM (default quarterly, last 4 periods). Call this when the user asks about valuation or quality ratios and their trend without needing raw statement line-items.

Input parameters:

- `limit` (integer)
- `period` (string)
- `ticker` (string, required)

### `tengu_v3_fundamentals_metrics_snapshot` (~76 tokens)

Latest financial-metrics snapshot for a ticker — a single TTM row of valuation and quality ratios. Call this for a quick 'what's the P/E, how profitable is X right now?' check; use fundamentals_metrics when the user needs the per-period history.

Input parameters:

- `ticker` (string, required)

### `tengu_v3_fundamentals_insider_trades` (~79 tokens)

Form-4 insider transactions for one ticker — officer and director buys and sells (default limit 50). Call this when the user asks whether insiders are buying or selling a stock, or wants insider-conviction evidence for a name.

Input parameters:

- `limit` (integer)
- `ticker` (string, required)

### `tengu_v3_fundamentals_institutional_ownership` (~73 tokens)

13F institutional holdings for one ticker, itemized by holding institution (default limit 50). Call this when the user asks which institutions or funds own a stock or how concentrated institutional ownership is.

Input parameters:

- `limit` (integer)
- `ticker` (string, required)

### `tengu_v3_fundamentals_companyfacts` (~120 tokens)

Directory of every as-reported XBRL concept (us-gaap/dei/ifrs-full) a company has filed — unit(s), observation count and period coverage — from the in-house SEC EDGAR companyfacts corpus. Call it FIRST to find the concept tag for /fundamentals/xbrl/{ticker}/{concept}. Point-in-time, no vendor restatement.

Input parameters:

- `limit` (integer)
- `search` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_fundamentals_xbrl` (~183 tokens)

One XBRL concept's as-reported history — period, value, fiscal year/period, SEC form, accession, filed date — from the in-house SEC EDGAR companyfacts corpus. Call it for exact as-filed fundamentals: as_of= for point-in-time (no restatement look-ahead), history=true for all restatements; find tags via /fundamentals/companyfacts.

Input parameters:

- `as_of` (string)
- `concept` (string, required): Path parameter 'concept' (required).
- `end` (string)
- `form` (string)
- `history` (boolean)
- `limit` (integer)
- `start` (string)
- `taxonomy` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `unit` (string)

### `tengu_v3_tape_options_chain` (~325 tokens)

Full historical OPTIONS CHAIN for one underlying on one snapshot day from FIRM's own daily market-data capture — per contract: strike, expiry, dte, bid/ask/mid/last, day volume + VWAP, implied volatility, the full greeks (delta/gamma/theta/vega), open interest and underlying price, plus a chain summary (contract/expiration counts, put/call OI + volume ratios, front-month ATM IV). Use it to reconstruct the IV surface, greeks or OI distribution AS IT STOOD on a past day, find where OI/volume concentrated, or pull the near-the-money strikes around an event. Omit date for the latest captured day (reported as snapshot_day); filter by side, expiration/dte, min OI/volume or a moneyness band; sort by open interest or dollar notional. Capture begins 2026-05-10. For the raw options TRADE tape use tengu_v3_tape_options; for live GEX/dealer flow use the options_flow tools.

Input parameters:

- `contract_type` (string)
- `date` (string)
- `expiration` (string)
- `limit` (integer)
- `max_dte` (integer)
- `min_dte` (integer)
- `min_open_interest` (number)
- `min_volume` (number)
- `moneyness` (number)
- `sort` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_vol_surface` (~224 tokens)

standardized implied-vol SURFACE for a company, joined from a plain equity ticker (resolves the symbol to the surface's internal id via the link table). Returns the standardized surface grid: for each maturity (days = 30/60/91/182/365) and delta node, per call/put the interpolated implied volatility and its dispersion — the clean vol skew + term structure behind risk-reversals, butterflies and the ATM vol term structure. Use to read a name's vol smile or how implied vol changes across expiries. Omit date for the latest-available surface (lagged academic archive — currently the 2011 slice, 3,956 names); pass date=YYYY-MM-DD for a specific session and days= to pin one maturity. Standardized grid, NOT the raw chain — for live per-contract quotes use /intel/options_chain.

Input parameters:

- `date` (string)
- `days` (number)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_funds_mutual_fund_ownership` (~136 tokens)

Which mutual funds hold a stock — each fund's percent_tna, shares and market value, largest first, plus report_dt and n_funds, from the survivor-bias-free holdings archive (coverage 2002-2021; no date = latest lagged quarter-end). Call it for mutual-fund demand base or holder concentration; for 13F institutional holders use /intel/sec13f.

Input parameters:

- `date` (string)
- `min_market_val` (number)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `top` (integer)

### `tengu_v3_factor_predictors` (~225 tokens)

academic open-source predictor panel for one stock — a compact vector of 13 replicated accounting anomalies (Sloan accruals, Cooper-Gulen-Schill asset growth, Titman capital investment, Novy-Marx gross profitability, Fama-French operating profitability, cash-to-assets, leverage change, earnings consistency, revenue growth, positive-NI/positive-CFO flags, current ratio, net share issuance) at monthly grain. Call it for a ready-made feature vector when you don't need the full ~460-column factor panel. Returns the series newest-last, or with latest=true only the single most-recent row as a name->value map; with no start/end it serves the LATEST AVAILABLE rows (lagged quarterly archive) and reports the actual window. Ticker is resolved to its internal security key automatically (the table has no ticker column).

Input parameters:

- `end` (string)
- `latest` (boolean)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_fundamentals_segments` (~197 tokens)

Business + geographic SEGMENT breakdown for one company — decomposes a fiscal period into reportable segments by line of business, geography, ASC-280 operating segment and US state, each with sales, revenue, operating income and SIC, grouped by segment type. Call it to see WHERE a company earns: revenue mix by region (e.g. Greater China share) or which line of business carries the margin. Internally keyed (the ticker is resolved via the point-in-time name master, most-recent row); the archive lags, so with no year/date it returns the LATEST available period and reports the datadate served. Values are in the reported currency, fundamentals's millions convention.

Input parameters:

- `date` (string)
- `limit` (integer)
- `stype` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `year` (integer)

### `tengu_v3_fundamentals_earnings_press_releases` (~74 tokens)

Full text of a company's earnings press releases, including guidance language (default limit 8). Call this when the user asks what management said or guided in an earnings release, or wants exact announcement wording.

Input parameters:

- `limit` (integer)
- `ticker` (string, required)

### `tengu_v3_fundamentals_sec_filings` (~96 tokens)

SEC filings list for a ticker — 10-K, 10-Q, 8-K, S-1 and more, with an optional form_type filter (default limit 20). Call this when the user asks what a company has filed or wants to locate a specific filing type.

Input parameters:

- `form_type` (string)
- `limit` (integer)
- `ticker` (string, required)

### `tengu_v3_fundamentals_company_facts` (~83 tokens)

Static company profile for one ticker — sector, industry, CIK, exchange, market cap and employee count. Call it to know what a company is and how big it is before deeper analysis. Not the XBRL corpus — that discovery lives at /fundamentals/companyfacts/{ticker}.

Input parameters:

- `ticker` (string, required)

### `tengu_v3_fundamentals_prices` (~209 tokens)

Historical OHLCV bars for one ticker at second/minute/hour/day/week/month granularity (interval_multiplier for e.g. 5-minute bars; start_date/end_date window, default limit 1000). Call this when the user asks for price history, returns over a window, or intraday bars; for the latest quote use /fundamentals/price_snapshot. CRYPTO: pass asset_class=crypto for BTC/ETH/SOL/LTC/LINK etc. Several crypto symbols are ALSO US-listed equity tickers (BTC is a Grayscale trust at ~$29; LINK is Interlink Electronics), so a bare ticker returns the EQUITY. Never use an equity price for a crypto asset.

Input parameters:

- `asset_class` (string)
- `end_date` (string)
- `interval` (string)
- `interval_multiplier` (integer)
- `limit` (integer)
- `start_date` (string)
- `ticker` (string, required)

### `tengu_v3_fundamentals_price_snapshot` (~149 tokens)

Latest quote for one ticker — last trade plus the current daily bar. Call this when the user asks what the price is now or how the stock is moving today; for history use /fundamentals/prices. CRYPTO: pass asset_class=crypto for BTC/ETH/SOL/LTC/LINK etc. Several crypto symbols are ALSO US-listed equity tickers (BTC is a Grayscale trust at ~$29; LINK is Interlink Electronics), so a bare ticker returns the EQUITY. Never use an equity price for a crypto asset. Check is_stale before using the price.

Input parameters:

- `asset_class` (string)
- `ticker` (string, required)

### `tengu_v3_fundamentals_news` (~101 tokens)

Curated news articles for one ticker from the fundamentals market-data feed, with start_date/end_date filtering (default 50). Call it for ticker-scoped headlines while working inside fundamentals; it is distinct from the primary news surface — use the news tools for broad or breaking coverage.

Input parameters:

- `end_date` (string)
- `limit` (integer)
- `start_date` (string)
- `ticker` (string, required)

### `tengu_v3_fundamentals_full` (~91 tokens)

One-shot fundamentals bundle for a ticker — metrics snapshot, TTM income, latest balance sheet and cash-flow, company facts, recent insider trades and top institutional holders, fetched in parallel. PRIMARY tool for 'give me the full fundamental picture of X' — call it instead of assembling the pieces one by one.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_fundamentals_company_full` (~54 tokens)

One-call company snapshot — info + TTM + ratios + growth + MRQ balance (fundamentalsapi.com)

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_fundamentals_growth` (~87 tokens)

Growth metrics — YoY, 3Y CAGR, 5Y CAGR and margin trends; accepts comma-separated tickers for one-call bulk comparison. Call this when the user asks how fast a company is growing, whether margins are trending up, or to compare growth across several names.

Input parameters:

- `limit` (integer)
- `tickers` (string, required)

### `tengu_v3_fundamentals_dividends` (~71 tokens)

Dividend profile per ticker — DPS, payout ratio, consecutive-growth streak and 10Y history; accepts comma-separated tickers. Call this for any dividend-safety, income or 'how long has X raised its dividend' question.

Input parameters:

- `tickers` (string, required)

### `tengu_v3_fundamentals_peers` (~87 tokens)

Same-industry comparables for a ticker, ranked by revenue, margins and ROE (default 10). Call this when the user asks who a company's competitors are or how it stacks up against peers — fetch it before any relative-valuation take.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_fundamentals_search` (~72 tokens)

Fuzzy company lookup — resolves a free-text name or partial ticker to matching companies (default 10). Call it FIRST when the user names a company without a ticker, before firing any ticker-keyed fundamentals tool.

Input parameters:

- `limit` (integer)
- `q` (string, required)

### `tengu_v3_fundamentals_tickers` (~95 tokens)

Paged listing of the full covered ticker universe, filterable to S&P 500 membership or one sector (limit/page paging). Call it when the user wants all the stocks in a sector or an index-membership list to feed a screen.

Input parameters:

- `is_sp500` (boolean)
- `limit` (integer)
- `page` (integer)
- `sector` (string)

### `tengu_v3_fundamentals_screener` (~230 tokens)

Multi-filter stock screener combining profitability (ROE, ROA, net margin), growth (revenue, EPS), financial-health (debt/equity, current ratio) and dividend filters, with sector/industry scoping and sort control. PRIMARY tool for 'find me stocks that…' asks; ready-made strategies live in /fundamentals/screener/presets.

Input parameters:

- `current_ratio_min` (number)
- `debt_to_equity_max` (number)
- `eps_growth_min` (number)
- `industry` (string)
- `limit` (integer)
- `net_margin_min` (number)
- `page` (integer)
- `payout_ratio_max` (number)
- `revenue_growth_min` (number)
- `roa_min` (number)
- `roe_max` (number)
- `roe_min` (number)
- `sector` (string)
- `sort_by` (string)
- `sort_order` (string)
- `years_dividend_growth_min` (integer)

### `tengu_v3_fundamentals_screener_presets` (~66 tokens)

Catalog of pre-built screener strategies — Aristocrats, Cash Cows, Value, Quality and more. Call it when the user asks for a named strategy screen or wants screening ideas before composing /fundamentals/screener filters.

### `tengu_v3_fundamentals_ai_analyze` (~77 tokens)

AI-generated company analysis for one ticker — summary, strengths, concerns, peer comparison and a quality score. Call this when the user wants a synthesized qualitative read rather than raw numbers. Premium: metered at 100 credits/mo.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_fundamentals_historical` (~129 tokens)

Multi-decade historical financial statements for one ticker from SEC EDGAR — income, balance, and cash-flow, filterable by statement_type and start_year/end_year, annual by default with include_quarterly opt-in. Call this when the user asks how fundamentals have trended over many years, not just the latest print.

Input parameters:

- `end_year` (integer)
- `include_quarterly` (boolean)
- `start_year` (integer)
- `statement_type` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_options_flow` (~104 tokens)

Recent unusual options-flow alerts across the whole market from the options-flow feed, filtered to trades above min_premium (default $50k). Call this when the user asks 'what is the smart money buying today?' or wants market-wide unusual options activity; use tengu_v3_intel_options_flow_ticker for a single name.

Input parameters:

- `freshness` (string)
- `limit` (integer)
- `min_premium` (integer)

### `tengu_v3_intel_options_flow_ticker` (~102 tokens)

Unusual options-flow alerts for one ticker from the options-flow feed (default 25). Call this when the user asks 'any unusual options activity in X?' or wants the large options bets hitting a specific name; use tengu_v3_intel_options_flow for the cross-market view.

Input parameters:

- `freshness` (string)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_darkpool_recent` (~91 tokens)

Most recent dark-pool prints across all tickers from the options-flow feed (default 50). Call this when the user asks about market-wide dark-pool or block activity — 'any big dark-pool prints today?'; use tengu_v3_intel_darkpool_ticker for a single name.

Input parameters:

- `freshness` (string)
- `limit` (integer)

### `tengu_v3_intel_darkpool_ticker` (~101 tokens)

Dark-pool prints for one ticker from the options-flow feed (default 50). Call this when the user asks whether large blocks are crossing off-exchange in a specific name; use tengu_v3_intel_off_exchange for daily aggregate off-exchange volume instead of individual prints.

Input parameters:

- `freshness` (string)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_gex` (~97 tokens)

Aggregate gamma exposure (GEX) and delta exposure for one ticker from the options-flow feed. Call this when the user asks about dealer positioning or gamma levels, or whether options exposure could dampen or amplify moves in a name; pair with tengu_v3_intel_max_pain for expiry pin levels.

Input parameters:

- `freshness` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_max_pain` (~86 tokens)

Max-pain price per options expiration for one ticker from the options-flow feed. Call this when the user asks where a stock is likely to pin into expiry or what the max-pain level is; pair with tengu_v3_intel_gex for aggregate gamma/delta exposure.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_options_volume` (~92 tokens)

Daily options volume and put/call ratio per day for one ticker from the options-flow feed (default 30 days). Call this when the user asks whether options activity or put/call skew is elevated versus recent days, or how bullish/bearish the options tape has been trending.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_factor_importance` (~93 tokens)

What drives the model: Fama-French 5-factor loadings showing which systematic factors explain the strategy's returns, plus the ensemble's Bayesian voter posteriors ranking which signals it trusts most (top_n, default 50). PRIMARY tool for 'why does the model like this?' and 'what is the strategy actually betting on?' questions.

Input parameters:

- `top_n` (integer)

### `tengu_v3_risk_portfolio_var` (~115 tokens)

Consensus portfolio VaR + CVaR (USD) on the live top-decile shadow book — Cornish-Fisher + t-copula Monte-Carlo + filtered-historical-simulation blended, with a liquidity-adjusted VaR. Call this when the user asks how much the model portfolio could lose. Caveat: 1-day horizon only (horizon_days_served=1); multi-day is not scaled.

Input parameters:

- `confidence` (number)
- `horizon_days` (integer)

### `tengu_v3_research_correlation_mesh` (~108 tokens)

Returns-correlation mesh around a seed ticker — nodes = tickers, edges = |rho| >= 0.6, from the 36-month realised-returns sidecar (depth expands the neighborhood). PRIMARY tool for 'what moves with X?' and finding hedge or pair candidates. Caveat: needs 36-month overlap; a freshly-listed or thinly-traded seed may be absent.

Input parameters:

- `depth` (integer)
- `seed` (string, required)

### `tengu_v3_intel_insider_trades` (~90 tokens)

SEC Form 4 insider trades for one ticker — recent buys and sells by officers, directors, and large holders (default 25). Call this when the user asks 'are insiders buying or selling X?' or wants to check insider conviction before acting on a name.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_congress` (~99 tokens)

Congressional stock trades from two coverage sources — a realtime cross-ticker feed (provider=options_flow, default) or a bulk alternative-data feed (provider=alternative_data) — with an optional ticker filter. Call this when the user asks what Congress members have been buying or selling, market-wide or in a specific name.

Input parameters:

- `limit` (integer)
- `provider` (string)
- `ticker` (string)

### `tengu_v3_intel_lobbying` (~97 tokens)

Quarterly corporate lobbying spend for one ticker from the alternative-data feed (limit, default 50). Call this when the user asks how much a company spends lobbying or whether its policy exposure is growing; pair with tengu_v3_intel_gov_contracts for the government-contract side of the same story.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_gov_contracts` (~96 tokens)

Federal government contracts awarded to one ticker's company from the alternative-data feed (limit, default 50). Call this when the user asks how much government business a company wins or whether contract awards are accelerating; pair with tengu_v3_intel_lobbying for the lobbying-spend side.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_wsb` (~96 tokens)

Daily r/wallstreetbets mention count and sentiment for one ticker from the alternative-data feed (default 60 days). Call this when the user asks whether retail is piling into a name or how retail buzz is trending; pair with tengu_v3_intel_twitter for the Twitter-side social read.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_twitter` (~95 tokens)

Daily Twitter mention volume and follower count for one ticker from the alternative-data feed (default 60 days). Call this when the user asks how much social buzz a name has or whether attention is spiking; pair with tengu_v3_intel_wsb for the r/wallstreetbets read.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_off_exchange` (~108 tokens)

Daily off-exchange (dark pool + ATS) volume for one ticker from the alternative-data feed (default 30 days). Call this when the user asks how much of a stock's volume trades off-exchange or how dark-pool share is trending; use tengu_v3_intel_darkpool_ticker for individual prints.

Input parameters:

- `freshness` (string)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_patents` (~89 tokens)

Issued USPTO patents tagged to one ticker — date, title, IPC class, claim count, and abstract for each (default 25). Call this when the user asks what a company is patenting or wants an innovation-velocity read on its R&D pipeline.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_chart` (~125 tokens)

Candlestick chart with optional RSI/MACD/Bollinger overlays — returns a base64 PNG in a standard image envelope plus an OHLCV summary block (interval minute|hour|day|week|month, default day; 120 bars). Call this when the user asks to see a chart; powers chart-emitting skills (TA Master, Trading Plan, Apex Equity Intel).

Input parameters:

- `bars` (integer)
- `indicators` (string)
- `interval` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_insiders` (~97 tokens)

Live cross-ticker Form-4 insider-transaction feed (alternative-data, last ~20k rows): name, transaction_code, shares, price_per_share, value_usd, shares_owned_following. Call this when the user asks 'are insiders buying or selling?' — one name or market-wide. Optional ticker filter is applied client-side.

Input parameters:

- `limit` (integer)
- `ticker` (string)

### `tengu_v3_intel_sec13f` (~110 tokens)

Recent 13F position snapshots (alternative-data, cross-fund/cross-ticker, last ~10k rows): fund, ticker, shares, value_usd, report_period — the institutional-ownership signal. Call this when the user asks 'which funds hold X?' or 'what does fund Y own?'; filter by ticker and/or fund (substring match).

Input parameters:

- `fund` (string)
- `limit` (integer)
- `ticker` (string)

### `tengu_v3_intel_sec13f_changes` (~107 tokens)

Quarter-over-quarter 13F position deltas (alternative-data), sign preserved: positive = added, negative = trimmed. Call this when the user asks 'are institutions adding or dumping X?'; set min_pct (absolute change fraction, e.g. 0.5 = 50%) to drop noise.

Input parameters:

- `fund` (string)
- `limit` (integer)
- `min_pct` (number)
- `ticker` (string)

### `tengu_v3_intel_top_shareholders` (~84 tokens)

Top institutional / fund / insider shareholders for a ticker (alternative-data), as two lists — ownership (shares) and ownership_options (contracts) — because options exposure reads differently from equity holdings. Call this when the user asks 'who owns X?' or wants the largest holders.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_street_estimates` (~107 tokens)

Street consensus EPS + options-implied expected move per earnings event, with beat_rate_pct and 8-quarter surprise history (est vs actual vs surprise_pct). Call this for 'what does the Street expect?' or 'how big a move is priced in?'. report_date_basis 'estimation' = projected date, NOT confirmed — cross-check tengu_v3_earnings_next.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_news_headlines` (~103 tokens)

MARKET-WIDE ONLY — never for one ticker's news (that is tengu_v3_news_summary). Live cross-publisher newswire headlines: headline, publisher, tickers, is_major flag, feed-supplied sentiment; seconds-fresh, 120s cache. For 'what's happening in the market right now?' scans and cross-ticker sweeps.

Input parameters:

- `limit` (integer)
- `ticker` (string)

### `tengu_v3_macro_treasury_curve` (~90 tokens)

Live US Treasury yield curve (market-data feed, T+1): 1m-30y tenor points, per-tenor 1-day change (bps), computed 2s10s and 3m10y spreads with inversion flags. Call this when the user asks about rates, curve shape, or inversion. Honest as_of = the feed's record date.

### `tengu_v3_intel_exec_compensation` (~93 tokens)

Annual executive compensation history for a ticker (alternative-data): CEO + named officers with name, role, year, salary, bonus, stock_option_awards, total_compensation. Call this when the user asks 'how much is the CEO paid?' or wants pay-vs-performance context.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_etf_holdings` (~95 tokens)

alternative-data: ETF composition or inverse-lookup. Pass ?etf=SPY for full holdings of an ETF, OR ?ticker=NVDA for every ETF that holds the stock (with weight). At least one is required; when both are passed, etf takes precedence.

Input parameters:

- `etf` (string)
- `limit` (integer)
- `ticker` (string)

### `tengu_v3_intel_politicians` (~76 tokens)

Full US Congress roster (House + Senate, alternative-data) with disclosed trade counts per member. Call it to resolve a politician name to a BioGuideID before pulling their trades, or for 'most-active disclosed traders in Congress' lists. Heavy full-roster pull.

Input parameters:

- `limit` (integer)

### `tengu_v3_intel_corporate_donors` (~90 tokens)

Corporate-PAC donations linked to the ticker's parent company (alternative-data): candidate, committee, amount, transaction_date, cycle — a campaign-finance influence signal. Call this when the user asks who a company donates to or about its political exposure.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_gov_contracts_live` (~99 tokens)

Quarterly cross-ticker federal-contracts feed (alternative-data) — top-line award totals only, lighter than per-ticker tengu_v3_intel_gov_contracts (no agency or description fields). Call this for 'which companies win government money?' screens; use tengu_v3_intel_gov_contracts for line-items.

Input parameters:

- `limit` (integer)
- `ticker` (string)

### `tengu_v3_intel_news_pro` (~243 tokens)

Real-time newswire stories — cross-ticker, ticker-filtered (comma-separated), or by channel: id, title, teaser, url, ticker(s), channels, tags, created (ISO-8601); body=true adds full HTML (slower, larger). Call this when the user wants themed or full-text news beyond headlines. Confirmed-working channels (probed 2026-04-30; exact case + apostrophe matter): "Press Releases", "Crypto", "Movers", "Why It's Moving", "Earnings", "Earnings Beats", "Earnings Misses", "Guidance", "Top Stories", "Tech", "Markets", "Analyst Color", "Federal Reserve", "Government", "ETFs", "Forex", "Commodities", "Treasuries", "Futures", "Emerging Markets", "Eurozone", "Asia", "Global", "Equities", "Bonds", "Trading Ideas", "After-Hours Center".

Input parameters:

- `body` (boolean)
- `channels` (string)
- `limit` (integer)
- `tickers` (string)

### `tengu_v3_intel_news_why_moving` (~106 tokens)

MOVER-EXPLANATION ONLY — for 'why is X moving / what's driving X right now?' questions; never for generic 'latest news on X' (that is tengu_v3_news_summary). Newswire 'Why It's Moving' channel: short explainers for stocks making notable intraday moves. 60s cache.

Input parameters:

- `body` (boolean)
- `limit` (integer)
- `tickers` (string)

### `tengu_v3_intel_news_press_releases` (~87 tokens)

newswire 'Press Releases' channel — corporate press releases on the newswire (PR Newswire, Business Wire, GlobeNewswire). Use when the user asks for the company's own announcements rather than analyst/journalist coverage. 60s cache.

Input parameters:

- `body` (boolean)
- `limit` (integer)
- `tickers` (string)

### `tengu_v3_intel_news_crypto` (~97 tokens)

Newswire 'Crypto' channel — crypto news stream covering BTC, ETH, exchanges, regulation, miners. Call this when the user asks about crypto news; pair with coin-stock proxies (COIN, MSTR, RIOT, MARA) to fuse the equity-side reaction. 60s cache.

Input parameters:

- `body` (boolean)
- `limit` (integer)
- `tickers` (string)

### `tengu_v3_intel_news_movers` (~98 tokens)

Newswire 'Movers' channel — coverage of stocks making the biggest intraday moves (gainers, losers, halts, breakouts). Call this for 'biggest movers today' questions and end-of-day 'what moved' recaps; pass tickers to narrow. 60s cache.

Input parameters:

- `body` (boolean)
- `limit` (integer)
- `tickers` (string)

### `tengu_v3_intel_earnings_history` (~104 tokens)

Last N quarters of earnings for a ticker — report date, EPS estimate vs actual, surprise %, and the day-of-report intraday price move %. Used by the verdict prompt to anchor 'stock typically moves ±X% on earnings' claims in real numbers. Composite (newswire + market-data). 6h cache.

Input parameters:

- `lookback_quarters` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_earnings_next` (~218 tokens)

Use when: the user asks for a specific ticker's next earnings date, when a company reports, the earnings calendar entry for a name, or anything of the form "when is X's next earnings?". This is the CANONICAL multi-source consensus tool — fans out to market-data, market-data, newswire, news, and web search in parallel; reconciles via primacy-weighted majority; returns a single canonical answer with per-source breakdown, deduplicated citations, and a ``vendor_coverage_alert`` when paid vendors silently lack data the web confirms. ``_meta.confidence`` is `high` (≥2 sources agree, or 1 primary source = market-data|web_search), `medium` (1 secondary source), or `low` (no confirmed date — projections demoted to ``_meta.next_earnings_date_projection_only``). Top-level ``summary`` field for FE rendering. 15-min cache.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_earnings_next_stream` (~171 tokens)

STREAMING variant of ``tengu_v3_earnings_next`` — same consensus contract, delivered as Server-Sent Events (text/event-stream). Emits two events: ``partial`` when paid vendors reach consensus (~500ms first paint with `is_projected=false`, confidence=high based on paid alone) and ``result`` when web_search has verified (~2-3s; updates `vendor_coverage_alert` if web disagrees). Use when a consumer can render incrementally and wants the fastest possible first paint — chat surfaces and live tickers. Synchronous consumers should keep using ``tengu_v3_earnings_next`` (cost-aware: skips the web_search call entirely when paid agrees).

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_macro_snapshot` (~383 tokens)

NOW WITH a `credit` block: CDX IG/HY on-the-run 5Y composite spreads + 1-session delta (T-2 by source, cadence-aware staleness; full series at /api/v3/credit/indices). Cross-asset macro composite returning REAL underlying values, all real-time where the data source permits. Fields: `vix` (real-time spot), `ten_year_yield_pct` (FRED DGS10, %), `usd_index_narrow_dxy` (computed from FRED 6-pair basket via the standard geometric weighted formula — the institutional standard ~99), `usd_index_trade_weighted_broad` (FRED DTWEXBGS — Fed's broader policy measure ~118), `wti_oil_usd_bbl` (FRED DCOILWTICO, $/bbl), `gold_usd_oz` (real-time forex spot, $/oz), `sp500` (real-time index; SPY×10 emergency fallback), `nasdaq100` (real-time index; QQQ×41 emergency fallback), `djia` (real-time index; null when unavailable — no ETF proxy emitted), `russell2000` (real-time index; IWM×10 emergency fallback). Every numeric field is gated by a plausibility guard — out-of-band values are nulled with an `error.implausible_value` field rather than served, so the chat Brain never cites a wrong number with the [macro_snapshot] tag. Includes `vol_regime` (low_vol/normal/elevated/stress per VIX bucket), `data_freshness` timestamp, and a `sources` block with the series reference for each indicator. 60s cache.

Input parameters:

- `freshness` (string)

### `tengu_v3_intel_ml_prediction` (~343 tokens)

Latest ensemble ML prediction for the ticker, with full conformal interval + 19-voter decomposition. Sourced from the nightly ensemble scoring run (refreshed nightly Mon-Fri, ~13K tickers scored per cycle). Returns `prediction` block (predicted_return_pct, blended_score, conviction, decile, rank, percentile_rank, n_universe), `conformal_interval` block (lo/hi/half_width/method + stated_coverage 0.90 + realised_coverage_recent from live calibration table), `voter_decomposition` (per-voter contribution across the 19 voters — e.g. ml_ensemble, regime_hmm, technical_advanced, sentiment_finbert, macro_context, fundamental, options_flow, insider_flow, analyst_revisions, futures_macro, congress_trading, short_pressure), `context` (voter_coverage, confluence, feature_coverage), plus model_version, tier (small/mid/large universe), regime, sector. When a ticker isn't in the latest scoring universe, returns `available: false` with reason. 5min cache. NAMESPACE: predictions are US-EQUITY only. Nine crypto tickers collide with equities (BTC, ETH, LINK, LTC, COMP, ARB, NEAR, APT, ATOM) — such responses carry a `ticker_collision` note; for the crypto asset pass asset_class=crypto (fails closed 404: no crypto model yet). NEVER present an equity prediction as a crypto view.

Input parameters:

- `asset_class` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_voter_attribution` (~245 tokens)

Causal attribution for a voter's score on a ticker. Instrumented voters: `insider_flow` (EDGAR Form-4 + insider feed, deduped by name/date/value; CEO/CFO 2x, officer 1.5x, director 1.2x weighting; contribution amounts + reconstructed score); `options_flow` (options-flow alerts with direction inferred from option_type+side: CALL@ASK=+1, PUT@ASK=-1, CALL@BID=-1, PUT@BID=+1; weighted by premium/median); `fundamental` (metadata mode — surfaces which 4 ratios the voter consumes + how to interpret). Transforms scores into EVIDENCE rather than a number. Remaining voters (sentiment, analyst_revisions, regime_hmm, technical, ml_ensemble) pending instrumentation. Optional ?voter=insider_flow|options_flow|fundamental, ?days_back=30. 15min cache.

Input parameters:

- `days_back` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `voter` (string)

### `tengu_v3_intel_voter_ic_drift` (~90 tokens)

Per-voter information-coefficient drift vs baseline for all 19 voters, recomputed daily: live_ic vs baseline_ic, ic_ratio (sign-flip flagged at <0), drift_status (green/yellow/red), sorted by absolute drift severity. Call it before leaning on a verdict — reduce confidence in any voter with red drift_status. 60min cache.

### `tengu_v3_intel_voter_coverage` (~152 tokens)

Per-ticker accounting for every voter in the 19-voter ensemble. For each voter returns the current score, baseline weight, status (firing | silent_data | shadow | no_signal), and a human-readable `why` explaining each silent voter's upstream data source so an operator can chase the gap. The `coverage_summary` block reports `weight_firing` (effective ensemble weight in use) vs `weight_silent_live` (paid-for but silent). Use this when a model_prediction shows low voter_coverage — it tells you exactly which data pipelines to wake up. 5min cache.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_ml_drivers` (~130 tokens)

Top-N SHAP feature attributions for the ML ensemble score on a ticker: drivers[] ranked by |SHAP| with feature (e.g. beta_cma, vol_21d), signed shap_value, direction (bullish/bearish/neutral). PRIMARY tool for 'why is the model bullish/bearish on X?'. Nightly run; default top=5, max 20; available:false outside the ML universe. 5min cache.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).
- `top` (string)

### `tengu_v3_intel_model_calibration` (~189 tokens)

Live conformal-coverage telemetry: how often the model's stated 90% intervals actually contain the realised 5d returns. Built nightly over the trailing 30 days of prediction-outcome pairs. Returns `stated_coverage` (target, typically 0.90), `realised_coverage` (actual, e.g. 0.78), `coverage_delta` (gap, negative = under-covering), `status` (red/amber/green), `n_pairs` (sample size, ~110K typical), `mean_interval_width_pct`, `mean_predicted_return_pct`, `mean_realised_return_pct`, and an `interpretation` string. Treat status=red as a verdict-grade caveat — chat should attach 'model intervals currently under-covering' to any ml_prediction citation when this returns red. 1h cache.

### `tengu_v3_intel_pnl_attribution` (~186 tokens)

Daily PnL track record for the paper book, Carhart 4-factor-decomposed. Snapshotted nightly. Returns `rows[]` of trading days with per-row gross/net return in basis points, transaction cost, turnover, plus the Carhart factor contributions (MKT-RF, SMB, HML, UMD) and residual alpha — the institutional skill measure that strips market/size/value/momentum beta. Window aggregate: mean daily bps, hit rate, annualised Sharpe, cumulative net + alpha. Default 30 trading days; query `?days=N` (bounded to 365). Use this to ground any track-record claim the chat makes — e.g. 'our paper book made +29 bps yesterday, +111 bps alpha contribution'. 1h cache.

Input parameters:

- `days` (string)

### `tengu_v3_intel_cftc_cot` (~221 tokens)

CFTC Commitments-of-Traders report — futures positioning by cohort (producers/hedgers, money managers, other reportables, non-reportables). Polled weekly on Fridays at 18:00 ET, the CFTC's standard publication window. Without filter: returns top-10 money-manager longs and shorts across all contracts on the latest report — the institutional-spec directional bets. With `?contract=GOLD` (substring match, also accepts WTI, NATGAS, SP500-EMINI, BITCOIN-MICRO, 10Y-NOTE, etc.) returns the matched contract's 5-week positioning history with cohort net positions, % of OI, and a 4-week net delta. Extreme money-manager longs at the top of a rally historically mark exhaustion; commercial-hedger net longs at the bottom historically mark reaccumulation — leading indicator. 4h cache (CFTC publishes weekly so the data is stale-by-design).

Input parameters:

- `contract` (string)

### `tengu_v3_intel_short_interest` (~112 tokens)

FINRA bi-monthly short interest: short_interest_shares, short_interest_pct_of_float, days_to_cover, short_interest_change_pct_30d (vs prior settlement), avg_daily_volume_at_settlement. Call for 'how shorted is X?' / squeeze questions. borrow_fee_pct_annualized is null — see /intel/borrow_cost. Market-data FINRA re-publish; 6h cache.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_analyst_consensus` (~125 tokens)

Analyst consensus: rating_label (Strong Buy…Strong Sell), rating_score (1-5), bucket counts, price_target_avg/high/low/count, recent_actions[] (upgrades/downgrades/PT changes, firm+analyst+from→to; recent_action_limit). Call for 'what do analysts say about X?' / price targets. Actions from newswire (client-side ticker filter). 1h cache.

Input parameters:

- `recent_action_limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_borrow_cost` (~173 tokens)

Securities-lending borrow cost (annualized fee %, rebate, utilization, shares available) — LIVE. Source chain, first hit wins (see `source`): 1) options-flow shorts feed (intraday) + recent SEC fails-to-deliver enrichment; 2) licensed-research securities-finance Securities Finance latest archived daily row; 3) implied-vol option-implied borrow. `is_stale` flags prints older than 48h (warehouse rows trail on the licensed-research refresh lag). data_source_pending=true ONLY when all three sources miss — then fall back to /intel/short_interest as the squeeze proxy. Use /intel/borrow_cost_history for the daily series. 15-min cache.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_sec_filing_extract` (~127 tokens)

Structured extracts from the latest 10-K/10-Q/8-K via the SEC EDGAR JSON API: balance_sheet_summary, cash_flow_summary, shares_outstanding (basic+diluted+4Q trend), filing_date, filing_url, accession_number. Call for numbers straight from the latest filing. MVP: text_sections are deep-links only — use web_search on filing_url. 24h cache.

Input parameters:

- `filing_type` (string, required): Path parameter 'filing_type' (required).
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_calendar_economics` (~126 tokens)

Macro economic-release calendar from the newswire — CPI, NFP, FOMC, GDP, retail sales and more, filterable by ISO-3 country (USA, CAN, DEU) and date range; importance 5 = market-moving. Call this when the user asks what macro events or data releases are coming up or could move markets this week.

Input parameters:

- `country` (string)
- `date_from` (string)
- `date_to` (string)
- `importance` (integer)
- `limit` (integer)

### `tengu_v3_intel_calendar_ratings` (~124 tokens)

Analyst rating actions and price-target changes from the newswire: analyst_firm, analyst_name, action_company (Maintains/Initiates), action_pt (Raises/Lowers), pt_current, pt_prior, pt_pct_change, rating_current/prior. Call this when the user asks about upgrades, downgrades, or price-target moves on a ticker.

Input parameters:

- `action` (string)
- `date_from` (string)
- `date_to` (string)
- `limit` (integer)
- `tickers` (string)

### `tengu_v3_intel_calendar_conference_calls` (~123 tokens)

newswire: upcoming earnings conference-call schedule. Returns ticker, company, date, start_time, period (Q1/Q2/...), webcast_url, phone_num, international_num, access_code, and importance (5 = mega-cap market-mover). Distinct from /calendar/earnings — this carries the call logistics analysts need to attend.

Input parameters:

- `date_from` (string)
- `date_to` (string)
- `importance` (integer)
- `limit` (integer)
- `tickers` (string)

### `tengu_v3_intel_commodities` (~463 tokens)

REAL-TIME spot prices for the macro commodities (oil WTI/Brent, gold, silver, nat-gas, copper). AUTHORITATIVE source for any numeric commodity claim — call this BEFORE quoting a price level. QUOTE 'spot' DIRECTLY — it's the live commodity price (FRED's last published close anchored to the live commodity-tracking ETF's cumulative return since that date, so it reflects today's market not FRED's T+1..T+5 publish lag). 'unit' tells you the dimension (USD/barrel for oil, USD/MMBtu for natgas, USD/metric-ton for copper). Response fields per item: 'spot' (live number — quote this), 'unit' (dimension), 'spot_basis' ('live_etf_bridged' = FRED+ETF bridge | 'fred_close' = FRED only, no ETF available | 'etf_share_price' = FRED dead, falling back to ETF SHARE price [unit reads 'USD per share of {ETF}'] — DO NOT claim $/oz when basis is etf_share_price), 'spot_time' (timestamp of the live observation), 'live_spot_estimate' (same as spot when bridged, else null), 'live_basis' (transparent arithmetic, e.g. 'FRED WTI $99.89 (2026-04-27) × (USO 142.80 / 134.72)'), 'bridge_return_pct' (ETF return applied to FRED), 'official_close' + 'official_close_as_of' (FRED audit value — quote ONLY if user explicitly asks for the last settlement / closing price), 'change_pct_1d/5d/30d' (FRED-window returns), 'history_5d' (last 6 FRED observations newest-first), 'fred_days_stale' + 'is_stale' (publish-lag flags — informational; spot is still live regardless), 'etf_proxy_quote' (the underlying ETF snapshot used for the bridge; for transparency only). 'symbol=oil' returns both WTI and Brent; default 'all' returns all six.

Input parameters:

- `symbol` (string)

### `tengu_v3_news_crypto_latest` (~110 tokens)

Recent crypto news with sentiment for one or more symbols: title, source, sentiment (Positive/Neutral/Negative), date, topic tags. PRIMARY tool for ticker-specific crypto drilling (BTC, ETH, SOL, COIN, MSTR) — call when the user asks what's happening with a specific coin; use by_category for market-wide questions. 60s cache.

Input parameters:

- `date_range` (string)
- `items` (integer)
- `tickers` (string, required)

### `tengu_v3_news_crypto_by_category` (~92 tokens)

Crypto news by section: section='general' for overall crypto-market headlines, section='alltickers' for cross-coin coverage. PRIMARY tool for broad 'what's happening in crypto today' questions — for a single coin use news_crypto_latest instead. 120s cache.

Input parameters:

- `date_range` (string)
- `items` (integer)
- `section` (string)

### `tengu_v3_news_crypto_sentiment_stats` (~91 tokens)

crypto-news: daily sentiment rollup for a crypto symbol (-1.5 to +1.5). Densest single-call signal — N days of (positive_count, negative_count, neutral_count, sentiment_score). Use to detect sentiment regime shifts on BTC/ETH/etc. 300s cache.

Input parameters:

- `date_range` (string)
- `ticker` (string, required)

### `tengu_v3_news_crypto_market_sentiment` (~72 tokens)

Overall crypto market sentiment rollup across the news feed (no ticker filter). Call this when the user asks whether crypto as a whole looks bullish or bearish right now — for a specific coin's sentiment use news_crypto_latest. 300s cache.

Input parameters:

- `date_range` (string)

### `tengu_v3_news_crypto_trending` (~68 tokens)

Trending crypto headlines, noise-filtered down to top stories only. Pass ticker to filter to one coin; omit for market-wide trending. Call this when the user asks what the biggest crypto stories are right now. 120s cache.

Input parameters:

- `ticker` (string)

### `tengu_v3_news_crypto_ticker_only` (~84 tokens)

Crypto news mentioning ONLY the requested coin, with no co-tagged altcoins — the strictest per-coin filter. Call this when the user wants pure single-coin coverage and news_crypto_latest brings back too much cross-coin noise.

Input parameters:

- `items` (integer)
- `page` (integer)
- `ticker` (string, required)

### `tengu_v3_news_crypto_multi_ticker` (~84 tokens)

Crypto news where ALL the listed coins co-appear in the same story — a correlation feed. Call this when the user asks how two or more coins are linked in the news, e.g. stories covering both BTC and ETH together.

Input parameters:

- `items` (integer)
- `page` (integer)
- `tickers` (string, required)

### `tengu_v3_news_crypto_all_tickers_sentiment` (~76 tokens)

Sentiment leaderboard across the full tracked crypto universe — every coin's sentiment_score over the window (default last7days). Call this when the user asks which coins have the most bullish or most bearish news sentiment right now.

Input parameters:

- `date_range` (string)
- `page` (integer)

### `tengu_v3_news_crypto_top_mentions` (~64 tokens)

Top 50 most-mentioned crypto tickers over the window (default last7days) — a crypto-attention proxy. Call this when the user asks which coins are getting the most buzz or news coverage lately.

Input parameters:

- `date_range` (string)

### `tengu_v3_news_crypto_events` (~84 tokens)

Clustered crypto headline events — related stories grouped into discrete events; fetch recent events, filter by ticker, or drill into one eventid. Call this when the user asks what distinct news events hit a coin rather than a raw headline list.

Input parameters:

- `eventid` (string)
- `page` (integer)
- `tickers` (string)

### `tengu_v3_news_crypto_sundown` (~63 tokens)

Evening crypto market-recap digest, published Mon-Fri at 7pm ET. Call this when the user asks for an end-of-day crypto wrap-up or a morning briefing needs an overnight crypto recap.

Input parameters:

- `page` (integer)

### `tengu_v3_news_crypto_ticker_price` (~84 tokens)

Delayed crypto prices with 24h volume and price changes — a single coin, a list, or the top 50 by 24h volume when tickers is omitted. Call this when the user asks where a coin is trading or which coins are moving; prices are delayed, not real-time.

Input parameters:

- `tickers` (string)

### `tengu_v3_news_crypto_whale_transactions` (~112 tokens)

Large crypto on-chain and exchange transactions for BTC/ETH/SOL/TRX plus major exchanges, filterable by min_amount USD (updated ~every 5min). Call this when the user asks about whale moves or big transfers; use whale_summary for the aggregated buy-vs-sell read.

Input parameters:

- `date_range` (string)
- `items` (integer)
- `min_amount` (integer)
- `page` (integer)
- `tickers` (string)

### `tengu_v3_news_crypto_whale_summary` (~79 tokens)

Aggregated whale-transaction stats over the window: total volume, net exchange flow (in vs out), and biggest single tx. PRIMARY tool for 'is smart money buying or selling this coin?' — use whale_transactions for the individual transfers.

Input parameters:

- `date_range` (string)
- `tickers` (string)

### `tengu_v3_news_crypto_summary` (~83 tokens)

crypto-news: one-shot per-coin intel summary. Parallel-fetches recent news (24h) + 7-day sentiment stats + trending headlines. The single call to make when asked 'what's going on with BTC?' or any crypto-name analysis. 90s cache.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_news_forex_latest` (~112 tokens)

Recent FX news with sentiment for one or more currency pairs: title, source, sentiment (Positive/Neutral/Negative), date, topic tags. PRIMARY tool for pair-specific drilling (EUR-USD, GBP-USD, USD-JPY, AUD-USD) — call when the user asks what's moving a specific pair; use by_category for macro themes. 180s cache.

Input parameters:

- `date_range` (string)
- `items` (integer)
- `pairs` (string, required)

### `tengu_v3_news_forex_by_category` (~134 tokens)

Macro and cross-pair FX news: section='general' = market macro (Fed, CPI, ECB, NFP, BoJ, BoE), section='alltickers' = cross-pair coverage; optional topic filter (cpi, fed, oil, gold, recession...) on general. Call this when the user asks about macro FX themes rather than one pair — use news_forex_latest for pair drilling. 300s cache.

Input parameters:

- `date_range` (string)
- `items` (integer)
- `section` (string)
- `topic` (string)

### `tengu_v3_news_forex_sentiment_stats` (~95 tokens)

fx-news: daily sentiment rollup for an FX pair (-1.5 to +1.5). Densest single-call signal — N days of (positive_count, negative_count, neutral_count, sentiment_score). Use to detect regime shifts on EUR-USD/GBP-USD/etc. 600s cache.

Input parameters:

- `date_range` (string)
- `pair` (string, required)

### `tengu_v3_news_forex_market_sentiment` (~77 tokens)

Overall FX market sentiment rollup (no pair filter) — gauges DXY-style market posture rather than any single pair. Call this when the user asks about broad FX market mood; use news_forex_latest for a specific pair's sentiment. 600s cache.

Input parameters:

- `date_range` (string)

### `tengu_v3_news_forex_top_mentions` (~57 tokens)

fx-news: most-mentioned FX pairs over a window with sentiment tilt. High-leverage 'what is the FX market talking about?' single call. 300s cache.

Input parameters:

- `date_range` (string)

### `tengu_v3_news_forex_trending` (~74 tokens)

Trending FX headlines, noise-filtered down to top stories only. Pass pair (e.g. EUR-USD) to filter; omit for market-wide trending. Call this when the user asks what the biggest FX stories are right now. 300s cache.

Input parameters:

- `pair` (string)

### `tengu_v3_news_forex_sundown_digest` (~72 tokens)

Daily evening FX market summary article. Call this when the user asks for an end-of-day FX wrap-up or a morning briefing needs an overnight FX recap; optional date_range filter (today/last7days). 600s cache.

Input parameters:

- `date_range` (string)

### `tengu_v3_news_forex_events` (~102 tokens)

Clustered FX news events from a forex newswire — high press-coverage stories like central-bank decisions, rate hikes, and intervention rumors, optionally filtered to one pair (e.g. EUR-USD). Call this when the user asks 'what major macro events hit today' or what's moving a currency. 300s cache.

Input parameters:

- `date_range` (string)
- `items` (integer)
- `pair` (string)

### `tengu_v3_news_forex_economic_calendar` (~114 tokens)

Economic calendar with actual, forecast, and previous values for macro releases (Fed/CPI/NFP/ECB) — these prints are priced-in by FX traders, so call it for any 'what did CPI print / what macro data hit this week' question. Filter by currency (USD/EUR/JPY) and importance (high/medium/low). 600s cache.

Input parameters:

- `currency` (string)
- `date_range` (string)
- `importance` (string)

### `tengu_v3_news_forex_prices` (~88 tokens)

Live FX mid prices (15-min upstream refresh): pass pairs for specific quotes (e.g. EUR-USD,GBP-USD) or base for all pairs vs one currency (base=USD). Call this when the user asks where a currency pair is trading right now. 30s cache.

Input parameters:

- `base` (string)
- `pairs` (string)

### `tengu_v3_news_forex_summary` (~87 tokens)

fx-news: one-shot per-pair intel summary. Parallel-fetches recent news (24h) + 7-day sentiment stats + trending headlines. The single call to make when asked 'what's going on with EUR-USD?' or any FX-pair analysis. 180s cache.

Input parameters:

- `pair` (string, required): Path parameter 'pair' (required).

### `tengu_v3_research_web_search` (~111 tokens)

Multi-mode web search in parallel across link, cited-synthesis and social-sentiment coverage. Returns synthesized_answer, social_sentiment, citations, and a deduplicated list of links. Call this BEFORE relying on model knowledge for time-sensitive questions (markets, earnings, regulation, breaking news, macro events). 15-min LRU cache.

Input parameters:

- `count` (integer)
- `freshness` (string)
- `providers` (string)
- `query` (string, required)

### `tengu_v3_research_fetch_url` (~116 tokens)

Read ONE specific page you already have the URL for — call ONLY after a search returned the link, never to discover pages. Returns the page's readable body as clean markdown with title, author, published date, and a domain trust tier; handles paywalls. Read at most the 2-3 most load-bearing links per question. NOT a search tool: tengu_v3_research_web_search finds the links this tool reads.

Input parameters:

- `max_chars` (integer)
- `url` (string, required)

### `tengu_v3_research_synthesis` (~103 tokens)

Citation-rich research synthesis (grounded LLM). Returns a concise synthesized answer plus the list of source URLs that grounded it. Use when the user wants the answer GROUNDED with explicit sources (e.g. 'summarize NVIDIA's last earnings call and link the transcript'). Distinct from web_search — this returns prose + citations, not a list of headlines.

Input parameters:

- `query` (string, required)
- `system_prompt` (string)

### `tengu_v3_research_x_sentiment` (~116 tokens)

Real-time X/Twitter sentiment narrative. Pass ticker=NVDA for a focused fintwit read on a name, or query=... for a free-form social-media question. Returns the narrative answer with quantified bullish/bearish ratio and any source URLs social-search grounded against. Use when you want the *vibe* on a name right now (retail sentiment, breaking rumours, unusual social activity), not the news article list.

Input parameters:

- `query` (string)
- `ticker` (string)

### `tengu_v3_intel_yield_curve` (~141 tokens)

Live US Treasury yield curve + recession-watch spreads + breakeven inflation. Returns DGS1MO/3MO/2/5/10/30 yields, the 10Y-2Y and 10Y-3M spreads (with 'inverted' flags — classic recession signal), 5Y/10Y breakeven inflation, and the trade-weighted USD index. Quote these numbers verbatim — DO NOT recall yields from training data, which is months stale. 5-min cache. For a focused short-end + cash-park view, use tengu_v3_intel_risk_free_rate.

### `tengu_v3_intel_risk_free_rate` (~142 tokens)

Current US T-bill yields + parked-cash quick-reference. Use this for capital-allocation responses — the model needs to compare risky vs risk-free expected return ('T-bills currently yield X% — the equity allocation must clear that hurdle'). Returns 1m/3m/2y/10y yields, `parked_yield_example` showing annual coupon on $10k principal across tenors, and curated T-bill ETF references (SGOV, BIL, SHV) with expense ratios + use-case so the model has something specific to cite. Sourced from FRED. 5-min cache.

### `tengu_v3_intel_options_chain` (~128 tokens)

Options-chain snapshot for a ticker: every contract with Greeks (delta/gamma/theta/vega), implied volatility, open interest, last quote/trade; filter by expiry or call/put side. PRIMARY tool for 'where's the gamma / IV smile / max pain by strike'. Pair with options_volume (flow) and gex (dealer positioning). 60s cache.

Input parameters:

- `contract_type` (string)
- `expiration_date` (string)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_etf_summary` (~140 tokens)

One-call ETF intelligence rollup — top holdings + commodity exposure + which other v3 tools work for this ticker. Returns top constituents by weight (holdings provider), and for commodity-tracking ETFs (USO/BNO/GLD/IAU/SGOL/SLV/SIVR/UNG/BOIL/CPER) the linked FRED spot + live proxy price. CALL THIS BEFORE saying 'no data' on any ETF question — most ETFs have rich underlying-level intel even when the wrapper itself doesn't trade analyst targets / insider flow.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_skills_ta_master` (~123 tokens)

One-call technical read on a ticker: fuses candlestick chart (RSI/MACD/BB), GEX, max pain, options flow/volume, insider and congressional trades, and off-exchange volume into a signal list, aggregate bull/bear stance, and embedded PNG chart. Call this FIRST for 'how does the chart/setup look?' — one round-trip replaces ~8 calls.

Input parameters:

- `bars` (integer)
- `interval` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_skills_apex_equity` (~384 tokens)

Apex Equity Intelligence — single-call omnibus brief for 'what do you think about $TICKER'. Fuses 12 vendor calls in parallel (daily + hourly charts, company facts, income/balance statements, snapshot, insider, congress, lobbying, gov-contracts, WSB, patents, off-exchange). Returns: 'fundamentals' (12 scalar fields — name, sector, market_cap, last_price, day_change_pct, latest_revenue, latest_net_income, latest_eps, total_assets/liabilities/equity, filing_date), 'intel' (8 scalar fields — insider/congress 30d buy-sell counts, ttm_lobbying_usd, ttm_gov_contract_usd, wsb_7d_mentions+sentiment, patent_filings_recent, avg_dark_pool_pct_30d), 'flags' (notable patterns: insider_cluster_buy/sell, elevated_dark_pool, retail_attention_spike, etc.), 'chart' (primary daily 120-bar candlestick PNG with RSI/MACD/BB indicators, palette-quantized to keep the tool result under 32KB), and 'charts' (a list of ADDITIONAL charts beyond the primary — currently just the hourly intraday chart; do NOT expect the daily here, it's only in 'chart'). 'components' carries raw counts of items behind each digest. 'vendor_errors' is non-empty when one of the parallel fetches failed; the rest of the payload is still usable. For full per-section detail (complete insider trade list, full income statements, etc.) call the dedicated tools tengu_v3_fundamentals_*/tengu_v3_intel_* — apex_equity is the digest, not the firehose.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_skills_trading_plan` (~133 tokens)

Actionable long/short plan for a ticker: entry, stop (recent swing or 1.5x-ATR proxy), 1R/2R/3R targets, position size for a given risk_pct, plus a thesis citing supporting signals (trend, flow tilt, insider, congress) and an embedded PNG chart. Call this when the user asks 'how would I trade X'; bias=auto picks direction from TA stance.

Input parameters:

- `bias` (string)
- `risk_pct` (number)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_framework_list` (~62 tokens)

Lightweight catalogue of all registered frameworks — one row per framework with framework_id + intent + 1-line applies_when + version. Useful for discovery / debugging without parsing the full library. For the actual decision template, call tengu_v3_framework_lookup.

### `tengu_v3_briefing_daily` (~174 tokens)

Daily briefing for a given user_id: regime, overnight futures, earnings_today, macro_today, watchlist_signals, news_highlights, risk_exposure, top_movers. ALWAYS returns a briefing — served from a precomputed cache (~5ms) when available, else built on demand (~3s, no LLM calls). The response carries '_source': 'precomputed' or 'computed:request_time' so callers can tell which path served them. Pass precompute_only=true ONLY when you specifically need to know whether the cron has already run (e.g. monitoring scripts) — that path returns 404 instead of building.

Input parameters:

- `date` (string)
- `fallback_build` (boolean)
- `precompute_only` (boolean)
- `user_id` (string, required)

### `tengu_v3_briefing_status` (~57 tokens)

Presence check for today's briefing payload for a user/date. Call when the user asks whether the daily briefing was generated or why it looks missing.

Input parameters:

- `date` (string)
- `user_id` (string, required)

### `tengu_ml_health` (~50 tokens)

ML pipeline freshness probe: has_predictions, has_weights_history, latest_as_of_ts, n_tickers. Call when the user asks whether the ML pipeline is healthy or why predictions look missing/stale.

### `tengu_ml_predict` (~74 tokens)

Latest ML ensemble prediction for one ticker: blended_score, conviction, decile rank, and per-voter sub-scores. Call this when the user asks 'what does the model think of X' or wants a quantitative score to weigh against fundamentals.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_ml_top_picks` (~78 tokens)

Top-N ranked tickers from the latest ML ensemble scoring snapshot, optionally floored by min_conviction. PRIMARY tool for 'what are the model's top picks / best-ranked stocks right now'; use tengu_ml_predict for one ticker's detail.

Input parameters:

- `limit` (integer)
- `min_conviction` (number)

### `tengu_ml_weights` (~54 tokens)

Current live ML ensemble voter weights (latest history row, broken out per market regime). Call it to know how the ensemble is blending its voters before interpreting a prediction; use tengu_ml_weights_history for drift over time.

### `tengu_ml_weights_history` (~71 tokens)

Time series of ML ensemble voter weights (per regime, newest first; days=1-365, default 30). Call this when the user asks how the model's weighting has drifted or shifted across regimes; use tengu_ml_weights for the current row.

Input parameters:

- `days` (integer)

### `tengu_v3_private_markets_search` (~176 tokens)

Search PRIVATE companies / investors (VC/PE) / funds / people / limited partners by name (prefix, case-insensitive), ticker, or CIK — relevance-ranked so the prominent entity is #1 (brand/AKA/former-name aware: 'Nubank'→Nu Holdings, 'Square'→Block). Use this FIRST for any private-company question (e.g. 'tell me about Stripe', 'who is Sequoia') to resolve the entity id, then call the company/dossier/realtime tools. type=all searches every entity kind. detail=full returns every column per hit (for rich tables).

Input parameters:

- `detail` (string)
- `fields` (string)
- `limit` (integer)
- `q` (string)
- `type` (string)

### `tengu_v3_private_markets_search_suggest` (~100 tokens)

INSTANT (sub-100ms) private-company typeahead — prominence-ranked with the SAME ranking as search, so the famous company is never truncated; each hit carries authoritative website/domain/logo_url plus sector, last-known valuation, ticker. Call this FIRST to resolve a name to company_id; use /search for multi-entity or detail=full.

Input parameters:

- `limit` (integer)
- `q` (string)

### `tengu_v3_private_markets_company` (~104 tokens)

FULL private-company profile by company_id: financials (revenue/EBITDA/EBIT/net income/EV/net debt), complete financing history (round size/valuation/date/type), classification, HQ/contact, parent hierarchy, and cikcode/ticker to join public data. Call it after resolving the id via search_suggest for the deep dive on one company.

Input parameters:

- `company_id` (string, required): Path parameter 'company_id' (required).

### `tengu_v3_private_markets_company_dossier` (~109 tokens)

EVERYTHING on a private company in ONE call — the complete detail-page payload: full profile (incl. financials & full financing history) + full deal history + investors + competitors + similar companies + board/team.

Input parameters:

- `blocks` (string)
- `company_id` (string, required): Path parameter 'company_id' (required).
- `deals` (integer)
- `fields` (string)
- `investors` (integer)
- `peers` (integer)

### `tengu_v3_private_markets_company_realtime` (~157 tokens)

LIVE real-time overlay for a private company — the fast-moving complement to the (weekly, possibly STALE) private-markets profile, on a short TTL with per-field source provenance. ALWAYS call this for a private company to check whether it has GONE PUBLIC: it returns a `public_transition` block (new ticker, IPO date, SEC evidence) even when the snapshot still shows 'In IPO Registration'/no ticker — then pivot to the public-equity tools (price_snapshot / company_facts / sec_filings) for live data. Also surfaces live headcount / jobs / funding freshness when those providers are set.

Input parameters:

- `company_id` (string, required): Path parameter 'company_id' (required).

### `tengu_v3_private_markets_company_deals` (~96 tokens)

Funding-round and M&A deal history for a private company (deal size, type, VC round, pre/post-money valuation), newest first. Call this when the user asks 'when did X last raise / at what valuation / who acquired it'; use /investors for who participated.

Input parameters:

- `company_id` (string, required): Path parameter 'company_id' (required).
- `limit` (integer)

### `tengu_v3_private_markets_company_investors` (~107 tokens)

Investor roster for a private company, resolved through the deal-investor relation; detail=full adds every investor column (AUM, dry powder, activity). Call this when the user asks 'who backed X / which VCs are on the cap table'; use /deals for the rounds themselves.

Input parameters:

- `company_id` (string, required): Path parameter 'company_id' (required).
- `detail` (string)
- `limit` (integer)

### `tengu_v3_private_markets_companies` (~265 tokens)

SCREEN private companies by sector, geography, financing/business status, size (total raised/valuation/employees, $MILLIONS), founding year; rows carry ticker/cikcode to join public data. PRIMARY tool for list questions like 'VC-backed fintech in Europe raised >$100M'; status=active_private excludes public/acquired/defunct.

Input parameters:

- `business_status` (string)
- `country` (string)
- `desc` (boolean)
- `detail` (string)
- `fields` (string)
- `financing_status` (string)
- `founded_after` (integer)
- `founded_before` (integer)
- `has_ticker` (boolean)
- `industry_group` (string)
- `limit` (integer)
- `max_employees` (integer)
- `max_raised` (number)
- `max_valuation` (number)
- `min_employees` (integer)
- `min_raised` (number)
- `min_valuation` (number)
- `offset` (integer)
- `q` (string)
- `region` (string)
- `sector` (string)
- `sort` (string)
- `status` (string)

### `tengu_v3_private_markets_company_comparables` (~116 tokens)

Private peer set for one company: same industry sector and similar size band (0.2x-5x total raised), excluding the company itself. Call this when the user asks 'who are X's private comps' or needs a peer group for valuation framing; detail=full returns every column per peer.

Input parameters:

- `company_id` (string, required): Path parameter 'company_id' (required).
- `detail` (string)
- `fields` (string)
- `limit` (integer)

### `tengu_v3_private_markets_aggregates` (~81 tokens)

Private-market landscape aggregates grouped by sector, industry_group, region, or country: company counts, total and median capital raised, median valuation, median employees. Call this for market-level questions like 'which sectors raise the most' — not for single companies.

Input parameters:

- `by` (string)
- `limit` (integer)

### `tengu_v3_private_markets_investor` (~99 tokens)

Investor profile for one VC/PE/family office by investor_id: type, AUM, dry powder, year founded, investment focus, and median valuation/round. Call this when the user asks who an investor is or how big/active they are; use investor_relations for portfolio, funds, and co-investors.

Input parameters:

- `investor_id` (string, required): Path parameter 'investor_id' (required).

### `tengu_v3_private_markets_fund` (~66 tokens)

Fund profile + performance: vintage, size, category, status, and returns (IRR/DPI/TVPI/RVPI/NAV/quartile) when loaded.

Input parameters:

- `fund_id` (string, required): Path parameter 'fund_id' (required).

### `tengu_v3_private_markets_person` (~88 tokens)

Person profile (founder/exec/board member) by person_id: role, board seats, affiliated deals/funds, education, and professional-profile link. Call this when the user asks who a founder or executive is; use person_relations to walk their full career and deal history.

Input parameters:

- `person_id` (string, required): Path parameter 'person_id' (required).

### `tengu_v3_private_markets_limited_partner` (~90 tokens)

Limited-partner profile by lp_id: LP type, AUM, total/active commitments, allocation to alternatives, and openness to first-time funds. Call this when the user asks who an LP is or how much it commits; use limited_partner_relations for its fund commitments and mandates.

Input parameters:

- `lp_id` (string, required): Path parameter 'lp_id' (required).

### `tengu_v3_private_markets_deal` (~91 tokens)

Single deal / financing round by deal_id: deal size, type, VC round, pre/post-money valuation, and a synopsis. Call this when the user asks about a specific round ('what was the Series C?'); use deal_relations for the investors, lenders, and tranches behind it.

Input parameters:

- `deal_id` (string, required): Path parameter 'deal_id' (required).

### `tengu_v3_private_markets_service_provider` (~93 tokens)

Advisory-firm profile by sp_id — the law firm, investment bank, auditor or consultancy behind private-market deals: type, employees, parent, and count of companies serviced. Call this when the user asks who advised a deal or how big an adviser is; use service_provider_relations for its client list.

Input parameters:

- `sp_id` (string, required): Path parameter 'sp_id' (required).

### `tengu_v3_private_markets_service_provider_relations` (~117 tokens)

Reverse adviser index for one service provider: every deal, company, investor, fund or LP the firm has advised (relation= picks the edge, limit default 50). PRIMARY tool for 'which deals did this bank run?' / 'who does this law firm work for?' — the counterparty-selection view the forward service_providers relation cannot express.

Input parameters:

- `limit` (integer)
- `relation` (string, required)
- `sp_id` (string, required): Path parameter 'sp_id' (required).

### `tengu_v3_private_markets_relations` (~65 tokens)

Catalogue of every queryable relation per private-markets entity type — the map of the private-capital graph. Call it first when unsure which relation= value a company/investor/fund/deal/person/LP relations tool accepts before traversing.

### `tengu_v3_private_markets_company_relations` (~115 tokens)

Traverse a company's private-market graph one edge per call (relation=): competitors, investors, board, similar companies, affiliates, buyside targets, service providers, industries/verticals, news, financials, employee history and more. Call this when the user asks who backs, competes with, or sits on the board of a company.

Input parameters:

- `company_id` (string, required): Path parameter 'company_id' (required).
- `limit` (integer)
- `relation` (string)

### `tengu_v3_private_markets_deal_relations` (~104 tokens)

Traverse a deal's graph one edge per call (relation=): investors, tranches, debt lenders, sellers, service providers, bonds, loans, distribution beneficiaries. Call this when the user asks who funded, lent into, or sold in a specific round after fetching the deal itself.

Input parameters:

- `deal_id` (string, required): Path parameter 'deal_id' (required).
- `limit` (integer)
- `relation` (string)

### `tengu_v3_private_markets_investor_relations` (~114 tokens)

Traverse an investor's graph one edge per call (relation=): portfolio companies, funds raised, co-investors, LPs, board, deals, news, and investment focus by industry/year. Call this when the user asks what a VC/PE firm holds, who invests alongside it, or who its LPs are.

Input parameters:

- `investor_id` (string, required): Path parameter 'investor_id' (required).
- `limit` (integer)
- `relation` (string)

### `tengu_v3_private_markets_fund_relations` (~105 tokens)

Traverse a fund's graph one edge per call (relation=): investors, LP commitments, team, portfolio holdings, close history, fund family, service providers, and returns time-series. Call this when the user asks what a fund holds, who committed capital, or how it has performed.

Input parameters:

- `fund_id` (string, required): Path parameter 'fund_id' (required).
- `limit` (integer)
- `relation` (string)

### `tengu_v3_private_markets_person_relations` (~100 tokens)

Traverse a person's graph one edge per call (relation=): career positions, board seats, education, affiliated deals/funds, advisory roles. Call this when the user asks where a founder or exec worked before, what boards they sit on, or which deals they touched.

Input parameters:

- `limit` (integer)
- `person_id` (string, required): Path parameter 'person_id' (required).
- `relation` (string)

### `tengu_v3_private_markets_limited_partner_relations` (~93 tokens)

Traverse an LP's graph one edge per call (relation=): fund commitments, board, mandates, news, service providers. Call this when the user asks which funds an LP has committed to or what mandates it is running.

Input parameters:

- `limit` (integer)
- `lp_id` (string, required): Path parameter 'lp_id' (required).
- `relation` (string)

### `tengu_v3_tape_bars` (~176 tokens)

Intraday minute bars for one equity from FIRM's own market-data capture (~10.5k tickers, extended hours included). Use when an agent needs REAL intraday price/volume history — how a ticker traded through an event, VWAP context, or a finer-grained chart than daily bars. Archive begins 2026-05-10; pass date=YYYY-MM-DD (or start+end, max 5 trading days). 1m is the native grain; 5m/15m/1h are resampled server-side.

Input parameters:

- `date` (string)
- `end` (string)
- `interval` (string)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_tape_index_bars` (~162 tokens)

Intraday minute bars for the major index tapes — SPX, NDX, DJI, RUT, VIX — from FIRM's own market-data indices capture. Use for intraday market/vol context around an event (how did SPX and VIX move through the FOMC statement?) or as the benchmark leg next to tengu_v3_tape_bars. Archive begins 2026-05-14; one day or max 5 trading days per call.

Input parameters:

- `date` (string)
- `end` (string)
- `index` (string, required): Path parameter 'index' (required).
- `interval` (string)
- `limit` (integer)
- `start` (string)

### `tengu_v3_tape_options` (~149 tokens)

Raw options trade prints for one underlying on one trading day from FIRM's own market-data capture — per-print premium (notional_usd), strike, expiry, block/sweep flags, sorted largest premium first. Use when an agent needs the actual options tape behind a flow signal: whale prints, sweep activity, what struck around a specific time. Archive begins 2026-05-11; date is mandatory (70 GB day-partitioned table).

Input parameters:

- `date` (string, required)
- `limit` (integer)
- `min_premium` (number)
- `side` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_tape_futures` (~130 tokens)

Raw CME futures trade prints for one root (NG, CL, ES...) and one day, from FIRM's own capture: per-print price, size, notional, block flag across contract months. Call it for real futures flow: energy tape, rolls, block prints. date mandatory; archive from 2026-05-13, mostly CME energy (NG heavy) — empty = not-yet-captured, not quiet.

Input parameters:

- `date` (string, required)
- `limit` (integer)
- `root` (string, required): Path parameter 'root' (required).

### `tengu_v3_tape_futures_curve` (~138 tokens)

Futures term structure for one CME root (27 roots incl. ES, NQ, CL, NG, GC, ZN) from FIRM's daily chain snapshots — per contract month: last/settlement, bid/ask, session OHLC, volume, open interest, days-to-expiry. Call it for curve shape (contango/backwardation), roll, or OI distribution; omit date for latest, snapshots begin 2026-05-18.

Input parameters:

- `date` (string)
- `limit` (integer)
- `root` (string, required): Path parameter 'root' (required).

### `tengu_v3_tape_microstructure` (~122 tokens)

60s microstructure windows per ticker from FIRM's live tape: rolling vwap, trade count/avg size, block count/vol, buy/sell imbalance, large-trade premium. Call it to separate smart-money accumulation from retail moves. Active-set coverage (~few hundred names/session; empty = uncaptured); omit date for latest, capture from 2026-05-13.

Input parameters:

- `date` (string)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_options_flow_history` (~207 tokens)

Historical options-flow aggregates for one ticker — the ~60s warehouse capture behind the live /intel/options_flow tool. Call when you need how flow EVOLVED (e.g. 'was NVDA flow bullish before the earnings pop?') rather than the current snapshot. Rows: as_of_ts, polarity (-1..1 net bullish/bearish score), n_alerts, premium_total (USD) + a window summary (total premium, avg polarity, bullish/bearish snapshot counts). REQUIRES date OR start(+end), max 7 days per request (422 otherwise); warehouse coverage begins 2026-05-10. 5-min cache.

Input parameters:

- `date` (string)
- `end` (string)
- `limit` (integer)
- `min_premium` (number)
- `side` (string)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_iv_analytics` (~175 tokens)

LIVE implied-volatility analytics in one call: IV RANK (current IV + its 1-year percentile — the standard 'is vol cheap or rich' gauge, with a plain-language verdict), SKEW (risk-reversal per delta — put-vs-call demand / crash premium), and TERM STRUCTURE (IV per expiry + option-implied move, labelled backwardation vs contango). Use for 'should I buy or sell premium on X', earnings-vol setups, and hedging cost. Omit date for the latest session. Each block degrades independently. NOT the same as /intel/vol_surface, which serves the lagged academic surface.

Input parameters:

- `date` (string)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_gex_history` (~192 tokens)

Historical dealer gamma-exposure (GEX) for one ticker — daily per-strike snapshots behind the live /intel/gex tool. Call for 'how did dealer positioning shift into OPEX / earnings?'. Default returns ONE ROW PER TRADING DAY (call/put/net GEX totals, strike count, max-gamma strike); pass per_strike=true for the full strike ladder (gamma/charm/vanna + call/put GEX per strike). REQUIRES date OR start(+end), max 30 days per request (422 otherwise); coverage begins 2026-05-10. 10-min cache.

Input parameters:

- `date` (string)
- `end` (string)
- `limit` (integer)
- `per_strike` (boolean)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_darkpool_history` (~185 tokens)

Historical dark-pool (off-exchange) prints for one ticker — the per-print warehouse capture behind the live /intel/darkpool tool. Call to find WHEN large blocks hit and whether they printed at bid/mid/ask. Each row is an individual execution: executed_at, price, size, premium (USD), market center + the NBBO at print time; newest first, plus total premium/size summary. REQUIRES date OR start(+end), max 7 days per request (422 otherwise); coverage begins 2026-05-10. 5-min cache.

Input parameters:

- `date` (string)
- `end` (string)
- `limit` (integer)
- `min_premium` (number)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_borrow_cost_history` (~199 tokens)

Daily securities-lending borrow-cost HISTORY for one ticker from the licensed-research warehouse (default: last 90 days of coverage; max 365-day window). Primary source securities-finance Securities Finance (~50M rows 2010->latest licensed-research drop): annualized fee_pct / rebate_pct, utilization_pct and on-loan/lendable share quantities — the institutional squeeze-watch series (rising fee + utilization = tightening borrow). Falls back to implied-vol option-implied borrow (shortest tenor per day) when securities-finance lacks the name. licensed-research refreshes on a lag — check as_of before treating the newest row as current; use /intel/borrow_cost for the live snapshot. 1h cache.

Input parameters:

- `end` (string)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_transcripts_list` (~127 tokens)

List a company's earnings calls and investor-event transcripts (licensed institutional, 1.75M calls), newest first — call this FIRST to get the ``event_id`` you pass to the full-text route. One row per call (versions collapsed to the best copy: Proofed > Edited > Spellchecked) with date, title and event type. Full text coverage is 2020-2025; older calls are metadata-only.

Input parameters:

- `limit` (integer)
- `since` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_transcript_text` (~159 tokens)

Full earnings-call transcript as ordered speaker turns — use when the user wants what management or analysts actually SAID on a call. ``event_id`` comes from /api/v3/transcripts/{ticker} or /transcripts/search. Each turn carries speaker name + role (executive/analyst/operator) and section (presentation vs qa). ~2 MB text cap (``truncated: true`` when hit — refetch with components= to slice). Text coverage 2020-2025.

Input parameters:

- `components` (string)
- `event_id` (string, required): Path parameter 'event_id' (required).
- `max_turns` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_transcripts_search` (~113 tokens)

Search earnings-call transcripts. scope=headlines (default) searches call titles across ALL companies; scope=text searches the spoken words inside one company's transcripts (ticker REQUIRED) and returns per-call hit counts + a snippet. Use when the user asks 'which calls mention X' — then fetch the full text with the returned event_id.

Input parameters:

- `limit` (integer)
- `q` (string)
- `scope` (string)
- `since` (string)
- `ticker` (string)

### `tengu_v3_events` (~134 tokens)

Company corporate-event history from a licensed events feed (41.9M events, 1990-2026): M&A, guidance changes, buybacks, exec changes, activism, offerings, index adds/drops + 100 more types, newest-first dated headlines + summaries. PRIMARY tool for 'what happened at COMPANY'; filter type= (see /api/v3/events/types), since/until.

Input parameters:

- `limit` (integer)
- `since` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `type` (string)
- `until` (string)

### `tengu_v3_events_types` (~59 tokens)

Legend of the 105 licensed institutional KeyDev corporate-event types: id, human label, and the slug accepted by the type= filter of /api/v3/events/{ticker}. Static — call once to discover valid event-type filters.

### `tengu_v3_credit` (~142 tokens)

One-call credit snapshot for a company — call FIRST for any 'how risky is this company's debt?' question: latest securities-finance 5Y CDS spread (bps) with ~90-quote trend + market-implied default probability, current S&P rating with the last upgrade/downgrade action, a recent FINRA TRACE bond yield/volume summary, and the syndicated-loan-facility count. Blocks degrade independently (a missing dataset returns an error field in its block, never a failed call). Drill down with the credit bonds/cds/ratings/loans tools.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_credit_bonds` (~147 tokens)

FINRA TRACE corporate-bond trade prints for one issuer — individual OTC trades (price, yield, volume, buy/sell side) showing where the company's bonds ACTUALLY trade (realised credit spreads, not quotes). Matched by the FINRA bond-symbol prefix of the equity ticker; window spans at most 90 days (422 beyond). TRACE on licensed-research lags realtime by months — when the default recent window is empty the response includes latest_available; page backwards from it.

Input parameters:

- `end` (string)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_origin_short_activity` (~148 tokens)

How shorted is this name, from the tape itself: the DAILY consolidated short-volume prints (short ratio per session, full-market coverage) joined with the settled SHORT INTEREST published twice monthly (position, days-to-cover). Call it for squeeze setups, crowded shorts, or to check whether daily shorting is rising while settled interest lags. The two measures are a FLOW and a STOCK and can diverge — never treat them as the same number. Share volume is FRACTIONAL by design (retail fractional trading), so sub-1-share values are genuine.

Input parameters:

- `days` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_origin_whale_holdings` (~116 tokens)

What the tracked managers own, as filed on Form 13F: latest-period positions with value, share/principal count and portfolio weight, filterable by manager or issuer. Call it for whale positioning and conviction sizing. 13F is filed within 45 days of quarter end and covers LONG US equity only — it is a lagged, partial view of a book, never a live one.

Input parameters:

- `limit` (integer)
- `manager` (string)
- `ticker` (string)

### `tengu_v3_origin_insider_flow` (~127 tokens)

Insider transactions straight from the Form 4 filings: owner, title, transaction code, direction, shares, price and shares held after. Call it for insider conviction around events. Transaction codes matter — 'P'/'S' are open-market buys/sells while 'M' is an option exercise and 'A' an award; treating them alike overstates conviction. Coverage is a tracked issuer set, not the whole market.

Input parameters:

- `days` (integer)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_origin_macro_pulse` (~130 tokens)

One call for the cross-asset state of the world from the issuing authorities: volatility futures TERM STRUCTURE (contango vs backwardation — the stress regime flag), the composite LEADING INDICATOR by country, official-sector positioning (primary-dealer series + central-bank balance sheet), recent TREASURY AUCTIONS, and physical-trade throughput at the maritime chokepoints. Call it to frame regime before a single-name view. Each block reports its own availability; the leading indicator publishes with a ~2-month reference lag BY CONSTRUCTION — that is not staleness.

### `tengu_v3_origin_ipo_pipeline` (~104 tokens)

What is going public: deals that are priced, upcoming or newly filed, with offer size, share count, exchange and dates. Call it for new-issue supply, going-public timing, or to corroborate a private-company transition signal. This is a SECOND, independent view of going-public activity — corroborate it against the filing index rather than treating either source as complete alone.

Input parameters:

- `limit` (integer)
- `status` (string)

### `tengu_v3_credit_indices` (~134 tokens)

Credit-index composites — the credit market's VIX-equivalents: CDX (NA IG/HY) + iTraxx (Europe/Asia/SovX) daily composite spreads and prices by series/version/tenor, 2018 to T-2. Call it for credit-market risk appetite, spread-widening episodes, or cross-asset stress context. FRESHNESS IS T-2 (daily composite) — never present as realtime.

Input parameters:

- `days` (integer)
- `family` (string)
- `index_ticker` (string)
- `limit` (integer)

### `tengu_v3_credit_cds_history` (~134 tokens)

Daily 5Y single-name CDS spread history: composite par spreads (raw + bps), market-implied default probability, average/implied agency rating. Call it for how default risk has trended (tengu_v3_credit is the one-call snapshot). Coverage 2005 to end-2025, 5Y tenor; tickers match the equity symbol for liquid US names (F, T, GE...).

Input parameters:

- `end` (string)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_credit_ratings` (~124 tokens)

Full S&P rating-action history for one issuer's debt — every licensed institutional action (new rating, upgrade, downgrade, outlook/creditwatch change) with from/to symbols, newest first. Use when asked what a company is rated or when/why it was up/downgraded. Equity ticker is resolved to the issuer CUSIP-6 via the fundamentals security master; actions are instrument-level, so several rows can share a date.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_credit_loans` (~119 tokens)

Syndicated loan book for one borrower: per-facility size, type (revolver/term), maturity, security/seniority, all-in drawn/undrawn spread bps, covenants; include_lenders adds recent-facility syndicate allocations. Private-credit complement to the TRACE bond tape; call for leverage, facility or covenant questions; match on borrower ticker.

Input parameters:

- `include_lenders` (boolean)
- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_factor_characteristics` (~116 tokens)

Latest monthly firm-characteristic vector from the academic firm-characteristic panel (~460 columns incl. the 102 published anomaly characteristics — size, book-to-market, momentum, liquidity, accruals, analyst coverage, plus macro interactions). Call it when you need the full quant feature set for one stock, or a point-in-time vector via as_of. Ticker is resolved to its internal security key automatically.

Input parameters:

- `as_of` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_factor_characteristic_history` (~129 tokens)

Monthly time series of ONE factor characteristic for a stock (e.g. mom_12m, bm, mktcap, realized_vol, sue, turnover), newest first. Call it to chart how an anomaly signal evolved for a name or to compare signal drift across names; a typo in `char` returns 422 with the full list of valid column names.

Input parameters:

- `char` (string)
- `end` (string)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_factor_exposures` (~109 tokens)

Rolling factor betas (Fama-French 5 + momentum) for one stock: beta_mkt/smb/hml/rmw/cma/umd with alpha, idiosyncratic/total volatility and regression R², plus the monthly history of those loadings. Call it to know what factor bets a position actually carries before hedging or sizing it.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_governance` (~126 tokens)

One-call corporate-governance dossier: board size + composition (independent vs executive directors, current members, from board-relationship), director interlocks with other boards, restatement record, auditor-change history, and the latest year's executive compensation (CEO/CFO and top-5 named officers, from executive-compensation). Call it for any management-quality, board-oversight or comp question; blocks degrade independently. For graded forensic red flags use /api/v3/intel/accounting_flags.

Input parameters:

- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_accounting_flags` (~155 tokens)

Forensic accounting red flags with plain-language reasons, from the forensic-audit dataset: fraud/SEC-investigation/adverse restatements, auditor resignations, going-concern or disagreement auditor changes, auditor churn, audit-fee swings >50% yoy, and non-audit-fee dominance (independence risk). Each flag carries severity + reason with the evidence rows attached. Call it before trusting reported financials on any name with earnings-quality doubts (e.g. SMCI returns the 2024 EY-resignation cluster); an empty flags list on a covered name is a genuinely clean record.

Input parameters:

- `limit` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_news_sentiment_history` (~134 tokens)

Daily aggregated news sentiment for one company back to 2000 — mean event sentiment (ESS), event count and mean relevance per day from the news-analytics archive (2000-2025) stitched with the live feed. Call it for long-run sentiment regimes or news reaction around past events; for today's headlines use the /news routes instead.

Input parameters:

- `end` (string)
- `entity` (string)
- `limit` (integer)
- `min_relevance` (number)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_sec13f_history` (~104 tokens)

Institutional-holder history — a holder × quarter matrix of 13F positions (shares per quarter-end + latest value) from the institutional-holdings 13F archive. Call it to track when funds built or exited a stock across quarters; for only the latest snapshot use /intel/sec13f.

Input parameters:

- `quarters` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `top` (integer)

### `tengu_v3_intel_street_estimates_history` (~120 tokens)

Analyst-level estimate revision timeline — every individual broker estimate (announce/revision dates, analyst id, fiscal period, value, realised actual) from the analyst-estimate detail archive back to 1980. Call it to reconstruct how the street walked numbers up or down before a print; for the consensus snapshot use /intel/street_estimates.

Input parameters:

- `days` (integer)
- `limit` (integer)
- `measure` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_street_estimates_guidance` (~107 tokens)

Management guidance history — every company-issued guidance range (measure, period, low/high, announce date, street consensus at that date) from the analyst-estimate Guidance archive. Call it to compare what management promised vs what the street expected, or to study guidance-cut reactions.

Input parameters:

- `limit` (integer)
- `measure` (string)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_prices_history` (~133 tokens)

Survivorship-bias-free daily price history — research-grade daily closes, total returns, volume and cumulative split adjustment factors (cfacpr/cfacshr) 2000-2024, stitched with live market-data daily bars 2025→today, plus the research-grade delisting record. Call it for backtests and long-horizon charts; for intraday or recent-only bars use /api/market/ohlc.

Input parameters:

- `end` (string)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_prices_corporate_actions` (~97 tokens)

Complete corporate-action history — every cash dividend, stock split and distribution (research-grade distcd-coded with divamt, facpr/facshr factors and declare/ex/record/pay dates) back to first listing. Call it to build adjusted price series or dividend-growth analyses.

Input parameters:

- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_short_interest_history` (~126 tokens)

Deep short-selling history — daily off-exchange short-volume series (short vs total shares across FINRA venues + short ratio, back to 2006) plus the official bi-monthly short-interest series from the securities-finance/licensed-research archive. Call it for multi-year squeeze setups or shorting pressure around events; for today's borrow cost use /intel/short_interest.

Input parameters:

- `end` (string)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_workforce_momentum` (~240 tokens)

Monthly EMPLOYMENT MOMENTUM for one company — headcount trend, hiring vs attrition and salary level, from a monthly workforce panel rather than an annual filing. Returns the latest month's headcount with its hiring, attrition and net-hiring rates (percent of headcount per month plus annualized twins), 1m/3m/12m headcount growth, average salary per employee (USD per year) with its coverage, and the full monthly series. Call it to see a company expanding or shrinking MONTHS before the next 10-K, or to catch attrition rising while headcount looks flat. Values are modelled estimates, not company-reported figures. The panel is being backfilled: `coverage` reports the months actually present and any lookback the panel cannot support returns null with a reason — never an interpolated number. Ticker is not unique across venues; the response names the entity served and lists alternates you can pin with employer_id.

Input parameters:

- `employer_id` (integer)
- `months` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_workforce_layoffs` (~228 tokens)

WARN-Act LAYOFF FILINGS for one company — the public notices an employer must file WEEKS BEFORE a cut, so they lead the press release and the next earnings call. Returns each filing (notice date, effective date, employees affected, site city/state, layoff type) newest first, plus TRUE window totals, a month-by-month series and the largest single filing; with_workforce also sizes the total against estimated headcount and names the headcount month used. Call it as a downside early-warning, or to confirm the scale of an announced restructuring — filings are SITE-level, so one restructuring appears as many rows. Coverage is US WARN notices from 1989 forward including forward-dated notices; only employers matched to a listed symbol are reachable by ticker, so an empty result is not proof there were no layoffs.

Input parameters:

- `employer_id` (integer)
- `limit` (integer)
- `months` (integer)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `with_workforce` (boolean)

### `tengu_v3_workforce_layoff_screen` (~172 tokens)

CROSS-SECTIONAL LAYOFF SCREEN — which listed companies filed WARN-Act layoff notices in the last N days, ranked by employees noticed. One row per ticker (company, filing count, employees noticed, first/latest event date, states touched, largest single filing) across the whole listed universe. Call it for 'who is cutting right now' — notices are filed weeks before the cut, so this surfaces restructurings before the press release. Only employers matched to a listed symbol appear; most WARN filers are private and are excluded by design. For one company's filings use /workforce/layoffs/{ticker}.

Input parameters:

- `days` (integer)
- `limit` (integer)
- `min_employees` (integer)
- `state` (string)

### `tengu_v3_workforce_momentum_screen` (~170 tokens)

CROSS-SECTIONAL HIRING SCREEN — rank listed employers by headcount growth between the panel's latest month and N months earlier: ticker, company, headcount then and now, percent and absolute change, latest hiring and attrition rates and average salary, sorted fastest-growing or fastest-shrinking. This is the workforce factor as a screen — who is actually staffing up (or quietly shrinking) months before it reaches a filing. The monthly panel is MID-BACKFILL, so a months_back longer than the loaded window returns an explicit warning listing the lookbacks that ARE available — never a silently shortened comparison.

Input parameters:

- `limit` (integer)
- `min_headcount` (number)
- `months_back` (integer)
- `order` (string)

### `tengu_v3_supply_chain_relationships` (~269 tokens)

The SUPPLY-CHAIN GRAPH around one company — its customers, suppliers, competitors and partners in one call, each with the relationship's start date, whether it is still open, which side reported it, and revenue dependence where it was estimated. Both directions are merged and normalised to the queried company's point of view, so 'customers' includes companies that report THIS company as their supplier. Call it to map second-order exposure (whose earnings move when this name moves) or to find the listed suppliers behind a product cycle. Defaults to CURRENT relationships; status=all or as_of=YYYY-MM-DD gives history. One entry per counterparty by default (several records can back one pair) — group_by=record gives the underlying versions. revenue_percent belongs to the company named in revenue_percent_of_ticker, is an ESTIMATE on every row, and is present on only a minority of edges; coverage is reported per group.

Input parameters:

- `as_of` (string)
- `company_id` (string)
- `group_by` (string)
- `limit` (integer)
- `listed_only` (boolean)
- `rel_type` (string)
- `status` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_supply_chain_revenue_dependence` (~208 tokens)

REVENUE DEPENDENCE, both sides — the revenue-at-risk map around one company. `customer_concentration`: how much of THIS company's revenue each customer accounts for. `dependents_on_company`: other companies whose revenue depends on THIS one (e.g. a component maker that books most of its revenue from one handset vendor) — the list that reprices when this name changes its orders, and it is in no filing screen. Percentages are of the DEPENDENT company's revenue and every row names whose revenue it is, so the number can never be read backwards. Coverage is sparse and disclosed: only a minority of relationships carry an estimated percentage, so absence means UNKNOWN, never zero.

Input parameters:

- `as_of` (string)
- `company_id` (string)
- `limit` (integer)
- `min_percent` (number)
- `status` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_supply_chain_geo_revenue` (~254 tokens)

GEOGRAPHIC REVENUE EXPOSURE for one company — where the revenue actually comes from, estimated region by region and country by country for a fiscal period, with a per-row confidence score. This is the tariff / geopolitical lens: it answers 'how much of this company's revenue is China?' for names that never break that out. Returns the requested hierarchy layer as `regions`, the country leaves as `countries`, concentration metrics (largest country share and an HHI), the period served and the other periods available. ?country=CN,TW returns a per-period HISTORY for exactly those countries. Each layer sums to 100 on its own, so never add a region to a country. Amounts carry NO currency code in the source and the reporting currency can change between periods, so compare on PERCENT, not amount. Estimates, not company-reported segments — for reported segments use /fundamentals/segments/{ticker}.

Input parameters:

- `company_id` (string)
- `country` (string)
- `layer` (integer)
- `period` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).
- `top_countries` (integer)

### `tengu_v3_fundamentals_pit` (~225 tokens)

WHAT THE MARKET ACTUALLY KNEW on a given date — as-FIRST-REPORTED quarterly financials for a ticker as they stood on `as_of`: for each fiscal period, the latest published version whose knowledge date is on or before that day. Later restatements are excluded BY CONSTRUCTION, which is what makes this safe to backtest on — the ordinary financials endpoints serve the restated view and will leak look-ahead. Each period also reports whether it has been restated since and what the figure reads today, so you are never silently handed a stale number. Omit as_of for the current view. Figures are in MILLIONS of each filing's own reporting currency (carried per period) — never assume USD.

Input parameters:

- `as_of` (string)
- `consol` (string)
- `datafmt` (string)
- `indfmt` (string)
- `periods` (integer)
- `popsrc` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_fundamentals_pit_vintages` (~188 tokens)

THE RESTATEMENT TRAIL for one fiscal quarter — every published version of the period in order, each with the day it became the live view, the day it was superseded, and exactly WHICH line items changed from the previous version. Call it to check whether a figure you are relying on has been quietly revised, and by how much: a quarter can be restated several times, and only the trail shows it. The still-current version reports a null supersede date rather than a far-future sentinel. Omit datadate for the most recent quarter held.

Input parameters:

- `consol` (string)
- `datadate` (string)
- `datafmt` (string)
- `indfmt` (string)
- `popsrc` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_fundamentals_pit_coverage` (~112 tokens)

The honest bounds of the point-in-time primitive: how many published versions are held, for how many companies, the span of KNOWLEDGE dates (which is what an as_of query can answer) and the span of fiscal periods covered. Call it before trusting an as_of earlier than the archive starts — outside the knowledge span the answer is 'not knowable here', not 'no data'. Pass a ticker for per-company bounds.

Input parameters:

- `ticker` (string)

### `tengu_v3_intel_insider_flow` (~231 tokens)

INSIDER TRANSACTIONS SPLIT BY WHETHER THE TRADE WAS PRE-SCHEDULED — Form 4/5 activity for one company with the metadata free feeds drop: the Rule 10b5-1 flag and the filing lag. Sales made under a 10b5-1 plan were scheduled in advance and carry NO view, so they are aggregated separately from discretionary trades and never blended into one 'net insider flow'; a third bucket holds rows with no plan flag, which is unknown, not discretionary. Only open-market buys and sells enter the flow buckets — grants, option exercises and tax-withholding are counted apart. Use as_of to reproduce what was PUBLIC on a date: it filters on the filing date, the only correct as-of key for insider data (a trade-date filter leaks late-filed trades).

Input parameters:

- `as_of` (string)
- `end` (string)
- `limit` (integer)
- `record_type` (string)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_insider_form144` (~170 tokens)

INSIDER INTENT-TO-SELL NOTICES — supply before it hits the tape. Form 144 is filed BEFORE a sale of restricted or control stock, so it is forward-looking: who intends to sell, roughly how many shares, through which broker, at what notified market value, and how the stock was acquired. Call it to see overhang building ahead of the completed sales, which only show up later in the Form-4 flow. A notice is an INTENT — it may be executed smaller, later, or not at all, so never treat notified value as realised selling.

Input parameters:

- `end` (string)
- `limit` (integer)
- `start` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_insider_flow_coverage` (~112 tokens)

What insider history exists, for which dates, and how much of it carries a Rule 10b5-1 plan flag — rows by record type, distinct filers, the transaction- and filing-date spans, and the share of rows that actually carry the plan flag. Call it before reading a plan split as complete: rows without the flag are unknown, and this says how many there are. Pass a ticker for per-company coverage.

Input parameters:

- `ticker` (string)

### `tengu_v3_intel_top_shareholders_current` (~197 tokens)

CURRENT INSTITUTIONAL HOLDERS of a company, largest first — holder-level positions with shares, market value (USD), percent of shares outstanding (percent, 0-100) and the change against the prior report, so new, increased, decreased and exited positions are visible. This is the FRESH ownership view; /intel/top_shareholders and /intel/sec13f serve the older archive. The archive is being backfilled, so the response lists every quarter it actually holds with its holder count, defaults to the most COMPLETE quarter and flags any quarter still loading rather than serving a half-loaded snapshot as fact. A 'new_position' can also be a renamed or re-coded holder entity, which the response says explicitly.

Input parameters:

- `limit` (integer)
- `min_pct` (number)
- `quarter` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_v3_intel_top_shareholders_coverage` (~107 tokens)

How much institutional-ownership history has actually landed — per quarter: rows, securities and distinct holders held right now, plus a flag on any quarter still loading. Call it BEFORE treating a quarter-on-quarter change as a real position change: during a backfill a newly-opened quarter is incomplete, and a naive comparison makes every name look like it lost most of its holders. Pass a ticker for per-company coverage.

Input parameters:

- `ticker` (string)

### `tengu_v3_reference_crosswalk` (~435 tokens)

IDENTITY CROSSWALK for one symbol — every identifier the security and its issuer carry, which rung matched, and how confident that match is. Returns SECURITY-grain identifiers (CUSIP9, CUSIP8, ISIN, SEDOL, ticker, estimate-vendor ticker) kept deliberately SEPARATE from the ISSUER-grain keys (gvkey, CUSIP6, regulator filer number, entity id), because those identify a company and not a share line; plus the issuer's other listed securities, the dated timeline of every identifier this security has ever been bound to, and the bridge into the private-company graph with that link's confidence grade. Call it to join two data sets that key on different identifiers, to translate a CUSIP-keyed holdings file into tickers, or to find out what a symbol used to be. as_of=YYYY-MM-DD returns the identifiers that were IN FORCE on that date, not today's — FB resolves today to an ETF and Meta's 2012-02-01→2022-06-08 hold on the string comes back as a dated prior binding, never as the answer. A symbol shared by more than one current security is REFUSED with its candidate list rather than guessed; pass prefer_country to choose. Coverage is a number in every response: what THIS answer contains, and the corpus census (77,313 securities / 58,179 issuers / 969,333 identifier bindings / 26,189 issuers linked to the private graph, live-measured 2026-08-02). Identifier-history depth is uneven by construction — 38,850 of 77,313 securities carry a prior ticker — and every source block states its own as-of, its age in days and whether that age is past its expected refresh cadence.

Input parameters:

- `as_of` (string)
- `include_history` (boolean)
- `include_private_graph` (boolean)
- `include_share_classes` (boolean)
- `prefer_country` (string)
- `symbol` (string, required): Path parameter 'symbol' (required).

### `tengu_v3_reference_lookup` (~364 tokens)

REVERSE IDENTIFIER LOOKUP — give it a CUSIP, ISIN, SEDOL, ticker, estimate-vendor ticker, gvkey, regulator filer number, entity id or private-company-graph id and it returns the security (or, for an ISSUER key, every security under that issuer) plus which rung matched and whether that binding is still current. Exactly one identifier per call. RETIRED identifiers resolve by default — 759,618 of the 969,333 bindings on file are retired, which is precisely why a stale identifier in your own data still lands, and it comes back with the date it was replaced and by what. Issuer keys NEVER nominate one security: an issuer can carry a common line, other share classes and a foreign listing, so all of them are returned and the grain is stated. Use it to turn a CUSIP-keyed custodian file into tickers, to find the ticker behind a regulator filing, or to audit whether an identifier in your own data has gone stale. Rung coverage, measured 2026-08-02: CUSIP9 and CUSIP8 100% of 77,313 securities, ISIN 79.4%, SEDOL 74.2%, regulator filer number 67.8%, estimate-vendor ticker 37.2%.

Input parameters:

- `cik` (string)
- `cusip` (string)
- `entity_id` (string)
- `gvkey` (string)
- `ibtic` (string)
- `include_retired` (boolean)
- `isin` (string)
- `private_company_id` (string)
- `sedol` (string)
- `ticker` (string)

### `tengu_v3_reference_history` (~354 tokens)

IDENTIFIER HISTORY for one symbol — every identifier this security has ever been bound to, with the dates each binding started and ended, plus the dated events where the ISSUER changed its name, ticker or CUSIP. This is the part of a crosswalk a current-state table cannot give you: it answers 'what was this on 2015-06-30', 'when did this CUSIP change' and 'what was this company called then'. Returns the timeline grouped by identifier rung (each entry with valid_from, valid_thru and whether it is still current), the issuer change events with what changed at each one, and — with as_of — the exact set of identifiers in force on that date. Use it to back-map a historical holdings file, to audit identifier drift in your own data, or to explain a ticker that no longer exists. STALENESS, stated rather than implied: the issuer change log is a VINTAGE snapshot that lags the live security master (as-of 2026-04-20 when this shipped, 104 days old, newest change event 2026-01-30). Its age in days and its expected cadence are in every response, and any disagreement between it and the live spine is named explicitly rather than blended into one confident answer. Coverage is a number: 969,333 identifier bindings on file, 759,618 of them retired, 38,850 of 77,313 securities carrying at least one prior ticker.

Input parameters:

- `as_of` (string)
- `include_change_log` (boolean)
- `prefer_country` (string)
- `symbol` (string, required): Path parameter 'symbol' (required).

### `tengu_v3_reference_batch` (~246 tokens)

BATCH CROSSWALK — up to 100 symbols resolved in ONE pass, each returning its current identifiers (CUSIP9, CUSIP8, ISIN, SEDOL, ticker, estimate-vendor ticker), its issuer keys (gvkey, CUSIP6, regulator filer number), which rung matched and its status. This is the endpoint for mapping a whole portfolio or watchlist in a single call rather than N of them. Every symbol comes back with an explicit status — resolved, historical (renamed or delisted; the security and what it trades as now are both returned), ambiguous (shared by more than one current security: the candidates are listed and NO identity is guessed) or unknown (not carried). Symbols beyond the 100 limit come back as explicit over_limit entries, never silently dropped, and the response reports how many of the requested symbols resolved as a number and a percentage (measured 2026-08-02 on a 102-symbol large-cap list: 100 looked up, 99 resolved, 1 historical, 2 over_limit).

Input parameters:

- `prefer_country` (string)
- `symbols` (string, required)

### `tengu_v3_reference_coverage` (~254 tokens)

CROSSWALK COVERAGE — what the reference dataset actually contains, measured live and stated as numbers rather than adjectives: securities and issuers carried and how many are still active, identifier bindings held and how many are RETIRED, the percentage of securities carrying each rung, how many issuers bridge into the private-company graph and how those links break down by confidence grade, and how many dated issuer change events are on file. It also NAMES the rungs this crosswalk deliberately does not serve and why — a missing rung is a stated fact here, not a silent gap a customer discovers after integrating. Every source is listed with its own as-of date, its age in days and whether that age is beyond its expected refresh cadence, so a vintage component can never pass as current. Live-measured 2026-08-02: 77,313 securities (25,512 active), 58,179 issuers, 969,333 identifier bindings (209,715 current / 759,618 retired) across 9 indexed rungs, 26,189 issuers (45.0%) linked to the private graph. Call it before you buy, or before you build against it.

### `tengu_v3_features_catalogue` (~322 tokens)

FEATURE-STORE CATALOGUE — the derived research panels this platform computes for its own models: what exists, how much of it there is, how far back it goes, and how fresh it actually is. Every entry carries MEASURED coverage (rows, symbols, distinct observation dates, history window) and a measured freshness block. freshness.status is `current` when the producer is inside twice its own declared cadence, or `archival` when the producer has stopped but the dataset is a genuine historical panel — an archival dataset is still readable and EVERY read of it says so. A second, independent flag, stale_for_its_own_cadence, fires when the newest observation is old relative to the table's own typical gap: it catches a panel rewritten nightly whose data still ends months ago because the upstream licence lags. Datasets whose producer stopped and which are NOT panels are listed under `withheld` with the measurement that disqualified them and have NO route at all; `excluded` lists live datasets deliberately not sold here, with the reason. Live-measured 2026-08-02: 19 servable datasets totalling 17,062,613 rows — 14 current, 5 archival (spanning 1962, 1970, 2000, 2025-05 and 2026-05 forward) — plus 5 withheld and 2 excluded. Call it first: it is the only place the slugs for /api/v3/features/{dataset} are published.

### `tengu_v3_features_dataset` (~367 tokens)

READ ONE DERIVED FEATURE PANEL — the model-ready research features this platform computes for itself: price/return and liquidity features, monthly fundamentals, analyst-estimate dynamics, options and volatility-surface features, insider and institutional-ownership features, news-sentiment features, betas, regime and macro features. Discover the slugs via /api/v3/features/datasets — they are product names, not table names. With ?ticker= you get that symbol's observations newest first; without it you get the LATEST cross-section (every symbol on the most recent observation date), which is bounded by construction rather than by sorting the whole panel. Symbols resolve through the shared security resolver first and identity.identity_verified states whether the read was keyed on an authoritative identifier or on the resolved security's symbol; an ambiguous symbol is refused, never guessed. Every response carries the dataset's measured coverage (rows_total, symbols_total, observation_dates, history window) and its freshness, so an empty rows array arrives beside the count of symbols that DO have rows and can never be read as a dead upstream — `result` is the machine-readable outcome (rows, no_rows_for_symbol, no_rows_in_window). Five of the 19 servable datasets are `archival`: their producer has stopped, they are served for their history, and every response says so rather than implying currency. An unknown or withheld slug is a 404 and an unreadable store is a 503 — both refunded, because a billed 200 over an empty array is the defect this endpoint exists to remove.

Input parameters:

- `dataset` (string, required): Path parameter 'dataset' (required).
- `limit` (integer)
- `since` (string)
- `ticker` (string)
- `until` (string)

### `tengu_copilot_score_ticker` (~222 tokens)

Full per-ticker quant analysis. CALL THIS when the user asks about any specific stock (e.g. 'should I buy NVDA', 'what do you think of TSLA'). Returns blended_score, decile, conformal expected-return interval (90% band), 12-voter breakdown, factor tier, regime context, suggested position size, and a self-contained narrative. Use the narrative as a quotable summary; use the structured fields for follow-up questions. NAMESPACE: FIRM's universe is US EQUITIES. Nine tickers (BTC ETH LINK LTC COMP ARB NEAR APT ATOM) are ALSO crypto symbols; for those the response carries a `ticker_collision` block stating the score describes the US-listed EQUITY. If the user means the CRYPTO asset pass asset_class=crypto, which 404s (no FIRM crypto model yet). NEVER present an equity score as a crypto view.

Input parameters:

- `asset_class` (string)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_copilot_top_picks` (~96 tokens)

Today's top N picks (long or short side). CALL THIS when the user asks 'what should I buy', 'give me trade ideas', 'top picks today', 'daily briefing', or similar list-of-ideas queries. Each pick comes with the same full quant analysis as score_ticker (score, interval, voter breakdown, narrative).

Input parameters:

- `n` (integer)
- `side` (string)

### `tengu_copilot_universe` (~155 tokens)

The ENTIRE scored universe in one call (limit=0 = all ~13k names), ranked, each with the model's absolute suggested_position_pct AND a relative normalized_weight that sums to ~100% across the returned set. Pass tickers=AAPL,NVDA,… to score+SIZE a specific holdings basket (the per-holding rebalance path); omit it to screen/rank the universe (limit/min_decile/side). Use normalized_weight for rebalance targets.

Input parameters:

- `limit` (integer)
- `max_weight` (number)
- `min_decile` (integer)
- `normalize` (boolean)
- `side` (string)
- `tickers` (string)

### `tengu_copilot_macro_regime` (~63 tokens)

Current macro regime + plain-English interpretation of how strong the model's edge is in this regime. CALL THIS when the user asks about market conditions, regime, 'is it a good time to invest', or how confident the model is right now.

### `tengu_copilot_track_record` (~88 tokens)

Out-of-sample model performance — Sharpe, IC, conformal coverage, factor-decomp alpha. CALL THIS when the user asks 'how do I know this works', 'what's your track record', 'is this real alpha vs factor exposure'. Covers out-of-sample backtest, strict-OOS, conformal-validation and factor-decomposition metrics, refreshed weekly.

### `tengu_copilot_signal_health` (~183 tokens)

CONTRACT C2 — is the alpha signal fit to trade, and do we actually know? CALL THIS BEFORE acting on /top-picks or /score. Returns a closed-vocabulary `status` (healthy | degraded | do_not_trade | unknown), a `tradeable` boolean to branch on, `decile_convention` (10_is_best), the per-horizon live IC, and prose guidance. Fail CLOSED on anything other than `healthy` — treat it as an empty candidate list. `unknown` is a real verdict, not a placeholder: it means no BELIEVABLE current measurement exists, which carries the same instruction as red. The contract checks whether the measurement is trustworthy, not merely recent — a drift job that re-stamps a frozen input publishes today's date over old numbers, and this refuses to grade that as fresh.

### `tengu_copilot_live_ic_drift` (~139 tokens)

Live IC drift status — comparison of realised live IC vs training-time IC. The canonical alpha-decay early warning. CALL THIS when the user asks 'is the model still working?', 'any drift?', 'should we trust today's predictions?'. Returns ic_ratio (live / training) per horizon, drift status (green / yellow / red), and a plain-English narrative. Sub-second; refreshed daily after the close. ic_ratio < 0 = sign flip (halt new positions); ic_ratio < 0.3 = severe (retrain ASAP); ic_ratio > 1.0 = model outperforming training expectation.

### `tengu_copilot_voter_ic_drift` (~163 tokens)

Per-voter IC drift breakdown — pinpoints WHICH of the 12 voters in the ensemble is decaying. The blended-IC drift tool tells you IF the ensemble is decaying; this tells you WHICH voter. CALL THIS when the user asks 'which voter is the problem?', 'why did the model decay?', 'should we re-weight?'. Critically distinguishes 'data_silent' (voter source offline → not the voter's fault) from 'real decay' (voter producing scores that no longer predict). Returns per-voter live IC, causal-marginal-ATE baseline, ic_ratio, drift severity, current weight, and operator-suggested weight delta (capped ±0.05 absolute per cycle).

### `tengu_copilot_ticker_transparency` (~154 tokens)

ML-transparency aggregation for one ticker — collapses 5 individual tools (ml_drivers, ml_prediction, model_calibration, voter_ic_drift, voter_coverage) into a SINGLE call. Use when Brain's verdict needs the model-transparency layer ('why is the model saying this?'). Saves 4 HTTP calls per verdict. Returns a 5-layer payload + `degraded:bool` + `missing_layers:[...]` so partial failures still produce usable output. Cache TTL 60s. Pass `cache_max_age_s=0` to bypass cache.

Input parameters:

- `cache_max_age_s` (number)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_copilot_ticker_smartmoney` (~143 tokens)

Smart-money aggregation for one ticker — collapses 7 individual tools (sec13f_changes, institutional_ownership, insider_trades, options_flow, darkpool, max_pain, gex) into ONE call. Use when Brain's verdict needs positioning context ('who's accumulating?', 'what is the options market saying?'). Saves 6 HTTP calls per verdict. Same `degraded` / `missing_layers` contract as ticker_transparency. Cache TTL 180s — positioning doesn't tick at chat cadence.

Input parameters:

- `cache_max_age_s` (number)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_copilot_ticker_full` (~201 tokens)

OMNIBUS aggregation for one ticker — Brain's primary single-stock verdict path. Pulls BOTH the 5-layer transparency cluster AND the 7-layer smartmoney cluster in ONE call (up to 12 underlying tools in parallel inside FIRM). Replaces Brain's 24-72 HTTP-burst fan-out with a single call. Use for 'should I buy X?' / 'what do you think of Y?' / 'verdict on Z' shapes. `include_smartmoney` and `include_transparency` flags let comparison views skip clusters they don't need. Cache TTL 60s. Pass `cache_max_age_s=0` to bypass cache.

Input parameters:

- `cache_max_age_s` (number)
- `candidate_weight_pct` (number)
- `include_smartmoney` (boolean)
- `include_transparency` (boolean)
- `ticker` (string, required): Path parameter 'ticker' (required).

### `tengu_copilot_decision_review` (~148 tokens)

REVIEW A TRACKED DECISION. Pass the decision_id returned by decision_track. FIRM re-fetches the same verdict shape (ticker_full) and computes a structured DELTA against the original snapshot. Returns thesis_status in {intact, weakening, broken, n/a} based on the score delta projected into the user's side direction. Includes a narrative the chat can render verbatim. Returns 404 if the decision expired (90-day TTL) or was never recorded. Use this for the 'your AAPL position you opened Tuesday is up X% — thesis is tracking' callback shape.

Input parameters:

- `decision_id` (string, required): Path parameter 'decision_id' (required).

### `tengu_v3_copilot_thesis_alerts` (~222 tokens)

EMPTY UNTIL FIRST USE — not broken. Tracked decisions live in Redis and a row is appended ONLY on a state CHANGE, so this populates the FIRST time a tracked decision transitions. Say that to the user rather than reporting an outage. Alerts from the tracked-decision monitor: thesis intact/weakening/broken transitions, earnings-imminent, interval breaches — poll after decision_track. The 2x/day monitor job sweeps every tracked decision and appends a row ONLY on state change (deduped), so every alert here is a NEW transition worth surfacing. alert_type in {status_change, earnings_imminent, interval_breach, stale_decision}; each row carries entry/last price, realised return, score_original → score_current delta, prev_status → thesis_status, severity and a render-ready narrative. Filter with ?ticker= and ?since_hours= (default 72).

Input parameters:

- `limit` (integer)
- `since_hours` (number)
- `ticker` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/hlobo-dev-tengu-firm/firm#diagnostics

## Score history

- 2026-08-21: 61
- 2026-08-20: 61
- 2026-08-19: 60
- 2026-08-18: 60
- 2026-08-17: 59
- 2026-08-16: 59
- 2026-08-15: 58
- 2026-08-14: 58
- 2026-08-13: 57
- 2026-08-12: 57

## Links

- Remote endpoint: https://firm.tengu.co/mcp
- Authorisation metadata: https://firm.tengu.co/.well-known/oauth-protected-resource/mcp
- Repository: https://github.com/Hlobo-dev/tengu-mcp
- Website: https://tengu.co/api
- Changelog RSS feed: https://verifymcp.io/servers/hlobo-dev-tengu-firm/firm.xml
- Changelog JSON feed: https://verifymcp.io/servers/hlobo-dev-tengu-firm/firm.json
- HTML version of this page: https://verifymcp.io/servers/hlobo-dev-tengu-firm/firm
