Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Signal8

NPM · @SIGNAL8AI/MCP · 2 COMPONENTS

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

−4 this week 80 Trust /100

Last scanned (16 hours ago)

Scores higher than 65% of npm servers

Category Finance and Payments

Trust breakdown (7 categories)

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. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 39 of 120 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 16 days ago).Pass
  • Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability76
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 37409 tokens (~340/item across 110 items; 108 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
  • Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 108 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 110 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
What we tested

Checks we ran (15)

  • Malware scan
  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Checks we could not complete (1)

These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.

  • Security disclosure in Provenance & TransparencySecurity-disclosure policy not yet verified: we couldn't inspect the source repository.

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 −4
    • Stability: pass → 0.70 functional
  • 4 Nov 26 0
    • Security disclosure: fail → unverified ▼ functional
  • 30 Oct 26 0
    • Stability: 0.97 → pass security
  • 29 Oct 26 0
    • Stability: pass → 0.97 functional
  • 19 Oct 26 0
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Package version: 0.18.1 → 0.19.0 functional
  • 17 Oct 26 0
    • Stability: 0.97 → pass security
  • 16 Oct 26 +1

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

  • 15 Oct 26 +45
    • Injection markers: unverified → pass ▲ security
    • Schema quality: 224 → 324 ▼ functional
    • Schema quality: 224 → 315 ▼ functional
    • Schema quality: unverified → 100 ▲ functional
    • Tool coverage: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • Stability: unverified → 0.93 ▲ functional
    • Package version: 0.16.1 → 0.18.1 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed npm/@signal8ai/mcp@0.19.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 120 packages
Packages resolved 120
Stale 39
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 108 exposed · ~36,895 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
get_institutions_leaderboards ~95

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.

NameTypeReqDescription
limitnumber–Maximum results per section (default: 10, max: 50)
NameTypeReqDescription
data–––

No examples provided.

get_intraday_bars ~205

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.

NameTypeReqDescription
extendedboolean–Include extended-hours bars (premarket 04:00–09:30 ET and after-hours 16:00–20:00 ET). Only supported with resolution "1".
fromintegeryesStart time as UNIX timestamp
resolutionstringyesBar resolution in minutes
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
tointegeryesEnd time as UNIX timestamp
NameTypeReqDescription
data–––

No examples provided.

get_learn_guide ~254

Get one Signal8 Academy guide as Markdown, by track and slug (both come from search_learn_guides, or from a signal8.ai/learn/<track>/<slug> URL). Returns title, description, section, lastVerified, the public url, the full Markdown body (links already rewritten to absolute signal8.ai URLs), the related guides, the glossary terms it uses (with one-line definitions) and its SEC sources (accession numbers). Guides use hypothetical examples ("Company X") unless a source is cited; they are education, not advice about any named company. When you quote or paraphrase a guide, cite its url. Works without an API key.

NameTypeReqDescription
slugstringyesGuide slug (kebab-case), e.g. "what-is-dilution", "s1-vs-s3-baby-shelf", "form-4-codes".
trackstringyesAcademy track: "dilution" (dilution & toxic financing), "filings" (reading SEC filings), "market-structure" (halts, short interest, float, splits, congressional trading), or "signal8" (using Signal8,…
NameTypeReqDescription
data–––

No examples provided.

get_legislative_calendar ~434

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).

NameTypeReqDescription
fromstring–Earliest vote-window date inclusive (YYYY-MM-DD, default: today)
limitnumber–Maximum results to return (default: 25, max: 100)
minRelevancestring–Minimum market relevance: 'low' (default), 'medium', 'high', or 'none' (explicit opt-in to the full audit trail incl. non-market items — rarely useful)
offsetnumber–Pagination offset (default: 0)
tostring–Latest vote-window date inclusive (YYYY-MM-DD, default: today + 14 days)
NameTypeReqDescription
data–––

No examples provided.

get_market_breadth ~101

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.

NameTypeReqDescription
universestring–Universe to aggregate over: sp500, ndx, or all (default sp500)
NameTypeReqDescription
data–––

No examples provided.

get_market_metrics ~63

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.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

get_market_news ~156

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).

NameTypeReqDescription
limitinteger–Maximum items to return (1-50). Defaults to 10.
significancestring–CSV of levels to include, e.g. "critical,major" (default) or "critical,major,standard".
NameTypeReqDescription
data–––

No examples provided.

get_news ~243

Get recent news articles, press releases and AI-analysed SEC filings for a company. Use when researching recent developments, catalysts, or sentiment drivers. Filing rows (category "sec_filing") are event-bearing forms only (8-K, 6-K, 424B prospectus supplements, S-1/F-1, 10-K/10-Q/20-F, SC 13D, proxies, delisting notices; never Form 3/4/5, 13G or bank-note 424B2) and carry formType + accessionNumber; a filing that repeats a press release is omitted in favour of the release. For a small foreign issuer that files its news as 6-Ks, the filing IS the news. Set pressReleasesOnly to return only official company press releases (no filings).

NameTypeReqDescription
limitinteger–Maximum number of articles to return (1-20). Defaults to 10.
pressReleasesOnlyboolean–When true, return only official company press releases (exclude third-party news).
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

get_ownership ~644

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 totals and percentages, plus the `retail` residual) are always included in full. `retail` is the UNATTRIBUTED residual: shares no filing accounts for, which includes recent offering buyers and acquisition holders who have not filed as well as retail investors — an upper bound on retail, never a retail count. When `retail.reason` is `filed_exceeds_outstanding` the residual is withheld (null) because the counted filings exceed the shares outstanding. 🔴 A bucket (`institutional` / `insider` / `beneficial`) whose shares exceed the shares outstanding by more than a 2% timing tolerance has its `percentOfOutstanding` WITHHELD — null, with `percentWithheldReason: "ownership_exceeds_outstanding"` — and its `totalShares` still published: the percent would not be a measurement (filings on another share basis such as ordinary shares against an ADS count, another class reported under this one, shares lent and reported by both lender and buyer, or filings dated before a buyback or redemption). Report the share figure and the reason; NEVER present such a bucket as 100%, as 0%, or as any percent. When any bucket is withheld, `retail.reason` is `ownership_exceeds_outstanding` and `filedSumPercent` is absent. A null percent with NO `percentWithheldReason` means no share count was available — not measured for a different reason. `sharesOutstanding` is the denominator of every percentage and is DATED: `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` ("stated" = the issuer's statement date; "checked" = when the figure was last confirmed against a vendor; "none" = date not recorded) and `sharesOutstandingSource` (a vendor-f…

NameTypeReqDescription
limitinteger–Maximum holders to return in allHolders (default: 100, max: 100)
offsetinteger–Offset for pagination (default: 0)
tickerstringyesStock ticker symbol (e.g., AAPL, TSLA)
NameTypeReqDescription
data–––

No examples provided.

get_policy_events ~298

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).

NameTypeReqDescription
fromstring–Earliest signing date inclusive (YYYY-MM-DD)
limitnumber–Maximum results to return (default: 25, max: 100)
offsetnumber–Pagination offset (default: 0)
qstring–Free-text search over event titles
sectorstring–Filter by canonical affected sector (one of the 11 canonical sector strings, e.g. "Healthcare", "Financial Services", "Energy")
tostring–Latest signing date inclusive (YYYY-MM-DD)
NameTypeReqDescription
data–––

No examples provided.

get_policy_trade_leaderboard ~316

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).

NameTypeReqDescription
directionstring–Which side of the signing date to include: 'before' (default), 'after', or 'both'
limitnumber–Maximum results to return (default: 50, max: 100)
offsetnumber–Pagination offset (default: 0)
sortstring–Ranking order: 'usd' (default — estimated USD value) or 'count' (flagged-trade count)
windownumber–Match window in days around the EO signing date (default: 14, max: 30)
NameTypeReqDescription
data–––

No examples provided.

get_policy_trade_overlap ~356

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). 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).

NameTypeReqDescription
directionstring–Which side of the signing date to include: 'before' (default), 'after', or 'both'
limitnumber–Maximum results to return (default: 50, max: 100)
offsetnumber–Pagination offset (default: 0)
slugstringyesPolitician URL slug — congressional ("sen-nancy-pelosi", "rep-...") or executive branch ("exec-...")
windownumber–Match window in days around the EO signing date (default: 14, max: 30)
NameTypeReqDescription
data–––

No examples provided.

get_political_sector_rotation ~170

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.

NameTypeReqDescription
chamberstring–Optional chamber filter (default: all chambers merged)
limitnumber–Top-N sectors to return (default: 15, max: 30)
sortBystring–Rank sectors by trade count or summed dollar volume (default: count)
windowDaysnumber–Lookback window in days (default: 30, max: 90)
NameTypeReqDescription
data–––

No examples provided.

get_politician_activity ~90

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.

NameTypeReqDescription
slugstringyesPolitician URL slug (e.g., "sen-nancy-pelosi")
NameTypeReqDescription
data–––

No examples provided.

get_politician_committees ~107

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.

NameTypeReqDescription
slugstringyesPolitician URL slug (e.g., "sen-nancy-pelosi", "rep-nancy-pelosi")
NameTypeReqDescription
data–––

No examples provided.

get_politician_detail ~97

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").

NameTypeReqDescription
slugstringyesPolitician URL slug (e.g., "sen-nancy-pelosi", "sen-tommy-tuberville")
NameTypeReqDescription
data–––

No examples provided.

get_politician_disclosures ~502

Per-DISCLOSURE feed of politician trades: one item per congressional STOCK Act periodic transaction report (PTR) or executive-branch OGE Form 278-T that contains at least one trade whose bracket LOWER bound is >= minAmount. Each item carries the politician, filing link, filing delay, and ALL trades of the report sorted largest bracket first, with qualifyingTradeCount for how many clear the threshold. Built for polling: pass the returned nextCursor back as `since` and each disclosure is returned exactly once (for the same minAmount and kinds); keep nextCursor even when items is empty, and call again at once when hasMore is true. Without `since` only disclosures that became complete in the last 48h are returned. A report is emitted only after no new row of it has arrived for a settle window (~8h), so items lag the filing by hours; a report that GROWS materially afterwards (+25 trades or +20%) is emitted once more with a higher `revision`, and `replacesPrevious: true` when you already had it — replace it by `id`. filingDelayDays (longest lag), isLateFiling (>45 days) and lateTradeCount EXCLUDE trades with transactionDateSuspect=true: a date lagging its own otherwise on-time report by ~one year is a probable mistyped year upstream, listed as filed and counted in suspectDateCount — never quote it as a filing lag. owner null means the filing did not state one ("Not stated"), NEVER "Self". Render amountRange (the filed bracket); amountMin null means the bracket was not parsed (never $0), amountMax null means "Over $50,000,000" or unparsed, ticker null means a non-equity asset.

NameTypeReqDescription
kindsarray–Which disclosure kinds to include (default: both). 'congressional' = STOCK Act PTRs (Senate + House), 'executive' = OGE 278-T (Cabinet-level officials).
limitinteger–Maximum disclosures to return (default: 50, max: 100)
minAmountinteger–USD threshold compared to each trade's bracket lower bound (default: 50001). A disclosure qualifies when ANY of its trades meets it.
sincestring–Opaque cursor: the nextCursor from a previous call, verbatim. Omit only on the first call.
NameTypeReqDescription
data–––

No examples provided.

get_politician_donor_summary ~148

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.

NameTypeReqDescription
cyclestring–Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
slugstringyesPolitician URL slug (e.g., "sen-nancy-pelosi")
NameTypeReqDescription
data–––

No examples provided.

get_politician_donors ~268

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.

NameTypeReqDescription
cyclestring–Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
limitnumber–Maximum results to return (default: 50, max: 100)
minAmountnumber–Minimum contribution amount in USD (filters out small donors)
offsetnumber–Pagination offset (default: 0)
slugstringyesPolitician URL slug (e.g., "sen-nancy-pelosi")
sortBystring–Sort field: 'amount' (default), 'date', or 'name'
sortOrderstring–Sort direction (default: 'desc')
typestring–Filter by donor type: 'individual', 'pac', or 'all' (default: 'all')
NameTypeReqDescription
data–––

No examples provided.

get_politician_late_filers ~158

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. Excludes trades whose transaction date is suspect (a probable mistyped year upstream: ~one year off the rest of its own on-time filing) -- their delay is not measured. owner null means not stated, never "Self". Useful for identifying politicians with poor disclosure compliance.

NameTypeReqDescription
daysnumber–Lookback period in days (default: 180, max: 730)
limitnumber–Maximum results to return (default: 10, max: 50)
offsetnumber–Pagination offset (default: 0)
NameTypeReqDescription
data–––

No examples provided.

get_politician_pnl ~247

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.

NameTypeReqDescription
slugstringyesPolitician URL slug — congressional ("sen-nancy-pelosi", "rep-...") or executive ("exec-trump-donald-j")
NameTypeReqDescription
data–––

No examples provided.

get_politician_recent_trades ~135

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.

NameTypeReqDescription
daysnumber–Lookback period in days (default: 30, max: 365)
directionstring–Filter by direction: 'buy' or 'sell'
limitnumber–Maximum results to return (default: 50, max: 100)
offsetnumber–Pagination offset (default: 0)
NameTypeReqDescription
data–––

No examples provided.

get_politician_roles ~60

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

NameTypeReqDescription
slugstringyesPolitician URL slug (e.g., "sen-nancy-pelosi")
NameTypeReqDescription
data–––

No examples provided.

get_politician_scorecard ~428

Top 5 and bottom 5 politicians (Congress + executive-branch officials) by ESTIMATED trading P&L over a trailing window (default and only supported window: 90 days), plus SPY's return over the same window as a benchmark, and imageUrl — a ready-to-attach 2160x2700 PNG card of the same ranking (null when unavailable; card.reason says why). ALL P&L FIGURES ARE ESTIMATES (estimate: true, estimateRange "±25–40%"): disclosed amount RANGES are converted to shares at the historical close, FIFO-matched, and open positions marked to the latest quote. State that they are estimates whenever you publish them; the card already prints "Estimates from disclosed amount ranges (±25–40%). Not investment advice." WHAT THE METRIC IS (read `metric`): P&L on trades DISCLOSED INSIDE the window only — realized on round trips opened and closed in the window plus unrealized on positions opened in the window. It is NOT lifetime P&L; sales of positions bought before the window are not counted. Eligibility: at least 5 trades in the window (eligibility.minTradesInWindow), so a single lucky trade cannot top the board. Each row: slug, fullTitle ("Senator", "Representative", or an executive official's filed title), fullName, displayName, party and state as full words, estimatedPnl, winRate (0-1; null = no position closed in the window — not measured, never 0%), tradesInWindow, unrealizedMeasured, and portraitUrl (always null for executive officials). Use the full title and full party/state words — never "Sen." or "D-CA". benchmark.available false means SPY was NOT measured (benchmark.reason) — never 0%. available false with reason "pending" means the window has not been computed yet, not that nobody traded.

NameTypeReqDescription
windownumber–Trailing window in days. Only 90 is supported (default 90).
NameTypeReqDescription
data–––

No examples provided.

get_politician_transactions ~160

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.

NameTypeReqDescription
limitnumber–Maximum results to return (default: 50, max: 100)
offsetnumber–Pagination offset (default: 0)
slugstringyesPolitician URL slug (e.g., "sen-nancy-pelosi")
sortBystring–Sort field (default: 'date')
sortOrderstring–Sort direction (default: 'desc')
typestring–Filter by transaction type: 'Purchase' or 'Sale'
NameTypeReqDescription
data–––

No examples provided.

get_politician_votes ~118

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.

NameTypeReqDescription
limitnumber–Maximum results to return (default: 10, max: 100)
offsetnumber–Pagination offset (default: 0)
slugstringyesPolitician URL slug (e.g., "sen-nancy-pelosi")
NameTypeReqDescription
data–––

No examples provided.

get_politicians ~196

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.

NameTypeReqDescription
limitnumber–Maximum results to return (default: 10, max: 100)
offsetnumber–Pagination offset (default: 0)
partystring–Filter by party: 'D' (Democrat), 'R' (Republican), 'I' (Independent)
searchstring–Search by politician name (partial match)
sortBystring–Sort field (default: 'last_trade')
sortOrderstring–Sort direction (default: 'desc')
statestring–Filter by US state (2-letter code, e.g. "CA", "TX")
NameTypeReqDescription
data–––

No examples provided.

get_politicians_most_active ~96

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.

NameTypeReqDescription
limitnumber–Maximum results to return (default: 10, max: 50)
periodstring–Lookback period (default: '90d')
NameTypeReqDescription
data–––

No examples provided.

get_politicians_pnl_leaderboard ~145

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).

NameTypeReqDescription
limitnumber–Maximum results to return (default: 25, max: 100)
offsetnumber–Pagination offset (default: 0)
sortBystring–Sort field (default: 'pnl')
NameTypeReqDescription
data–––

No examples provided.

get_post_earnings_movers ~154

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.

NameTypeReqDescription
datestringyesEarnings date to check (YYYY-MM-DD)
limitinteger–Maximum results to return (default 25, max 100)
minChangePctnumber–Minimum absolute % price change to include (default 5). Set to 0 for all.
NameTypeReqDescription
data–––

No examples provided.

get_premarket_scan_history ~1,892

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 30-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. A price / market-cap / float filter can only be applied to a ticker company_screener_data holds a value for, so a just-renamed or just-listed symbol cannot be rated against it. Those rows are NEVER silently dropped: "meta.unscreened" always reports their count, the filter families involved and the tickers, and includeUnscreened=true returns them in "rows" tag…

NameTypeReqDescription
asOfTimestring–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…
baselineDaysinteger–Rolling RVOL baseline window, in trading rows (same-session days). Default 30; values outside 20-250 are clamped. This is the DENOMINATOR window: every RVOL in the response is that period's volume di…
datestringyesREQUIRED past ET trade date to scan (YYYY-MM-DD). Future/non-trade dates return an empty list.
includeNoHistoryboolean–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…
includeUnscreenedboolean–Also return rows that could not be RATED against the price / market-cap / float bounds above, because company_screener_data holds no value for them — typically a symbol renamed or listed within the l…
limitinteger–Max rows to return (1–200, default 50). Rows are ranked by RVOL desc.
maxFloatnumber–Maximum public float (shares).
maxMarketCapnumber–Maximum market cap in USD (e.g. 500000000 for sub-$500M).
maxPricenumber–Maximum latest price in USD.
minBaselineVolumenumber–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…
minFloatnumber–Minimum public float (shares).
minMarketCapnumber–Minimum market cap in USD (market_cap_computed = price × shares outstanding).
minPricenumber–Minimum latest price in USD.
minRvolnumber–Minimum RVOL (day session volume ÷ trailing 30-day baseline). Drops rows whose baseline is not yet warm.
minSessionVolumenumber–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?"…
offsetinteger–Pagination offset (default 0).
sessionstring–Session bucket to scan (default premarket). "all" = full extended day.
NameTypeReqDescription
data–––

No examples provided.

get_premarket_scanner ~735

Get the live premarket scanner board — the top premarket gainers and losers by absolute gap %, each row enriched with rvol, marketCap, floatShares (the measured POINT float, null on a withheld dilution-snapshot row — such a row then carries "floatEstimate" {shares, bound: "point" | "ceiling" | "floor", basis}. RENDERING (2026-10-18): a "point" is printed as the plain number with its as-of and caveat; a "ceiling" / "floor" is a BOUND, not a figure — say "float not stated (at most / at least N)" and never the bare number, never a "~" / "<=" / ">=" glyph, never arithmetic; neither present = not measured, never 0. The low-float board admits on that figure's VALUE: an 8M ceiling is in, a 26M floor or a 27M estimate is out), short interest, dilution, and news/catalyst flags. Listing-compliance data (row "compliance", the compliance/split badges, "reverseSplitSignal", "deficiencySignal") is Signal8 Pro: for any other caller "compliance" is null with "complianceWithheld": "pro_required" — WITHHELD, which is not "not measured" and never "no deficiency". 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 30-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 30-session average FULL premarket session (answers "what fraction of a typical entire premarket has it already done?", >1.0 = it already…

NameTypeReqDescription
includePennyStocksboolean–Include sub-$1 (penny) stocks in the results. Default false.
sortstring–Sort key for the low-float board: "gap" (default) or "rvol". Ignored for universe="default", which is always gap-ranked.
universestring–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).
NameTypeReqDescription
data–––

No examples provided.

get_price_target ~122

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.

NameTypeReqDescription
limitnumber–Maximum results when list=true (default: 50, max: 100). Ignored for consensus.
listboolean–false/omitted = consensus price target; true = per-analyst price-target list
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

get_quote ~419

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. marketCap is the live price × the SEC-derived share count; when that count is unavailable it is null with marketCapWithheldReason set — NOT MEASURED, never "no market cap" and never $0. The count itself rides as `sharesOutstanding` with `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` ("stated" = the issuer's statement date; "checked" = when it was last confirmed against a vendor; "none" = date not recorded) and a vendor-free `sharesOutstandingSource` — quote the date with the count. When no MEASURED count exists, `sharesOutstanding` and `marketCap` are a BEST ESTIMATE (the newest dated filed or reference count, moved onto today's split basis): `sharesOutstandingEstimated: true`, `sharesOutstandingEstimateKind` ("stated_as_of" = the ISSUER's last stated count, a dated point; the filings record later issuances LISTED in `statedAsOf.events`, not added — "at_least" is the retired name of the same state) and `marketCapEstimated: true` with `marketCapAsOf` (the count's date). Render a stated_as_of count WITH its date and its events ("2,357,498 as of 2026-10-08 · plus an offering closed 2026-10-09 whose share count is not stated"); never as a bound, never as today's count.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

get_recent_congressional_votes ~84

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.

NameTypeReqDescription
limitnumber–Maximum results to return (default: 50, max: 100)
offsetnumber–Pagination offset (default: 0)
NameTypeReqDescription
data–––

No examples provided.

get_recent_material_filings ~146

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`.

NameTypeReqDescription
itemsarray–Optional 8-K item codes (e.g. ["1.01","2.01"])
limitinteger–Optional max rows (1–100, default 50)
universestring–Index universe to scan (sp500, ndx, or dji).
NameTypeReqDescription
data–––

No examples provided.

get_recent_uplistings ~568

Get OTC-to-exchange uplistings that FINRA recorded on a given US market day, for companies under a market-cap ceiling. Each row carries the old OTC symbol, the resolved new exchange symbol (or null), a confirmed flag, the destination venue (NASDAQ / NYSE / NYSE American / ARCA), company name, effective date, market cap and float in SHARES. 🔴 THIS IS A SAME-DAY READ AND THERE IS NO FORWARD-LOOKING VERSION. FINRA records an uplisting at roughly 01:45 ET ON the day it becomes effective, and the source table has no scheduled/announced column at all. So there is nothing to publish the night before, and dayOffset exists for catch-up reads of past days, NOT for forecasting — a positive offset returns nothing. Never frame these as upcoming, tomorrow, or expected; they have already happened. 🔴 newSymbol: null IS A FIRST-CLASS PUBLISHED STATE, NOT A MISSING FIELD. FINRA's row names only the OLD OTC symbol; the new ticker is resolved by company-name match against Nasdaq SymDir and sometimes cannot be resolved. A guessed or wrong ticker would name a company that did not uplist, so an unresolved row is published naming the OLD symbol and saying the new one was not resolved. DO NOT infer, guess, look up, or fill in a null newSymbol, and do not drop the row. confirmed: false means the symbol resolution is PROVISIONAL — render it as provisional, keep it out of any headline, and do not assert the new ticker as fact. Only confirmed: true is a confirmed resolution. 🔴 capUnknownCount IS A WITHHOLDING COUNT, NOT A ZERO — rows that cleared every other filter but have NO measured market cap, so they cannot be asserted to sit under the stated ceiling. It does not mean those companies have no cap. Disclose the count if you publish a cap-bracketed framing. AN EMPTY uplistings ARRAY IS THE NORMAL, EXPECTED RESULT ON MOST DAYS — uplistings run roughly 6.6 per month across ALL market caps, so the large majority of days genuinely have none. It is NOT an error, NOT an outage, and NOT evidence…

NameTypeReqDescription
dayOffsetinteger–Day offset from the US market day (default 0 = today). Negative values read past days. A positive value returns nothing — there is no forward-looking uplisting data.
maxMarketCapnumber–Exclusive market-cap ceiling in USD (default 300000000). Rows with NO measured market cap are excluded and counted in capUnknownCount, never assumed to be under the ceiling.
NameTypeReqDescription
data–––

No examples provided.

get_recently_sponsored_bills ~140

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.

NameTypeReqDescription
congressnumber–Congress number to filter (default: 119 for current session)
limitnumber–Maximum bills to return (default: 10, max: 50)
offsetnumber–Pagination offset (default: 0)
NameTypeReqDescription
data–––

No examples provided.

get_rvol_history ~718

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 (30 trading 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.

NameTypeReqDescription
asOfTimestring–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…
baselineDaysinteger–Rolling RVOL baseline window, in trading rows (same-session days). Default 30; values outside 20-250 are clamped. This is the DENOMINATOR window: every RVOL in the response is that period's volume di…
daysinteger–Number of trailing calendar days of history (1–90, default 30).
sessionstring–Restrict to one session bucket; omit to return all four sessions.
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

get_senate_trades_by_ticker ~103

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.

NameTypeReqDescription
limitnumber–Maximum results to return (default: 50, max: 100)
offsetnumber–Pagination offset (default: 0)
tickerstringyesStock ticker symbol (e.g., "AAPL", "NVDA")
NameTypeReqDescription
data–––

No examples provided.

get_short_interest ~266

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. 🔴 "shortInterestPercent" null ALWAYS carries "shortInterestPercentReason" (since 2026-10-04): "float_not_point" = the float on record is a snapshot BOUND or ESTIMATE (<= / >= / ~), and a percent-of-float is never struck off a bound — do NOT divide "shortInterest" by a ceiling, floor or estimate from get_float yourself; "float_unavailable" = no float of any kind on record; "short_pct_of_float_unreconciled" = a point float existed but the ratio was implausible or the split basis could not be resolved; "float_class_scope_mismatch" = the float on record POOLS more than one separately listed share class (e.g. Class A + Class D) while short interest is reported for this symbol's class only — do NOT divide "shortInterest" by get_float's figure yourself for that ticker. A null percent is NOT MEASURED, never 0%.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

get_split_history ~257

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). IMPORTANT: `cumulativeReverseSplitRatio2yr` is null when it CANNOT BE STATED, which is NOT the same as no reverse splits — read `cumulativeWithheldReason` to tell them apart. `unconfirmed_splits_in_window` means at least one in-window reverse split is evidenced by only one source, so no cumulative is defensible: the confirmed splits alone would understate it, and understating a cumulative can put an issuer that breaches the 1:250 cap under it. Each row also carries `confirmed`; a `confirmed: false` split appears only in the announcement calendar, which retains every announcement and retracts none, so it is usually an amended or superseded announcement and occasionally a real split the effected-splits ledger missed. Both are returned. `ratioDisplay` and `type` are likewise null for a ratio whose exact factor cannot be determined.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., AAPL, TSLA)
NameTypeReqDescription
data–––

No examples provided.

get_stock_price_change ~104

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.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

get_top_movers ~413

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.

NameTypeReqDescription
datestring–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…
directionstringyesMover direction: gainers, losers, or active (volume)
includePennyStocksboolean–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…
limitinteger–Optional max rows (1–100). Backend default applied when omitted.
sessionstring–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.
NameTypeReqDescription
data–––

No examples provided.

get_trading_halts ~116

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.

Input schema present but exposes no named parameters.

NameTypeReqDescription
data–––

No examples provided.

get_upcoming_reverse_splits ~745

Get reverse stock splits SCHEDULED to take effect within a day-offset window of the current US market day, for companies under a market-cap ceiling. Offsets are days from today on the US market calendar: fromOffset=1, toOffset=1 is tomorrow; fromOffset=1, toOffset=7 is the week ahead. Each row carries the ticker, company name, the exact vendor integers (splitFrom/splitTo), a pre-rendered ratio ("1-for-20"), the effective date, market cap, float in SHARES, and price. floatShares is on the SAME split basis as the market cap. floatBasis says what it is: "measured", or "estimate" / "estimate_rebased" (the float ladder's point estimate, moved across this split when it predates it) — present an estimate as an estimate. 🔴 floatShares: null MEANS NOT MEASURED OR WITHHELD — never zero, never "no float". Such rows ARE included (they have a valid market cap); floatWithheldReason says why. Do not substitute a float from another source. floatUnknownCount counts those null-float rows IN the list; it is not a withholding count (withheldCount is). price is on the SAME split basis as the market cap (null when it cannot be stated on one basis), so never pair it with a pre-split price from elsewhere. WHAT THIS IS: rows are splits scheduled AS OF NOW — not a guarantee that every split effective in the window is already known. The underlying stock_splits table has NO created_at column, so there is no way to measure when a row first appeared, and a split announced later will simply be missing. Describe results as "scheduled as of now", NEVER as "all of" or "every" reverse split. A scheduled split can also be postponed or cancelled after it is announced. 🔴 capUnknownCount IS A WITHHOLDING COUNT, NOT A ZERO. It counts rows that passed every other filter and were DELIBERATELY EXCLUDED because Signal8 has no measured market cap for them — typically real OTC microcaps. It does NOT mean those companies have no dilution, no split, or no cap; it means the cap was not measured, so they cannot…

NameTypeReqDescription
fromOffsetinteger–Window start as a day offset from the US market day (default 1 = tomorrow). Must be <= toOffset; an inverted window is rejected rather than silently returning an empty list.
maxMarketCapnumber–Exclusive market-cap ceiling in USD (default 300000000). Rows with NO measured market cap are excluded and counted in capUnknownCount, never assumed to be under the ceiling.
toOffsetinteger–Window end, inclusive, as a day offset from the US market day (default 1). Use 7 with fromOffset 1 for the week ahead.
NameTypeReqDescription
data–––

No examples provided.

get_volume_profile ~113

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.

NameTypeReqDescription
bucketSizenumber–Price bucket width in dollars (default $1.00)
datestringyesTrading day (YYYY-MM-DD)
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

lookup_accession_number ~174

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, exhibit count and `filingId` (for get_filing_document / get_filing_exhibits). If the filing is held in Signal8's archive (isInDatabase: true) its content can be read here; if it is only found on SEC EDGAR the response has isInDatabase: false and basic metadata only. For the full document list use get_filing_documents.

NameTypeReqDescription
accessionNumberstringyesSEC accession number in dashed (e.g., "0001193125-22-010026") or compact 18-digit format
NameTypeReqDescription
data–––

No examples provided.

screen_companies ~1,291

Since 2026-10-03 the float column ALWAYS carries the dilution snapshot's own figure when the snapshot has one: "float" is the measured POINT float (null on a withheld snapshot row), and such a row then carries "floatEstimate" (shares) + "floatEstimateBound" ("point" / "ceiling" / "floor") + "floatEstimateBasis" (the working). RENDERING (2026-10-18): a "point" is the plain number with its basis as the caveat; a "ceiling" / "floor" is a BOUND, not a figure — write "float not stated (at most / at least 7,953,957)", never the bare number and never a "~" / "<=" / ">=" glyph. minFloat / maxFloat and the computed_float sort compare the figure's VALUE (COALESCE of the two), so a bounded row is kept; a row with neither is NOT MEASURED, never 0. 🔴 Never feed floatEstimate into a market cap, a percent-of-float or a short-interest ratio — a bound is not a point. Screen companies by price range, volume, cash runway, float, shares outstanding (each row's `shares_outstanding` is DATED by `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` (stated / checked / none = date not recorded) and a vendor-free `sharesOutstandingSource`; never present the count without its date), market cap, industry, listing exchange (NASDAQ/NYSE/AMEX), listing market (market="otc" / "exchange" — the reliable OTC test; the exchange label is inconsistent on OTC rows), float data source, TTM dividend yield and snapshot cash (minCash / maxCash). CASH RUNWAY: a null cash_runway_months carries cashRunwayReason saying why. "estimate_would_be_negative" means the last cash figure rolled forward by the burn rate is below zero today — ESTIMATED exhausted, not a reported zero balance (cashRunwayAsOf is the cash figure's date). Such rows have no months, so maxCashRunway drops them unless includeRunwayExhausted=true. Any other reason, or a null reason, is NOT a runway claim. CASH: estimatedCurrentCash (with estimatedCashAsOf) is the dilution snapshot's cash PROJECTION in USD, present only for snapshot-covered compa…

NameTypeReqDescription
countrystring–Company universe by issuer domicile: "US" (default), "CA" (Canadian companies via their US-OTC/US cross-listings), or "all"
exchangestring–Filter by listing exchange (exact match): NASDAQ, NYSE, or AMEX. For OTC use market="otc" instead
excludeHaltedboolean–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.
floatSourcestring–Filter by float data source
includeRunwayExhaustedboolean–When true, maxCashRunway also returns companies whose estimated cash is already exhausted (cash_runway_months null, cashRunwayReason "estimate_would_be_negative"); they sort first on an ascending run…
industrystring–Filter by company industry (exact match, e.g. "Biotechnology", "Software")
limitnumber–Maximum results per page (default: 25, max: 100)
marketstring–Listing market: "otc" (OTC Markets) or "exchange" (NASDAQ / NYSE / NYSE American / Arca / Cboe). Companies with no listing record match neither
maxCashnumber–Maximum dilution-snapshot cash projection in USD (estimatedCurrentCash). Snapshot-covered companies only — an uncovered company is not measured, not excluded for having cash
maxCashRunwaynumber–Maximum estimated months of cash remaining
maxDividendYieldnumber–Maximum TTM dividend yield in percent. Rows with no measured yield never match.
maxFloatnumber–Maximum computed public float (shares)
maxMarketCapComputednumber–Maximum market cap in USD (price * shares outstanding)
maxPricenumber–Maximum latest price in USD
maxSharesOutstandingnumber–Maximum shares outstanding from SEC EDGAR
maxVolumenumber–Maximum daily trading volume
minCashnumber–Minimum dilution-snapshot cash projection in USD (estimatedCurrentCash). Snapshot-covered companies only
minCashRunwaynumber–Minimum estimated months of cash remaining
minDividendYieldnumber–Minimum TTM dividend yield in percent (e.g. 3 for 3%). Rows with no measured yield never match.
minFloatnumber–Minimum computed public float (shares)
minMarketCapComputednumber–Minimum market cap in USD (price * shares outstanding)
minPricenumber–Minimum latest price in USD
minSharesOutstandingnumber–Minimum shares outstanding from SEC EDGAR
minVolumenumber–Minimum daily trading volume
offsetnumber–Offset for pagination (default: 0)
sortBystring–Column to sort results by (default: volume)
sortOrderstring–Sort direction (default: desc)
NameTypeReqDescription
data–––

No examples provided.

screen_must_raise ~339

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. Companies whose ESTIMATED cash is already exhausted are included by default and listed first: they carry cash_runway_months null with cashRunwayReason "estimate_would_be_negative" (the last cash figure, dated cashRunwayAsOf, rolled forward by the burn rate is below zero today). That is an estimate from a dated balance, never a reported zero balance — say "estimated exhausted as of today, last cash figure <cashRunwayAsOf>", not "has no cash". Rows also carry estimatedCurrentCash / estimatedCashAsOf (dilution-snapshot cash projection; null = not measured) and listingMarket.

NameTypeReqDescription
includeExhaustedboolean–Include companies whose estimated cash is already exhausted (default: true)
industrystring–Filter by company industry (exact match, e.g. "Biotechnology", "Software")
limitnumber–Maximum results to return (default: 25, max: 100)
marketstring–Listing market: "otc" (OTC Markets) or "exchange" (NASDAQ / NYSE / NYSE American / Arca / Cboe)
maxMonthsnumber–Maximum months of cash runway to filter by (default: 6)
offsetnumber–Offset for pagination (default: 0)
NameTypeReqDescription
data–––

No examples provided.

Install

How do I install the Signal8 MCP server?

Signal8 runs locally as an npm package, launched with npx -y @signal8ai/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @signal8ai/mcp

# add to Claude Code
claude mcp add ai-signal8-mcp -- npx -y @signal8ai/mcp
Common questions

What is the Signal8 MCP server?

Signal8 is an MCP server listed in the public MCP registry as ai.signal8/mcp. SEC filings, dilution, insider & institutional ownership, and political-trade data for AI agents. This page covers its npm package (@signal8ai/mcp).

Is the Signal8 MCP server safe to use?

Signal8 scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Signal8 MCP server expose?

Signal8 exposes 108 tools: search_companies, get_company_profile, get_quote, get_market_metrics, get_short_interest, and 103 more. Their descriptions and schemas cost roughly 36,895 tokens of context every time the server is loaded.

Is the Signal8 MCP server still maintained?

Signal8 is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Signal8 MCP server under?

Signal8 declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

What did VerifyMCP test on the Signal8 MCP server?

VerifyMCP ran 15 checks on Signal8, covering Malware scan, Known CVEs, Install scripts, Dependency health and 11 more. One item could not be completed, a gap on our side rather than a finding about Signal8: Security disclosure. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.