# Signal8 (npm · @signal8ai/mcp)

SEC filings, dilution, insider & institutional ownership, and political-trade data for AI agents.

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

## Components

- remote · `mcp.signal8.ai`: 81/100, [markdown](https://verifymcp.io/servers/ai-signal8-mcp/mcp.md), [page](https://verifymcp.io/servers/ai-signal8-mcp/mcp)
- npm · `@signal8ai/mcp`: 70/100 (this document), [markdown](https://verifymcp.io/servers/ai-signal8-mcp/signal8ai-mcp.md), [page](https://verifymcp.io/servers/ai-signal8-mcp/signal8ai-mcp)

## Channel facts

- Registry: `npm`
- Package: `@signal8ai/mcp`
- Version: `0.15.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (121 of 123), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (121 of 123), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 16449 tokens (~176/item across 93 items; 92 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add ai-signal8-mcp -- npx -y @signal8ai/mcp
```

### Codex

```bash
codex mcp add ai-signal8-mcp -- npx -y @signal8ai/mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-signal8-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@signal8ai/mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ai-signal8-mcp --command npx --arg -y --arg @signal8ai/mcp
```

### Hermes

```yaml
mcp_servers:
  ai-signal8-mcp:
    command: "npx"
    args: ["-y", "@signal8ai/mcp"]
```

### Other

```json
{
  "mcpServers": {
    "ai-signal8-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@signal8ai/mcp"
      ]
    }
  }
}
```

## 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-03 (score 70, +30)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Stability: unverified → 0.27
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-08-02 (score 40, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-07-31 (score 25, +19)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 6, −74)

- [security regression] Install scripts: pass → unverified
- [security regression] Provenance: fail → unverified
- [security regression] Malware scan: pass → unverified
- [security regression] Known CVEs: partial → unverified
- [functional regression] Dependency health: partial → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] License: pass → unverified
- [functional regression] Maintenance: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] Licence: MIT
- [functional] Package version: 0.13.0 → 0.14.0

### 2026-07-28 (score 80, +29)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Schema quality: unverified → good
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-07-27 (score 51)

First indexed and scored.

## MCP tools (92)

### `search_companies` (~99 tokens)

Search Companies

Search for companies by name or ticker symbol in the Signal8 database. Returns matching companies with their ticker, name, CIK, and exchange. Use this as the first step to find a company before calling other tools.

Input parameters:

- `limit` (number): Maximum results to return (default: 10, max: 50)
- `query` (string, required): Search query - company name or ticker symbol (e.g., "Tesla", "TSLA")

Output parameters:

- `data`

### `get_company_profile` (~115 tokens)

Get Company Profile

Get an enriched company profile by ticker symbol. Returns CIK, exchange, sector, industry, market cap, employee count, description, and other fundamental data. This is a lightweight lookup (1 credit) -- use this when you only need basic company info rather than the full bundle. Always includes halted/haltCode/haltedAt trading-halt status (false/null when trading normally); a halted-but-listed ticker reports delisted:false.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., AAPL, TSLA)

Output parameters:

- `data`

### `get_quote` (~122 tokens)

Get Stock Quote

Get the current stock quote for a company including price, volume, change, market cap, and other real-time market data. Use this when a user asks about a stock's current price or trading activity. Always includes halted/haltCode/haltReason/haltedAt/resumptionAt trading-halt fields (false/null when trading normally); a halted ticker returns the last-known quote instead of an error, or currentPrice:null + halted:true when nothing is recoverable.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_market_metrics` (~63 tokens)

Get Market Metrics

Get computed market metrics for a company including volume averages, volatility, SMAs, and trend direction. Use when analyzing trading patterns or technical indicators beyond the basic quote.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_short_interest` (~65 tokens)

Get Short Interest

Get short interest data for a company including short volume, short ratio, days to cover, and short percent of float. Use when analyzing bearish sentiment or potential short squeeze setups.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_float` (~62 tokens)

Get Float Data

Get float and share structure data for a company including shares outstanding, public float, insider ownership percentage, and institutional ownership. Use when analyzing share supply and ownership concentration.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_float_history` (~219 tokens)

Get Float History

Get the POINT-IN-TIME float history for a company — one sample per trade date (float shares, shares outstanding, and the source the float came from). Use to answer "what was the float on date X" or to see float expand across a dilution event, which the latest-only get_float cannot show. IMPORTANT: this series is FORWARD-ONLY — it began accumulating in mid-2026 and is NOT backfilled, so early/absent history is expected and an empty rows array is a normal result, not an error or a delisted company. Each row carries "source" ("polygon" | "computed" | "sec_10k" | "fmp") because float quality varies by provider — weigh rows accordingly rather than treating all sources as equal. Charged per your API tier.

Input parameters:

- `days` (integer): Lookback window in trade dates. Default 90, clamped to 1-730.
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_historical_prices` (~196 tokens)

Get Historical Stock Prices

Get historical OHLCV price candles for a stock. Supports daily, weekly, and monthly resolutions. Use period shorthand (1M, 3M, 6M, 1Y, 5Y, ALL) or explicit from/to UNIX timestamps. Default is 1 year of daily candles. Use this to compute price returns, chart price history, or analyze volume trends over time.

Input parameters:

- `from` (integer): Start date as UNIX timestamp (overrides period)
- `period` (string): Lookback period shorthand (default: "1Y"). Ignored if from/to are provided.
- `resolution` (string): Candle resolution: "D" (daily, default), "W" (weekly), "M" (monthly)
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")
- `to` (integer): End date as UNIX timestamp (overrides period)

Output parameters:

- `data`

### `get_stock_price_change` (~104 tokens)

Get Stock Price Change

Get percentage price changes for a stock across multiple timeframes: 1D, 5D, 1M, 3M, 6M, YTD, 1Y, 3Y, 5Y, 10Y, and MAX. Use this for quick "how much is it up/down" answers without fetching full candle data.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_financials` (~124 tokens)

Get Financial Statements

Get income statement, balance sheet, and cash flow data for a company. Supports annual, quarterly, and trailing-twelve-month views. Use when analyzing revenue, profitability, debt, or cash position.

Input parameters:

- `limit` (integer): Maximum number of periods to return (1-40). Defaults to 8.
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")
- `type` (string): Financial period type: "annual", "quarter", or "ttm" (trailing twelve months). Defaults to annual.

Output parameters:

- `data`

### `get_earnings` (~88 tokens)

Get Earnings History

Get historical earnings data for a company including EPS actual vs estimate, revenue actual vs estimate, and surprise percentages. Use when analyzing earnings beats/misses or upcoming earnings expectations.

Input parameters:

- `limit` (integer): Maximum number of earnings periods to return (1-40). Defaults to 8.
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_executives` (~58 tokens)

Get Company Executives

Get key executives and officers of a company including name, title, compensation, and tenure. Use when researching company leadership or management quality.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_news` (~111 tokens)

Get Company News

Get recent news articles and press releases for a company. Use when researching recent developments, catalysts, or sentiment drivers. Set pressReleasesOnly to return only official company press releases.

Input parameters:

- `limit` (integer): Maximum number of articles to return (1-20). Defaults to 10.
- `pressReleasesOnly` (boolean): When true, return only official company press releases (exclude third-party news).
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_analyst_consensus` (~70 tokens)

Get Analyst Consensus

Get analyst ratings consensus for a company including average target price, number of analysts, buy/hold/sell breakdown, and consensus recommendation. Use when evaluating Wall Street sentiment or price targets.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_analyst_estimates` (~118 tokens)

Get Analyst Estimates

Get forward analyst estimates for a company including EPS, revenue, EBITDA, and net income (low/high/avg) with analyst counts. Supports annual and quarterly periods. Use when analyzing forward earnings expectations or revenue forecasts.

Input parameters:

- `limit` (integer): Maximum number of estimate periods to return (1-40). Defaults to 8.
- `period` (string): Estimate period: "annual" (default) or "quarter".
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_clinical_trials` (~88 tokens)

Get Clinical Trials

Get clinical trial data for a biotech/pharma company including trial phase, status, conditions, and interventions. Use when analyzing a biotech company's pipeline or upcoming catalyst events.

Input parameters:

- `limit` (integer): Maximum number of clinical trials to return (1-50). Defaults to 10.
- `ticker` (string, required): Stock ticker symbol (e.g., "MRNA", "PFE")

Output parameters:

- `data`

### `search_clinical_trials` (~200 tokens)

Search Clinical Trials

Search clinical trials market-wide (cross-company). Distinct from get_clinical_trials, which is scoped to a single ticker. Filter by phase, indication, sponsor, status, and date window; sort and paginate the results.

Input parameters:

- `dateField` (string): Date field to filter/sort on
- `from` (string): Start date (YYYY-MM-DD)
- `indication` (string): Condition / indication filter
- `limit` (number): Maximum results to return (1-100, default: 50)
- `offset` (number): Offset for pagination (default: 0)
- `order` (string): Sort direction
- `phase` (string): Trial phase filter (e.g., "Phase 3")
- `sort` (string): Sort field
- `sponsor` (string): Sponsor name filter
- `status` (string): Trial status filter
- `to` (string): End date (YYYY-MM-DD)

Output parameters:

- `data`

### `get_top_movers` (~413 tokens)

Get Top Market Movers

Top stock movers — gainers (largest % up), losers (largest % down), or active (highest volume). Optional session window (premarket / regular / afterhours; regular default; not supported for active). Optional date (YYYY-MM-DD) returns a PAST trade date's gainers/losers on a historical daily close-to-close basis (computed from split-adjusted daily bars, NOT intraday) — session is rejected when date is set, date is not supported for direction=active, and a non-trade date (weekend/holiday) returns an empty list (not an error). Penny-stock artifacts are filtered by default — set includePennyStocks to include sub-$1 movers.

Input parameters:

- `date` (string): Optional past trade date (YYYY-MM-DD). When set, returns that day's top gainers/losers computed on a historical daily close-to-close basis from split-adjusted daily bars (NOT intraday, NOT session-sp…
- `direction` (string, required): Mover direction: gainers, losers, or active (volume)
- `includePennyStocks` (boolean): Loosen penny-stock artifact guards. Default false enforces prev_close >= $1 and a $1M dollar-volume floor. Set true to allow sub-$1 movers (prev_close >= $0.10, no dollar-volume floor). The ABS(chang…
- `limit` (integer): Optional max rows (1–100). Backend default applied when omitted.
- `session` (string): Session window: premarket (4:00–9:30 AM ET), regular (RTH close-to-close, default), afterhours (4:00–8:00 PM ET). Live-only — rejected (400) when combined with date.

Output parameters:

- `data`

### `get_market_news` (~156 tokens)

Get Market News (Top Stories)

Get the latest market-wide news across ALL tickers, most recent first. Every item is significance-classified at ingest (critical | major | standard); the default filter of critical,major is the "top stories" view. Use for "what is happening in the market right now" — for news about one company, use get_news with a ticker instead. Requires the /news/latest public endpoint (added 2026-07-29; 404 until that backend deploy).

Input parameters:

- `limit` (integer): Maximum items to return (1-50). Defaults to 10.
- `significance` (string): CSV of levels to include, e.g. "critical,major" (default) or "critical,major,standard".

Output parameters:

- `data`

### `get_market_breadth` (~101 tokens)

Get Market Breadth

Get market breadth aggregates (advance/decline counts and ratio, percent of constituents above their 50DMA and 200DMA, and counts of new 52-week highs/lows) for a chosen universe (sp500, ndx, or all). Use to add market-state context to commentary, tweets, or daily summaries.

Input parameters:

- `universe` (string): Universe to aggregate over: sp500, ndx, or all (default sp500)

Output parameters:

- `data`

### `get_trading_halts` (~116 tokens)

Get Active Trading Halts

List currently-active trading halts across NASDAQ/NYSE/AMEX (from the consolidated Nasdaq Trader halt feed). Each halt includes ticker, market, haltCode (T1/T2/T12/LUDP/H10/...), human-readable reason, haltedAt, and the scheduled resumptionAt when one is set. An EMPTY list is a normal state (no active halts right now), not an error. Halts are tradeable catalysts — use this to discover halted names, then get_quote for the frozen last price.

Output parameters:

- `data`

### `get_earnings_calendar` (~172 tokens)

Get Earnings Calendar

Get upcoming and recent earnings releases between two dates. Optionally restrict to a list of tickers. Returns ticker, date, time (BMO/AMC), EPS estimate, and revenue estimate when available. Supports market cap filtering to focus on large-cap or small-cap earnings only.

Input parameters:

- `from` (string, required): Start date inclusive (YYYY-MM-DD)
- `maxMarketCap` (number): Maximum market cap in USD (e.g., 2000000000 for under $2B)
- `minMarketCap` (number): Minimum market cap in USD (e.g., 10000000000 for $10B+)
- `tickers` (array): Optional ticker filter, e.g. ["AAPL","NVDA"]
- `to` (string, required): End date inclusive (YYYY-MM-DD)

Output parameters:

- `data`

### `get_economic_calendar` (~120 tokens)

Get Economic Calendar

Get scheduled macro/economic events (CPI, FOMC, jobs reports, GDP, etc.) between two dates. Optionally filter to a single country (ISO-3166 alpha-2, e.g. "US"). Defaults to US when omitted.

Input parameters:

- `country` (string): Optional ISO-3166 alpha-2 country code (e.g. "US", "GB", "JP")
- `from` (string, required): Start date inclusive (YYYY-MM-DD)
- `to` (string, required): End date inclusive (YYYY-MM-DD)

Output parameters:

- `data`

### `get_filing_calendar` (~140 tokens)

Get SEC Filing Calendar

Get the forward-looking 10-K / 10-Q SEC filing-deadline calendar within a date window. Optionally restrict to a universe (sp500/ndx/dji/all) and/or a list of form types (default both 10-K and 10-Q).

Input parameters:

- `formTypes` (array): Optional SEC form types subset, e.g. ["10-Q"]
- `from` (string): Start date inclusive (YYYY-MM-DD, default today)
- `to` (string): End date inclusive (YYYY-MM-DD, default today + 45d)
- `universe` (string): Optional index-universe filter (default "all")

Output parameters:

- `data`

### `get_post_earnings_movers` (~154 tokens)

Get Post-Earnings Movers

Get stocks that moved significantly after earnings reports on a given date. Returns pre-computed price changes with earnings surprise data in a single call — no need to chain get_earnings_calendar + get_historical_prices + get_quote per ticker. Includes preEarningsClose, currentPrice, changePct, EPS/revenue actuals vs estimates, and surprise percentages. Filter by minimum absolute % change threshold.

Input parameters:

- `date` (string, required): Earnings date to check (YYYY-MM-DD)
- `limit` (integer): Maximum results to return (default 25, max 100)
- `minChangePct` (number): Minimum absolute % price change to include (default 5). Set to 0 for all.

Output parameters:

- `data`

### `get_recent_material_filings` (~146 tokens)

Get Recent Material Filings

Recent material 8-K filings (last 7 days) for the constituents of an index universe. By default returns the high-signal 8-K item codes (material agreements, M&A, executive changes, restructurings, etc.); pass `items` to filter to specific 8-K item codes. Choose the universe with `universe`.

Input parameters:

- `items` (array): Optional 8-K item codes (e.g. ["1.01","2.01"])
- `limit` (integer): Optional max rows (1–100, default 50)
- `universe` (string): Index universe to scan (sp500, ndx, or dji).

Output parameters:

- `data`

### `screen_sec_filings` (~461 tokens)

Screen SEC Filings

Screen SEC filings across all companies with company-level filters (sector, industry, market cap, exchange) combined with filing-level filters (form type, date range). Returns filings enriched with company metadata: ticker, sector, industry, exchange, market cap, and price. Use this to answer questions like "find all S-1 filings from biotech companies under $500M market cap" or "show me recent 8-K filings from Technology sector companies". This is the most powerful filing DISCOVERY tool for filings — use search_sec_filings only when you already know the specific CIK. This tool returns FILINGS, not a company universe: to enumerate or COUNT companies by market cap / price / float (e.g. "find all companies under $300M market cap"), use screen_companies instead — it supports minMarketCapComputed / maxMarketCapComputed and returns a real total COUNT.

Input parameters:

- `dateFrom` (string): Start date filter (YYYY-MM-DD)
- `dateTo` (string): End date filter (YYYY-MM-DD)
- `exchange` (string): Filter by exchange (e.g., "NASDAQ", "NYSE", "AMEX")
- `formTypes` (string): Comma-separated form types (e.g., "S-1", "10-K,10-Q", "8-K", "S-3,424B5")
- `industry` (string): Filter by industry (e.g., "Biotechnology", "Software - Application", "Oil & Gas E&P")
- `maxMarketCap` (number): Maximum market cap in USD (e.g., 500000000 for $500M)
- `minMarketCap` (number): Minimum market cap in USD (e.g., 1000000000 for $1B)
- `page` (number): Page number (1-indexed, default: 1)
- `pageSize` (number): Results per page (default: 25, max: 100)
- `sector` (string): Filter by sector (e.g., "Healthcare", "Technology", "Financial Services", "Energy")
- `sortBy` (string): Sort results by field (default: filing_date)
- `sortOrder` (string): Sort direction (default: desc)

Output parameters:

- `data`

### `search_sec_filings` (~209 tokens)

Search SEC Filings

Search and list SEC filings with filtering by company (CIK), form type, and date range. Returns paginated results with filing metadata including form type, filing date, company name, and accession number. Use this to find filings before reading their content with get_filing_document or get_filing_exhibits.

Input parameters:

- `ciks` (string): Comma-separated CIK numbers to filter by (e.g., "0000320193,0001018724")
- `dateFrom` (string): Start date filter (YYYY-MM-DD)
- `dateTo` (string): End date filter (YYYY-MM-DD)
- `formTypes` (string): Comma-separated form types (e.g., "10-K,10-Q,8-K,S-1,S-3,424B5")
- `page` (number): Page number (1-indexed, default: 1)
- `pageSize` (number): Results per page (default: 25, max: 100)

Output parameters:

- `data`

### `get_filing_document` (~147 tokens)

Get Filing Document

Get the full raw text/HTML content of an SEC filing by its internal filing ID. Returns the complete filing document which can be very large (10-K filings can be 1MB+). Use the maxLength parameter to truncate content for previews. The response includes company_name, form_type, filing_date, cik, and accession_number alongside the content. Find filing IDs using search_sec_filings first.

Input parameters:

- `filingId` (string, required): Internal filing ID (numeric). Find via search_sec_filings.
- `maxLength` (number): Truncate content to this many characters. Useful for previewing large filings. Response includes a "truncated" boolean when truncation is applied.

Output parameters:

- `data`

### `get_filing_exhibits` (~79 tokens)

Get Filing Exhibits

List all exhibits (individual documents) within an SEC filing. Returns exhibit metadata including exhibit type, description, and content size. Use this to identify which exhibits to read with get_exhibit_content. Excludes XML/XBRL exhibits.

Input parameters:

- `filingId` (string, required): Internal filing ID (numeric). Find via search_sec_filings.

Output parameters:

- `data`

### `get_exhibit_content` (~113 tokens)

Get Exhibit Content

Get the full text/HTML content of a single exhibit from an SEC filing. Returns the exhibit text along with exhibit_type, description, company_name, accession_number, and form_type. Use the maxLength parameter to truncate large exhibits. Find exhibit IDs using get_filing_exhibits first.

Input parameters:

- `id` (string, required): Exhibit ID (numeric). Find via get_filing_exhibits.
- `maxLength` (number): Truncate content to this many characters. Response includes a "truncated" boolean.

Output parameters:

- `data`

### `search_filing_text` (~211 tokens)

Search Filing Text

Full-text substring search across all SEC filing exhibit content. Returns matching snippets with context around each match. Powerful for finding specific clauses like "change of control", "anti-dilution", "right of first refusal", or any specific language across filings. Optionally filter by company (CIK), filing, accession number, or form type.

Input parameters:

- `accessionNumber` (string): Filter to a specific filing by SEC accession number
- `cik` (string): Filter to a specific company by CIK number
- `filingId` (string): Filter to a specific filing by internal ID
- `formType` (string): Filter by form type (e.g., "10-K", "S-1")
- `limit` (number): Max results (default: 20, max: 100)
- `pattern` (string, required): Search pattern (minimum 2 characters). Substring match, case-insensitive.
- `snippetLength` (number): Characters of context around each match (default: 200)

Output parameters:

- `data`

### `lookup_accession_number` (~132 tokens)

Lookup Accession Number

Look up a filing or exhibit by its SEC accession number. Supports both dashed format (e.g., "0001193125-22-010026") and compact 18-digit format. Returns filing metadata including company name, form type, filing date, and exhibit count. If the filing is in the local database, returns full metadata; if only found on SEC EDGAR, returns basic metadata with an isInDatabase: false flag.

Input parameters:

- `accessionNumber` (string, required): SEC accession number in dashed (e.g., "0001193125-22-010026") or compact 18-digit format

Output parameters:

- `data`

### `screen_sec_filings_performance` (~376 tokens)

Screen SEC Filings Performance

Analyze stock price performance after SEC filings. Returns individual filing records with pre-computed price returns at +1 day, +3 days, +7 days, and +30 days after the filing date, plus aggregate statistics (average, median, % negative, best, worst) across all matching filings. Combine company-level filters (sector, industry, market cap, exchange) with filing filters (form type, date range). Use this to answer questions like "how do biotech stocks perform after S-1 filings?" or "what is the average 7-day return after 8-K filings from companies under $500M market cap?".

Input parameters:

- `dateFrom` (string): Start date filter (YYYY-MM-DD)
- `dateTo` (string): End date filter (YYYY-MM-DD)
- `exchange` (string): Filter by exchange (e.g., "NASDAQ", "NYSE", "AMEX")
- `formTypes` (string): Comma-separated form types (e.g., "S-1", "10-K,10-Q", "8-K", "S-3,424B5")
- `industry` (string): Filter by industry (e.g., "Biotechnology", "Software - Application")
- `maxMarketCap` (number): Maximum market cap in USD
- `minMarketCap` (number): Minimum market cap in USD
- `page` (number): Page number (1-indexed, default: 1)
- `pageSize` (number): Results per page (default: 25, max: 100)
- `sector` (string): Filter by sector (e.g., "Healthcare", "Technology", "Financial Services")
- `sortBy` (string): Sort results by field (default: filing_date)
- `sortOrder` (string): Sort direction (default: desc)

Output parameters:

- `data`

### `get_insiders` (~182 tokens)

Get Insider Trading Intelligence

Get insider trading discovery data for a company. Includes cluster buying detection, entity-centric insider model, and Form 4 cross-referencing. Shows insider transactions with buying/selling patterns that may signal upcoming corporate actions. Each insider includes a transactionBreakdown by SEC code (P=Purchase, S=Sale, F=Tax withholding, M=Exercise, G=Gift, A=Award), netSharesSold12m (code S only, excludes tax withholding), and isPrimarilyTaxWithholding flag to distinguish routine RSU vesting from discretionary selling. Supports pagination with limit/offset.

Input parameters:

- `limit` (integer): Maximum results to return (default: 20, max: 100)
- `offset` (integer): Offset for pagination (default: 0)
- `ticker` (string, required): Stock ticker symbol (e.g., AAPL, TSLA)

Output parameters:

- `data`

### `get_ownership` (~158 tokens)

Get Comprehensive Ownership

Get unified ownership breakdown for a company combining Form 4 insider holdings, 13F institutional holdings, and 13D/13G activist positions. All entities are resolved across the three SEC form types into a single view with counterparty resolution. The allHolders array is paginated via limit/offset (default 100). Aggregate stats (institutional/insider/beneficial/retail totals and percentages) are always included in full.

Input parameters:

- `limit` (integer): Maximum holders to return in allHolders (default: 100, max: 100)
- `offset` (integer): Offset for pagination (default: 0)
- `ticker` (string, required): Stock ticker symbol (e.g., AAPL, TSLA)

Output parameters:

- `data`

### `get_institutions` (~112 tokens)

Get Institutional Holders

Get institutional holders (13F filers) for a company. Returns institutions that hold positions in this stock based on SEC 13F filings, including shares held, portfolio weight, and filing dates. Useful for understanding institutional ownership concentration.

Input parameters:

- `limit` (number): Maximum results to return (default: 20, max: 100)
- `offset` (number): Offset for pagination (default: 0)
- `ticker` (string, required): Stock ticker symbol (e.g., AAPL, TSLA)

Output parameters:

- `data`

### `get_institution_detail` (~84 tokens)

Get Institution Detail

Get detailed information about a specific institutional investor by their SEC CIK number. Returns the institution name, total AUM, number of holdings, and filing history. Use get_institutions first to find the CIK for an institution.

Input parameters:

- `cik` (string, required): SEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway)

Output parameters:

- `data`

### `get_institution_holdings` (~101 tokens)

Get Institution Holdings

Get the full portfolio holdings for a specific institution by CIK. Returns all positions from their latest 13F filing with shares, value, and portfolio weight. Supports pagination for institutions with large portfolios.

Input parameters:

- `cik` (string, required): SEC CIK number of the institution
- `limit` (number): Maximum results to return (default: 20, max: 100)
- `offset` (number): Offset for pagination (default: 0)

Output parameters:

- `data`

### `get_institution_position_changes` (~151 tokens)

Get Institution Position Changes

Diff two quarterly 13F snapshots for an institution. Compares the latest filing against the prior quarter and returns per-position changes: new positions, increased, decreased, and exited. Sorted by |changePercent| descending so the biggest moves surface first. Much more efficient than calling get_institution_holdings twice and diffing client-side — the server computes everything in a single SQL query.

Input parameters:

- `cik` (string, required): SEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway)
- `limit` (integer): Maximum results to return (default: 50, max: 100)
- `offset` (integer): Offset for pagination (default: 0)

Output parameters:

- `data`

### `get_institution_activity` (~72 tokens)

Get Institution Activity

Get an institution's position changes over recent 13F periods by CIK. Reads the number of trailing periods to include.

Input parameters:

- `cik` (string, required): SEC CIK number of the institution
- `periods` (number): Number of trailing quarters to include (default: 4, max: 12)

Output parameters:

- `data`

### `get_institution_filings` (~79 tokens)

Get Institution Filings

Get the list of 13F filings for an institution by CIK, with pagination.

Input parameters:

- `cik` (string, required): SEC CIK number of the institution
- `limit` (number): Maximum results to return (default: 20, max: 50)
- `offset` (number): Offset for pagination (default: 0)

Output parameters:

- `data`

### `get_institution_derivatives` (~121 tokens)

Get Institution Derivatives

Get an institution's reported PUT/CALL derivative positions by CIK (13F options), with pagination and sorting.

Input parameters:

- `cik` (string, required): SEC CIK number of the institution
- `limit` (number): Maximum results to return (default: 20)
- `offset` (number): Offset for pagination (default: 0)
- `period` (string): Filing period to filter (e.g., "2025-Q1")
- `sortBy` (string): Column to sort by
- `sortOrder` (string): Sort direction

Output parameters:

- `data`

### `get_institution_portfolio_analytics` (~43 tokens)

Get Institution Portfolio Analytics

Get sector allocation and top holdings analytics for an institution's portfolio by CIK.

Input parameters:

- `cik` (string, required): SEC CIK number of the institution

Output parameters:

- `data`

### `get_institutions_leaderboards` (~95 tokens)

Get Institution Leaderboards

Two market-wide institution leaderboards in one call: topByAum (largest holders by assets under management, name-deduped) and mostActive (highest 13F position-change volume). No CIK required. For the full paginated AUM list use get_institution_top_aum.

Input parameters:

- `limit` (number): Maximum results per section (default: 10, max: 50)

Output parameters:

- `data`

### `get_insider_transactions` (~239 tokens)

Get Insider Transactions

Get detailed insider transaction history for a company from Form 4 filings. Returns individual buy/sell transactions with insider name, title, shares, price, and transaction codes. Supports pagination for companies with extensive insider activity. Filter by year/month to narrow results, or use transactionCode to find only purchases (P), sales (S), etc. Useful for identifying "first insider buy since X" patterns.

Input parameters:

- `limit` (number): Maximum results to return (default: 20, max: 100)
- `month` (integer): Filter by transaction month (1-12, requires year)
- `offset` (number): Offset for pagination (default: 0)
- `ticker` (string, required): Stock ticker symbol (e.g., AAPL, TSLA)
- `transactionCode` (string): Filter by SEC transaction code: P=Purchase, S=Sale, A=Grant/Award, M=Exercise/Conversion, F=Tax withholding, G=Gift, C=Conversion, W=Will, D=Disposition to issuer, etc.
- `year` (integer): Filter by transaction year (e.g., 2025)

Output parameters:

- `data`

### `get_insider_cluster_buys` (~73 tokens)

Get Insider Cluster Buys

Detect cluster buying patterns for a company. Identifies periods where 3+ distinct insiders purchased shares within a 14-day window -- a strong bullish signal that often precedes positive corporate announcements or price appreciation.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., AAPL, TSLA)

Output parameters:

- `data`

### `get_institution_top_aum` (~142 tokens)

Get Top Institutions by AUM

Discover top institutional holders across the entire company universe ranked by assets under management (AUM). Unlike get_ownership which shows institutions for a single company, this tool searches across all companies to find the largest institutional players. Optionally set a minimum AUM. Useful for identifying smart money flows and major institutional positioning trends.

Input parameters:

- `limit` (number): Maximum results to return (default: 25, max: 100)
- `minAum` (number): Minimum AUM in USD to filter institutions (e.g., 1000000000 for $1B+)
- `offset` (number): Offset for pagination (default: 0)

Output parameters:

- `data`

### `search_institutions` (~144 tokens)

Search Institutions by Name

Search institutional investors (13F filers) by name. Returns matching institutions with CIK, name, AUM, holdings count, and latest filing period. Use this to find a specific fund or investment manager when you know part of their name (e.g., "Vanguard", "BlackRock", "Citadel"). Results are ranked by AUM descending.

Input parameters:

- `limit` (number): Maximum results to return (default: 25, max: 100)
- `offset` (number): Offset for pagination (default: 0)
- `q` (string, required): Search term (min 2 characters, e.g., "Vanguard", "BlackRock")

Output parameters:

- `data`

### `get_insider_cross_company` (~241 tokens)

Get Cross-Company Insider Trading

Discover insider trading patterns across multiple companies. Unlike get_insiders which shows insider activity for a single ticker, this tool searches the entire universe to find insiders active across multiple companies, cluster buying patterns, and large transactions. Filter by insider name, transaction type, or date range. Useful for detecting coordinated insider activity, cross-company insider networks, and market-wide buying/selling trends.

Input parameters:

- `endDate` (string): End date for transaction range in ISO format (e.g., "2025-12-31")
- `insiderName` (string): Filter by insider name (partial match, e.g., "Musk" or "Cohen")
- `limit` (number): Maximum results to return (default: 10, max: 100)
- `offset` (number): Offset for pagination (default: 0)
- `startDate` (string): Start date for transaction range in ISO format (e.g., "2025-01-01")
- `transactionType` (string): Filter by transaction type: "P" (purchase), "S" (sale), "A" (grant/award), "M" (conversion)

Output parameters:

- `data`

### `get_compliance` (~83 tokens)

Get Compliance Evaluation

Get full compliance rules evaluation for a company. Runs Nasdaq/NYSE deficiency detection, bid price tracking, and delinquent filing detection. Returns a comprehensive compliance picture combining SEC filing data, market data, and exchange rules. This is the most thorough compliance check available (25 credits).

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., AAPL, TSLA)

Output parameters:

- `data`

### `screen_companies` (~499 tokens)

Screen Companies

Screen companies by price range, volume, cash runway, float, shares outstanding, market cap, industry, listing exchange (NASDAQ/NYSE/AMEX), and float data source. Sort results by any sortable column. Returns matching companies with key metrics and pagination. Each row carries live trading-halt status (halted/haltCode/haltedAt; false/null when trading normally); pass excludeHalted=true to drop currently-halted tickers from the results.

Input parameters:

- `country` (string): Company universe by issuer domicile: "US" (default), "CA" (Canadian companies via their US-OTC/US cross-listings), or "all"
- `exchange` (string): Filter by listing exchange (exact match): NASDAQ, NYSE, or AMEX
- `excludeHalted` (boolean): When true, exclude tickers with a currently-active trading halt (regulatory or volatility) from the results. Default false — halted rows are included and carry halted/haltCode/haltedAt fields.
- `floatSource` (string): Filter by float data source
- `industry` (string): Filter by company industry (exact match, e.g. "Biotechnology", "Software")
- `limit` (number): Maximum results per page (default: 25, max: 100)
- `maxCashRunway` (number): Maximum estimated months of cash remaining
- `maxFloat` (number): Maximum computed public float (shares)
- `maxMarketCapComputed` (number): Maximum market cap in USD (price * shares outstanding)
- `maxPrice` (number): Maximum latest price in USD
- `maxSharesOutstanding` (number): Maximum shares outstanding from SEC EDGAR
- `maxVolume` (number): Maximum daily trading volume
- `minCashRunway` (number): Minimum estimated months of cash remaining
- `minFloat` (number): Minimum computed public float (shares)
- `minMarketCapComputed` (number): Minimum market cap in USD (price * shares outstanding)
- `minPrice` (number): Minimum latest price in USD
- `minSharesOutstanding` (number): Minimum shares outstanding from SEC EDGAR
- `minVolume` (number): Minimum daily trading volume
- `offset` (number): Offset for pagination (default: 0)
- `sortBy` (string): Column to sort results by (default: volume)
- `sortOrder` (string): Sort direction (default: desc)

Output parameters:

- `data`

### `get_premarket_scan_history` (~1566 tokens)

Get Premarket Scan History

Historical MARKET-WIDE premarket scan for a single PAST trade date. For the requested ET date, returns every ticker with that day's premarket (default) session volume and its relative volume (RVOL) vs the trailing 90-day same-session baseline — the SAME RVOL math as get_rvol_history, but across the whole market for one date instead of one ticker across many dates. Filter by RVOL, market cap, price, and float to backtest screens like "sub-$500M tickers with premarket RVOL > 5 on 2026-07-20" in one call. Rows are ranked by RVOL descending. A future or non-trading date returns an empty list with an explanatory reason (not an error). Every row also reports "baselineState" (why its RVOL is or is not null), "advRatio" (volume ÷ trailing 30-session average FULL-DAY volume) and "advDays"; set includeNoHistory=true to surface high-volume tickers that have no computable RVOL at all, such as first-session new listings. Each row ALSO publishes the RVOL denominator itself as "baselineVolume" (shares) plus a "baselineThin" flag (true when that denominator is under 200 shares): a 90x RVOL off a 1-share baseline is arithmetically correct and analytically worthless. That is almost entirely an asOfTime-basis effect (0.1% of full-session rows vs ~38% at the 04:30 cutoff, falling to ~9% by 09:15) and it skews to LIQUID LARGE CAPS that simply do not trade early, NOT to microcaps. Screen it out with minBaselineVolume and/or minSessionVolume. The response "meta" also reports asOfApplied / asOfIgnored / asOfIgnoredReason, so a time-of-day request that could not be honoured is visible instead of quietly returning full-session numbers. Charged per your API tier.

Input parameters:

- `asOfTime` (string): Optional TRUE time-of-day premarket basis. Any HH:MM ET premarket time; snapped to the nearest 15-minute grid cutoff (04:00–09:15, ties resolve to the earlier cutoff). When set, RVOL is cumulative pr…
- `baselineDays` (integer): Rolling RVOL baseline window, in trading rows (same-session days). Default 90; values outside 20-250 are clamped. This is the DENOMINATOR window: every RVOL in the response is that period's volume di…
- `date` (string, required): REQUIRED past ET trade date to scan (YYYY-MM-DD). Future/non-trade dates return an empty list.
- `includeNoHistory` (boolean): Also return the cohort minRvol structurally hides: tickers with NO computable RVOL. Two kinds, told apart by each row's "baselineState" — "no-history" (a new listing with no prior trading history at…
- `limit` (integer): Max rows to return (1–200, default 50). Rows are ranked by RVOL desc.
- `maxFloat` (number): Maximum public float (shares).
- `maxMarketCap` (number): Maximum market cap in USD (e.g. 500000000 for sub-$500M).
- `maxPrice` (number): Maximum latest price in USD.
- `minBaselineVolume` (number): Minimum RVOL DENOMINATOR in shares. Drops rows whose "baselineVolume" is below it, plus every row that has no baseline at all. This is the direct fix for a huge RVOL computed against a near-zero base…
- `minFloat` (number): Minimum public float (shares).
- `minMarketCap` (number): Minimum market cap in USD (market_cap_computed = price × shares outstanding).
- `minPrice` (number): Minimum latest price in USD.
- `minRvol` (number): Minimum RVOL (day session volume ÷ trailing 90-day baseline). Drops rows whose baseline is not yet warm.
- `minSessionVolume` (number): Minimum RVOL NUMERATOR in shares — the scanned session's own volume. Answers "did enough actually trade to be worth acting on?", where minBaselineVolume answers "is the comparison meaningful at all?"…
- `offset` (integer): Pagination offset (default 0).
- `session` (string): Session bucket to scan (default premarket). "all" = full extended day.

Output parameters:

- `data`

### `get_split_history` (~77 tokens)

Get Stock Split History

Get stock split history for a company including forward and reverse splits with dates, ratios, type classification, and cumulative 2-year reverse split ratio. Relevant for NASDAQ/NYSE minimum bid-price compliance (1:250 cumulative reverse-split cap).

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., AAPL, TSLA)

Output parameters:

- `data`

### `get_etf_bundle` (~158 tokens)

Get ETF Bundle

Get aggregated ETF data in a single call. Combines multiple data sources (profile, holdings, sector weightings, country exposure, performance, news, analyst coverage, and comparables) into one response. Each data type is cached independently. Specify which types to include or omit to get above-the-fold defaults (profile, stock-summary, holdings, sectors).

Input parameters:

- `include` (string): Comma-separated list of data types to include. Available: profile,holdings,sectors,countries,stock-summary,performance,news,analyst,comparables. Default (when omitted): profile,stock-summary,holdings…
- `ticker` (string, required): ETF ticker symbol (e.g., SPY, QQQ, IWM)

Output parameters:

- `data`

### `get_politicians` (~196 tokens)

Get Politicians

List and search congressional politicians who have STOCK Act trading disclosures. Filter by party (D/R/I), state, or search by name. Returns paginated results with trade counts, last trade date, and net buy/sell direction over the trailing 12 months.

Input parameters:

- `limit` (number): Maximum results to return (default: 10, max: 100)
- `offset` (number): Pagination offset (default: 0)
- `party` (string): Filter by party: 'D' (Democrat), 'R' (Republican), 'I' (Independent)
- `search` (string): Search by politician name (partial match)
- `sortBy` (string): Sort field (default: 'last_trade')
- `sortOrder` (string): Sort direction (default: 'desc')
- `state` (string): Filter by US state (2-letter code, e.g. "CA", "TX")

Output parameters:

- `data`

### `get_politician_detail` (~97 tokens)

Get Politician Detail

Get the full profile for a politician including party, state, chamber, trade statistics, filing delay metrics, most traded sector, and their 10 most recent transactions. Use get_politicians first to find the slug (e.g. "sen-nancy-pelosi").

Input parameters:

- `slug` (string, required): Politician URL slug (e.g., "sen-nancy-pelosi", "sen-tommy-tuberville")

Output parameters:

- `data`

### `get_politician_transactions` (~160 tokens)

Get Politician Transactions

Get paginated trade history for a specific politician. Returns individual STOCK Act disclosures with ticker, transaction type, amount range, filing delay, and late filing flag. Includes a summary with total buys/sells and net value.

Input parameters:

- `limit` (number): Maximum results to return (default: 50, max: 100)
- `offset` (number): Pagination offset (default: 0)
- `slug` (string, required): Politician URL slug (e.g., "sen-nancy-pelosi")
- `sortBy` (string): Sort field (default: 'date')
- `sortOrder` (string): Sort direction (default: 'desc')
- `type` (string): Filter by transaction type: 'Purchase' or 'Sale'

Output parameters:

- `data`

### `get_politician_activity` (~90 tokens)

Get Politician Activity

Get activity metrics for a politician broken down by period (30d, 90d, 1y, all-time). Includes buy/sell counts and values per period, most traded tickers (top 10), and transaction type breakdown. Useful for analyzing trading patterns over time.

Input parameters:

- `slug` (string, required): Politician URL slug (e.g., "sen-nancy-pelosi")

Output parameters:

- `data`

### `get_politicians_most_active` (~96 tokens)

Get Most Active Politicians

Discover the most active congressional traders ranked by trade count within a lookback period. Returns each politician with trade count, tickers traded, buy/sell values, and top tickers. Useful for identifying the most prolific political traders.

Input parameters:

- `limit` (number): Maximum results to return (default: 10, max: 50)
- `period` (string): Lookback period (default: '90d')

Output parameters:

- `data`

### `get_politician_recent_trades` (~135 tokens)

Get Recent Politician Trades

Get recent STOCK Act trades across all politicians. Each trade includes the senator info, ticker, transaction type, amount, and filing delay. Filter by direction (buy/sell) and lookback period. Useful for monitoring current congressional trading activity.

Input parameters:

- `days` (number): Lookback period in days (default: 30, max: 365)
- `direction` (string): Filter by direction: 'buy' or 'sell'
- `limit` (number): Maximum results to return (default: 50, max: 100)
- `offset` (number): Pagination offset (default: 0)

Output parameters:

- `data`

### `get_politician_late_filers` (~112 tokens)

Get Politician Late Filers

Get STOCK Act late filing violations -- trades where the disclosure was filed more than 45 days after the transaction (a legal violation). Sorted by filing delay descending. Useful for identifying politicians with poor disclosure compliance.

Input parameters:

- `days` (number): Lookback period in days (default: 180, max: 730)
- `limit` (number): Maximum results to return (default: 10, max: 50)
- `offset` (number): Pagination offset (default: 0)

Output parameters:

- `data`

### `get_politician_committees` (~107 tokens)

Get Politician Committees

Get committee assignments for a politician including committee name, chamber, role (Chair, Ranking Member, etc.), and subcommittee memberships. Use to correlate trading activity with committee oversight areas. Requires a politician slug (e.g. "sen-nancy-pelosi") -- use get_politicians first to find the slug.

Input parameters:

- `slug` (string, required): Politician URL slug (e.g., "sen-nancy-pelosi", "rep-nancy-pelosi")

Output parameters:

- `data`

### `get_politician_votes` (~118 tokens)

Get Politician Votes

Get voting records for a politician by slug. Returns congressional votes with bill info, position (Yea/Nay/Not Voting), and result. Useful for assessing alignment between a politician's votes and their trading positions. Requires Bioguide ID resolution.

Input parameters:

- `limit` (number): Maximum results to return (default: 10, max: 100)
- `offset` (number): Pagination offset (default: 0)
- `slug` (string, required): Politician URL slug (e.g., "sen-nancy-pelosi")

Output parameters:

- `data`

### `get_politician_pnl` (~247 tokens)

Get Politician P&L

Get estimated realized + unrealized profit & loss for a politician. Methodology: each disclosed trade amount range is converted to an estimated share count using the stock's historical market price on the transaction date, then FIFO-matched on SHARES (realized = (sellPrice − buyPrice) × matched shares); open positions are marked to the current price for unrealized P&L. Works for Congress (sen-/rep-) AND executive branch (exec-) officials. Response includes a `totals` object (estimatedRealizedPnl, estimatedUnrealizedPnl, winRate, realizedTrades, tickersTraded) and a `byTicker[]` breakdown (estimatedShares, avgCostBasis, currentPrice, realizedPnl, unrealizedPnl, unrealizedPnlPercent) — byTicker open positions double as the estimated holdings. All figures are ESTIMATES (±25-40% from disclosure bracket width). Use get_politicians first to find the slug.

Input parameters:

- `slug` (string, required): Politician URL slug — congressional ("sen-nancy-pelosi", "rep-...") or executive ("exec-trump-donald-j")

Output parameters:

- `data`

### `get_politicians_pnl_leaderboard` (~145 tokens)

Get Politicians P&L Leaderboard

Rank politicians (Congress + executive branch) by estimated trading P&L across the universe. Sort by total P&L, win rate, or traded volume. P&L uses price-adjusted share estimation: disclosed amount ranges → estimated shares via historical price → FIFO on shares → open positions marked to current price. Figures are ESTIMATES (±25-40% from disclosure bracket width).

Input parameters:

- `limit` (number): Maximum results to return (default: 25, max: 100)
- `offset` (number): Pagination offset (default: 0)
- `sortBy` (string): Sort field (default: 'pnl')

Output parameters:

- `data`

### `get_politician_roles` (~60 tokens)

Get Politician Roles

Get committee leadership roles (Chair, Ranking Member, etc.) for a politician. Use get_politicians first to find the slug.

Input parameters:

- `slug` (string, required): Politician URL slug (e.g., "sen-nancy-pelosi")

Output parameters:

- `data`

### `get_recent_congressional_votes` (~84 tokens)

Get Recent Congressional Votes

Get recent congressional roll-call votes across all members, sourced from GovTrack (both chambers as available — currently Senate-heavy). Each vote includes member, bill info, position, and result.

Input parameters:

- `limit` (number): Maximum results to return (default: 50, max: 100)
- `offset` (number): Pagination offset (default: 0)

Output parameters:

- `data`

### `get_recently_sponsored_bills` (~140 tokens)

Get Recently Sponsored Bills (Cross-Politician)

Get the most recently introduced bills across all congressional sponsors. Each bill includes the sponsor block (bioguideId, fullName, party, state, politicianSlug) so persona agents can link directly to the sponsor detail page. politicianSlug is null when the sponsor is no longer in the active roster (typically ex-members). Requires CONGRESS_API_KEY on the backend.

Input parameters:

- `congress` (number): Congress number to filter (default: 119 for current session)
- `limit` (number): Maximum bills to return (default: 10, max: 50)
- `offset` (number): Pagination offset (default: 0)

Output parameters:

- `data`

### `get_political_sector_rotation` (~170 tokens)

Get Political Sector Rotation

Which market SECTORS politicians have been trading in over a trailing window. Aggregates congressional + executive trades by sector and returns, per sector: trade count, total dollar volume, number of distinct politicians, and the top tickers. Use it to see where political trading activity is concentrating (e.g. "politicians piled into Energy this month"). Sort by count or dollar volume.

Input parameters:

- `chamber` (string): Optional chamber filter (default: all chambers merged)
- `limit` (number): Top-N sectors to return (default: 15, max: 30)
- `sortBy` (string): Rank sectors by trade count or summed dollar volume (default: count)
- `windowDays` (number): Lookback window in days (default: 30, max: 90)

Output parameters:

- `data`

### `get_senate_trades_by_ticker` (~103 tokens)

Get Senate Trades by Ticker

Reverse lookup — find which politicians recently traded a given TICKER. Returns recent STOCK Act disclosures for that symbol with politician info, transaction type, and amount.

Input parameters:

- `limit` (number): Maximum results to return (default: 50, max: 100)
- `offset` (number): Pagination offset (default: 0)
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "NVDA")

Output parameters:

- `data`

### `get_cash_position` (~112 tokens)

Get AI Cash Position

Get the Signal8 AI cash position model for a company. Returns the cash anchor (from latest 10-K/10-Q), prorated burn rate, post-anchor capital raises, material cash events, and three runway scenarios (closed, pending, announced). Use when analyzing a company's current cash situation, runway, or capital raise activity. Returns 404 when no cash-position model is available for the requested ticker.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_cash_history` (~100 tokens)

Get 10-Year Cash History

Get up to 10 years of quarterly cash position history from SEC XBRL filings (data.sec.gov company-facts). Returns an array of {periodEnd, usd, formType, isAnnual} sorted chronologically. Deduped by period with annual filings preferred over quarterly. Not feature-gated — works for any company with SEC filings.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `screen_must_raise` (~149 tokens)

Screen Companies That Must Raise Capital

Find companies with imminent capital raise needs based on estimated cash runway. Defaults to companies with less than 6 months of cash remaining, sorted by urgency (lowest runway first). Useful for identifying distressed companies, imminent dilution situations, or potential financing catalysts. Runway is estimated from current burn rate.

Input parameters:

- `industry` (string): Filter by company industry (exact match, e.g. "Biotechnology", "Software")
- `limit` (number): Maximum results to return (default: 25, max: 100)
- `maxMonths` (number): Maximum months of cash runway to filter by (default: 6)
- `offset` (number): Offset for pagination (default: 0)

Output parameters:

- `data`

### `get_cash_runway_calendar` (~173 tokens)

Get Cash Runway Depletion Calendar

Find companies projected to run out of cash within a date window. Similar to lockup expiration calendars but for cash depletion events. Returns companies sorted by urgency (lowest runway first). Runway is an estimate based on current burn rate — actual depletion depends on future capital raises and operational changes. Default window is today to 90 days out.

Input parameters:

- `from` (string): Start date (YYYY-MM-DD, default: today)
- `industry` (string): Filter by company industry (exact match, e.g. "Biotechnology")
- `limit` (number): Maximum results to return (default: 25, max: 100)
- `offset` (number): Offset for pagination (default: 0)
- `to` (string): End date (YYYY-MM-DD, default: today + 90 days)

Output parameters:

- `data`

### `get_intraday_bars` (~205 tokens)

Get Intraday Price Bars

Get intraday OHLCV candles at 1, 5, 15, 30, or 60-minute resolution. Use for intraday price action analysis, volume patterns, and short-term technical analysis. Returns open, high, low, close, and volume for each bar. Set extended=true (1-minute resolution only) to include premarket (04:00–09:30 ET) and after-hours (16:00–20:00 ET) bars.

Input parameters:

- `extended` (boolean): Include extended-hours bars (premarket 04:00–09:30 ET and after-hours 16:00–20:00 ET). Only supported with resolution "1".
- `from` (integer, required): Start time as UNIX timestamp
- `resolution` (string, required): Bar resolution in minutes
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")
- `to` (integer, required): End time as UNIX timestamp

Output parameters:

- `data`

### `get_volume_profile` (~113 tokens)

Get Volume Profile

Get volume distribution across price levels for a single trading day. Returns price buckets with volume, Point of Control (highest volume level), and Value Area (price range containing 70% of volume). Use for identifying support/resistance and high-volume price nodes.

Input parameters:

- `bucketSize` (number): Price bucket width in dollars (default $1.00)
- `date` (string, required): Trading day (YYYY-MM-DD)
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_accumulation_snapshot` (~88 tokens)

Get Accumulation Snapshot

Get intraday accumulation/distribution metrics for the current or most recent trading session. Returns session VWAP, volume above/below VWAP, estimated buy vs sell volume (tick rule), volume by time period (morning/midday/afternoon), and comparison to average volume. Use for assessing real-time buying/selling pressure.

Input parameters:

- `ticker` (string, required): Stock ticker symbol

Output parameters:

- `data`

### `get_insider_positions` (~139 tokens)

Get Insider Positions

Get current open insider positions for a CIK (either an insider or an issuer). If an issuer (company) CIK is supplied, returns all insiders' positions for that company. If an insider (reporting-person) CIK is supplied, returns that insider's open positions across all issuers they have filed Form 4 for. The response includes a `lookupMode` field (`"issuer"` or `"insider"`) indicating which interpretation matched. Derived from Form 4 filings.

Input parameters:

- `cik` (string, required): SEC CIK number of the insider OR the issuer (company). Tried as issuer first, then falls back to insider.

Output parameters:

- `data`

### `get_insider_positions_by_ticker` (~66 tokens)

Get Insider Positions by Ticker

Get per-insider lifetime position aggregates for a given ticker — which insiders hold positions in the stock and their aggregate cost/value. Derived from Form 4 filings.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_analyst_grades` (~83 tokens)

Get Analyst Grades

Get recent analyst grade actions (upgrades, downgrades, initiations) for a ticker, including the grading firm and previous/new grade.

Input parameters:

- `limit` (number): Maximum results to return (default: 10, max: 50)
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_price_target` (~122 tokens)

Get Price Target

Get analyst price target data for a ticker. By default returns the consensus / split-adjusted average price target. Set list=true to return the full per-analyst list of individual price targets instead.

Input parameters:

- `limit` (number): Maximum results when list=true (default: 50, max: 100). Ignored for consensus.
- `list` (boolean): false/omitted = consensus price target; true = per-analyst price-target list
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_analyst_coverage` (~55 tokens)

Get Analyst Coverage

Get aggregated analyst coverage for a ticker — consolidated view of grades, targets, and coverage breadth across covering firms.

Input parameters:

- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_politician_donors` (~268 tokens)

Get Politician Donors

Get the paginated list of campaign donors (individuals and PACs) for a single politician across one election cycle. Returns donor name, amount, type, employer/occupation (individuals), and committee details (PACs). Use this when a user asks "who donated to <politician>" or wants the full donor list. For a quick top-10 + cycle totals overview, use get_politician_donor_summary instead.

Input parameters:

- `cycle` (string): Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
- `limit` (number): Maximum results to return (default: 50, max: 100)
- `minAmount` (number): Minimum contribution amount in USD (filters out small donors)
- `offset` (number): Pagination offset (default: 0)
- `slug` (string, required): Politician URL slug (e.g., "sen-nancy-pelosi")
- `sortBy` (string): Sort field: 'amount' (default), 'date', or 'name'
- `sortOrder` (string): Sort direction (default: 'desc')
- `type` (string): Filter by donor type: 'individual', 'pac', or 'all' (default: 'all')

Output parameters:

- `data`

### `get_politician_donor_summary` (~148 tokens)

Get Politician Donor Summary

Get a bundled donor summary for a single politician: cycle totals (raised, spent, cash-on-hand, debts), donor count, top 10 individual donors, and top 10 PAC donors — all in one response. This is the right tool for "who funds <politician>" or "biggest donors to <politician>" style questions. For the full paginated list, use get_politician_donors.

Input parameters:

- `cycle` (string): Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
- `slug` (string, required): Politician URL slug (e.g., "sen-nancy-pelosi")

Output parameters:

- `data`

### `get_donor_aggregates` (~159 tokens)

Get Donor Aggregates

Get market-wide campaign-finance rollups across ALL tracked politicians for a cycle: total raised, top 10 individual donors, top 10 PACs, party/chamber/cycle splits, and a most-funded politician leaderboard. Use for "who are the biggest donors in 2024?" or "which party raised more?" type questions. For a single politician, use get_politician_donor_summary.

Input parameters:

- `chamber` (string): Filter by chamber: 'senate' or 'house'
- `cycle` (string): Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
- `party` (string): Filter by party: 'D', 'R', or 'I'

Output parameters:

- `data`

### `get_policy_events` (~298 tokens)

Get Policy Events

List mirrored executive orders (policy events) from the Federal Register feed. Filter by signing-date range, affected sector, or free-text title query. Each event includes its Federal Register document number (externalId), title, signing date (eventDate), normalized affected sectors, full-text URL, and flaggedTradeCount — the number of official trades that occurred in an affected sector near the signing date. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

Input parameters:

- `from` (string): Earliest signing date inclusive (YYYY-MM-DD)
- `limit` (number): Maximum results to return (default: 25, max: 100)
- `offset` (number): Pagination offset (default: 0)
- `q` (string): Free-text search over event titles
- `sector` (string): Filter by canonical affected sector (one of the 11 canonical sector strings, e.g. "Healthcare", "Financial Services", "Energy")
- `to` (string): Latest signing date inclusive (YYYY-MM-DD)

Output parameters:

- `data`

### `get_policy_trade_overlap` (~363 tokens)

Get Policy-Trade Overlap

For a single politician, list trades that occurred within a window of days before or after the signing of an executive order affecting the traded sector. Each row contains the trade, the nearestEvent, daysDelta (negative = traded N days before EO signing, positive = traded N days after), matchBasis, and matchCount, plus a summary (totalFlags, totalEstimatedUsd, topSector). Defaults to trades 1-14 days BEFORE signing; same-day trades are always excluded (intraday ordering is unknowable). Unlike get_donor_trade_overlap, executive-branch (exec-) slugs return REAL data here: both congressional and executive trade sources feed the overlap computation. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

Input parameters:

- `direction` (string): Which side of the signing date to include: 'before' (default), 'after', or 'both'
- `limit` (number): Maximum results to return (default: 50, max: 100)
- `offset` (number): Pagination offset (default: 0)
- `slug` (string, required): Politician URL slug — congressional ("sen-nancy-pelosi", "rep-...") or executive branch ("exec-...")
- `window` (number): Match window in days around the EO signing date (default: 14, max: 30)

Output parameters:

- `data`

### `get_policy_trade_leaderboard` (~316 tokens)

Get Policy-Trade Leaderboard

Rank politicians (Congress + executive branch) by trades that occurred near executive-order signings in sectors the orders affect. Each row includes the politician, flaggedTradeCount, totalEstimatedUsd, topSector, and an exampleEvent. Use for "who trades most around policy activity" style questions. Defaults to the same "traded 1-14 days before signing" lens as get_policy_trade_overlap; same-day trades are always excluded. IMPORTANT: matches are sector-level co-occurrence — the official traded a stock in a sector the executive order affects, within a window of its signing date. Sector matches are broad and many trades will coincide with policy activity by chance; a match is a starting point for research, not evidence of foreknowledge. The matchBasis field describes match strength only ('sector' = broad sector match), never culpability, and matchCount shows how many EOs matched in the window (a noise indicator).

Input parameters:

- `direction` (string): Which side of the signing date to include: 'before' (default), 'after', or 'both'
- `limit` (number): Maximum results to return (default: 50, max: 100)
- `offset` (number): Pagination offset (default: 0)
- `sort` (string): Ranking order: 'usd' (default — estimated USD value) or 'count' (flagged-trade count)
- `window` (number): Match window in days around the EO signing date (default: 14, max: 30)

Output parameters:

- `data`

### `get_legislative_calendar` (~434 tokens)

Get Legislative Calendar

Forward-looking legislative catalyst calendar: upcoming House/Senate floor votes (bills and Senate cloture motions) filtered to items that can move tickers. Each item includes the predicted vote window (start/end/granularity/confidence/provenance), marketRelevance (low/medium/high), significance (1-5), affected sectors with direction + mechanism, verified affected tickers with evidence quotes, pass outlook, considerationProcedure (suspension-calendar bills pass ~98% of the time), a conflictBadge when the sponsor traded a verified affected ticker, and tweet/plain summaries. An EMPTY calendar is a normal state — it means nothing market-relevant is scheduled in the window, not an error. Defaults: from=today, to=+14 days, minRelevance=low. IMPORTANT: affectedTickers contains VERIFIED rows only — every ticker carries a verbatim evidenceQuote substring-verified against the actual bill text (no hallucinated tickers). sponsorTradeFacts are restatements of public STOCK Act disclosures with verbatim amount brackets and BOTH transactionDate AND disclosureDate — always cite both dates together (disclosures lag trades by up to 45 days), and never present a fact as evidence of wrongdoing. Vote windows are predictions: check window.provenance for trust level ('uc_explicit' is exact; 'rule_xxii_computed' is a medium-confidence estimate) and window.granularity for how precise the window is (exact time vs day vs week).

Input parameters:

- `from` (string): Earliest vote-window date inclusive (YYYY-MM-DD, default: today)
- `limit` (number): Maximum results to return (default: 25, max: 100)
- `minRelevance` (string): Minimum market relevance: 'low' (default), 'medium', 'high', or 'none' (explicit opt-in to the full audit trail incl. non-market items — rarely useful)
- `offset` (number): Pagination offset (default: 0)
- `to` (string): Latest vote-window date inclusive (YYYY-MM-DD, default: today + 14 days)

Output parameters:

- `data`

### `get_rvol_history` (~664 tokens)

Get RVOL History

Get the per-day relative-volume (RVOL) time series for a ticker, bucketed by trading session (premarket 04:00–09:30 ET, regular 09:30–16:00, afterhours 16:00–20:00, or all four). Each day's RVOL compares that session's volume to a trailing same-session baseline (90 days by default — configurable via "baselineDays"), so premarket volume is judged against premarket history (not a stale full-day figure). Use for spotting unusual premarket / session volume surges over the last N days. Each point also carries "baselineState" — "ready" (rvol is populated), "warming" (baseline not yet warm), "no-cutoff-history" (established ticker that never traded at this session/cutoff before) or "no-history" (new listing, no prior trading history at all) — so a null rvol is explained rather than silent. Points additionally carry "advRatio" (that day's volume ÷ the trailing 30-session average FULL-DAY volume, null when no full-day denominator exists) and "advDays" (its sample size), which give a magnitude to points RVOL cannot rate. advRatio is NOT an RVOL — it compares a partial session to a whole day, so it is typically well under 1 and must not be compared to rvol. Charged per your API tier.

Input parameters:

- `asOfTime` (string): Optional TRUE time-of-day premarket basis. Any HH:MM ET premarket time; snapped to the nearest 15-minute grid cutoff (04:00–09:15, ties resolve to the earlier cutoff). When set, the series is the PRE…
- `baselineDays` (integer): Rolling RVOL baseline window, in trading rows (same-session days). Default 90; values outside 20-250 are clamped. This is the DENOMINATOR window: every RVOL in the response is that period's volume di…
- `days` (integer): Number of trailing calendar days of history (1–90, default 30).
- `session` (string): Restrict to one session bucket; omit to return all four sessions.
- `ticker` (string, required): Stock ticker symbol (e.g., "AAPL", "TSLA")

Output parameters:

- `data`

### `get_premarket_scanner` (~498 tokens)

Get Premarket Scanner

Get the live premarket scanner board — the top premarket gainers and losers by absolute gap %, each row enriched with rvol, marketCap, floatShares, short interest, dilution, and news/catalyst flags. Off-hours it falls back to the last session. Use for premarket small-cap runner discovery. Set includePennyStocks=true to include sub-$1 names (separate cache slot). During the 04:00–09:30 ET premarket window rows also carry two LIVE volume metrics off the same live cumulative-volume numerator — they are DIFFERENT quantities and must not be substituted for each other or for "rvol": "liveRvol" = live cumulative premarket volume ÷ the trailing 90-session average cumulative volume AT THE SAME TIME OF MORNING (answers "is it busy for 08:00?"), with "liveRvolAsOf" giving the 15-minute ET grid cutoff that baseline came from — compare it to meta.asOf (when the live volume was sampled) to judge the small numerator/denominator time skew; and "premarketPaceRatio" = the same live volume ÷ the trailing 90-session average FULL premarket session (answers "what fraction of a typical entire premarket has it already done?", >1.0 = it already beat a normal premarket before the open). Both are null outside the premarket window or until the baseline is warm — never a fabricated ratio. Set universe="lowfloat" for the separate LOW-FLOAT board (float under 10M shares, no top-100 slice) instead of the default movers-derived board; that board is served from the aggregator snapshot and returns an empty rows array with a meta.reason when no snapshot is currently published (a normal off-hours state, not an error). Charged per your API tier.

Input parameters:

- `includePennyStocks` (boolean): Include sub-$1 (penny) stocks in the results. Default false.
- `sort` (string): Sort key for the low-float board: "gap" (default) or "rvol". Ignored for universe="default", which is always gap-ranked.
- `universe` (string): Which board to return. "default" (the default) is the movers-derived top-100 board. "lowfloat" is the low-float board (float < 10M shares, no top-100 slice).

Output parameters:

- `data`

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/ai-signal8-mcp/signal8ai-mcp#diagnostics

## Score history

- 2026-08-03: 70
- 2026-08-02: 40
- 2026-08-01: 25
- 2026-07-31: 25
- 2026-07-30: 6
- 2026-07-29: 80
- 2026-07-28: 80
- 2026-07-27: 51

## Links

- npm package: https://www.npmjs.com/package/@signal8ai/mcp
- Socket report: https://socket.dev/npm/package/@signal8ai/mcp
- Repository: https://github.com/signal8ai/signal8-mcp
- Website: https://signal8.ai/mcp
- Changelog RSS feed: https://verifymcp.io/servers/ai-signal8-mcp/signal8ai-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-signal8-mcp/signal8ai-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/ai-signal8-mcp/signal8ai-mcp
