Signal8
NPM · @SIGNAL8AI/MCP · 2 COMPONENTS
SEC filings, dilution, insider & institutional ownership, and political-trade data for AI agents.
Available components
Last scanned (15 hours ago)
Scores higher than 65% of npm servers
Category Finance and Payments
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
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 →
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
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 →
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 →
define_term Define a Market / SEC Term ~208
Look up a term in the Signal8 Academy glossary (signal8.ai/learn/glossary) — dilution, SEC filing and trading jargon such as "ATM offering", "baby shelf", "full ratchet", "pre-funded warrant", "going concern", "LULD", "days to cover", "Form 25". Accepts a glossary slug ("atm-offering"), the term itself, or a common alias ("ATM", "price reset"); matching is case- and punctuation-insensitive. Returns the term, a one-line short definition, the long definition as Markdown, related terms, the Academy guides that use it, and the public url. A TERM_NOT_FOUND error means the glossary has no entry for that wording — not that the concept does not exist; try search_learn_guides with the same words. Works without an API key.
| Name | Type | Req | Description |
|---|---|---|---|
| term | string | yes | Term, alias or glossary slug, e.g. "baby shelf", "ATM", "full-ratchet". |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_accumulation_snapshot Get Accumulation Snapshot ~88
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_analyst_consensus Get Analyst Consensus ~70
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_analyst_coverage Get Analyst Coverage ~55
Get aggregated analyst coverage for a ticker — consolidated view of grades, targets, and coverage breadth across covering firms.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_analyst_estimates Get Analyst Estimates ~118
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of estimate periods to return (1-40). Defaults to 8. |
| period | string | – | Estimate period: "annual" (default) or "quarter". |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_analyst_grades Get Analyst Grades ~83
Get recent analyst grade actions (upgrades, downgrades, initiations) for a ticker, including the grading firm and previous/new grade.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 10, max: 50) |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_baby_shelf_capacity Get Baby-Shelf (S-3 I.B.6) Raisable Capacity ~797
Get the SEC Form S-3 General Instruction I.B.6 "baby shelf" capacity: how much the issuer may raise off an effective shelf right now, given the one-third-of-public-float cap that applies below a $75M non-affiliate float, less the trailing-twelve-month takedowns already used. Returns the public float basis, the cap, takedowns counted and the remaining raisable amount. 🔴 `constraintApplies: false` means the cap does NOT bind (float at or above $75M, so primary offerings are unlimited under I.B.1) — it is NOT "no capacity" and NOT a favourable finding. 🔴 `constraintApplies: null` means the float value was NOT MEASURED (`suppressedReason: "float_unmeasured"`): neither the $75M test nor the cap could be answered — report it as not measured, NEVER as "the cap does not bind" and NEVER as unlimited. 🔴 A `suppressed` response means the figure is WITHHELD (for example an issuer that has been delisted to OTC and cannot run an S-3 primary at all) — report it as not stateable, NEVER as $0 raisable, which is a claim. 🔴 `suppressedReason: "ib6_pool_unattributed"` means the cap DOES apply but the trailing sales that would exhaust it could not all be attributed to an I.B.6 registration, so the derived $0 is a lower BOUND, not a measurement — `remainingCapacity` is null and `capacityUpperBoundDollars` is "at most", never a figure. 🔴 `suppressedReason: "issuer_not_ib6_limited"` means the issuer's own current prospectus offers MORE than the cap our float valuation would strike, on a cover with no I.B.6 limitation (`issuerUnlimitedOffer` echoes it): whether the cap applies is NOT MEASURED (`constraintApplies: null`) — never report it as $0, as constrained, or as unlimited. `floatValueBasis: "issuer_stated"` means the issuer's own printed I.B.6 float value (`issuerStatedFloat`, a prospectus no older than 60 days) was lower than the live valuation and was used. A null remaining capacity is likewise not measured, not zero. ALWAYS RETURNS 200 — read `available` and `reason`, never the…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_cash_history Get 10-Year Cash History ~100
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_cash_position Get AI Cash Position ~287
Get the Signal8 cash position model for a company, derived from the dilution snapshot pipeline: anchor cash and anchor date, monthly burn, post-anchor capital raises (with SEC filing citations), known outflows, estimated current cash and runway months. Use when analyzing a company's current cash situation, runway, or capital raise activity. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status: coverage is partial, so `available: false` with reason `snapshot_not_generated` means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no cash data and different from an outage (an outage is a 5xx). Never report a company as having no cash or no runway on the strength of an unavailable response. The `scenarios` envelope is preserved for compatibility but only `scenarios.closed` is populated: `pending` and `announced` are null with reason `scenario_not_modelled` because the extraction records only REALIZED cash-raising events and never models speculative raises. Do not infer them from shelf or ATM capacity. Included in Signal8 Pro (403 FEATURE_NOT_AVAILABLE, requiredTier "pro", without it). That is a tier upgrade, not an add-on purchase — the add-on is no longer sold.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_cash_runway_calendar Get Cash Runway Depletion Calendar ~280
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. When the window starts today or earlier it also lists, first, companies whose ESTIMATED cash is already exhausted (cash_runway_months null, cashRunwayReason "estimate_would_be_negative", cashRunwayAsOf = the date of the cash figure that was rolled forward) — an estimate, never a reported zero balance.
| Name | Type | Req | Description |
|---|---|---|---|
| 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) |
| market | string | – | Listing market: "otc" (OTC Markets) or "exchange" (NASDAQ / NYSE / NYSE American / Arca / Cboe) |
| offset | number | – | Offset for pagination (default: 0) |
| to | string | – | End date (YYYY-MM-DD, default: today + 90 days) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_clinical_trials Get Clinical Trials ~88
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of clinical trials to return (1-50). Defaults to 10. |
| ticker | string | yes | Stock ticker symbol (e.g., "MRNA", "PFE") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_company_profile Get Company Profile ~191
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 -- 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. `sharesOutstanding` is DATED: `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; null is NOT MEASURED, never zero.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_compliance Get Compliance Evaluation ~80
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_coverage Get Dilution Coverage Status ~533
Cheap pre-check for whether Signal8 holds a dilution analysis for a company: coverage status (verified / stale / not_covered), extraction state (never_extracted / running / failed / timeout / complete), last attempt and last success timestamps, the coverage tier, and whether the ticker is out of scope. CALL THIS FIRST before the expensive dilution tools — it answers "is there anything to fetch" for a fraction of the cost. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status. Coverage is partial: `not_covered` means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. An `outOfScope` ticker is a statement about the PRODUCT (dilution analysis covers small-cap issuers only) and says NOTHING about that company's dilution — do not report a large-cap as having no dilution because it is out of scope. A `stale` status means the analysis is real but predates recent filings. `statusDetail` refines it: `newer_filing_unread` (a material filing — new/amended instrument, 424B5 pricing, split, 10-K — was filed after the snapshot and it has not read it; `unreadFilings` names them) and `delisting_filed` (a Form 25/25-NSE/15 filed after the snapshot; `delistingFiled` names it) both report `status: stale` — say the analysis predates that filing, never present it as current. A null `unreadFilings` is NOT MEASURED, never "nothing filed since". NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAI…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_history Get Shares-Outstanding and Cash History ~468
Get the historical shares-outstanding and cash series from SEC XBRL filings, with offering and material-cash-event overlays so an issuance or a raise can be lined up against the share count and cash balance around it. Use for share count growth over time and for the cash trajectory between financings. 🔴 THE HISTORICAL SHARE COUNTS ARE AS FILED — each point is on the split basis in force when it was reported and is NOT rebased to today, so a reverse split shows as a step and points either side of one are not directly comparable. Do not compute a growth rate across a split boundary from these raw points. A gap in the series means no filing supplied that period, not that the share count was unchanged. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status. Coverage is partial: `not_covered` means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of `meta.asOfDate`, from filings read through `meta.filingsThrough` — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and `requiredTier: "pro"`. That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_instruments Get Dilution Instrument Rows by Family ~1,172
Get ONE instrument family's rows with per-field SEC citations — each figure carries the accession number, filing date and the verbatim quoted sentence it was read from, so every number can be traced to a filing. Families: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings. One family per call — request the families you actually need rather than sweeping all ten. 🔴 ROW-LEVEL WITHHOLDING: `withheldRows` / `withheldRowCount` mean specific rows could NOT be verified and were blanked, so every family total in the response is a LOWER BOUND, not a complete figure. Say so — presenting a holed total as complete understates a named issuer's dilution. An empty rows array on a covered company is a measured "none found in the filings read"; an unavailable response is not. 🔴 STATUS `disputed` (warrants / convertibles / preferred / exchangeables) means the ISSUER'S LATEST FILING DISPUTES THE INSTRUMENT'S EXISTENCE OR VALIDITY and its financial statements do not carry it: the row is SHOWN and EXCLUDED from every total (`summary.disputedInstrumentCount` / `disputedInstrumentShares`) — report it as a disputed claim against the company, never as outstanding and never as retired. 🔴 `contingencyTrigger: "event_of_default"` marks an instrument that converts ONLY on an event of default; it is still outstanding and still COUNTED — say "converts only on an event of default", never that it is not dilutive. 🔴 ON `convertibles` ROWS `principalBasis` says HOW `principalOutstanding` was arrived at: `aggregate_only` / `fair_value_only` / `conflict` / `undisclosed_since_issue` mean the current balance is NOT MEASURED (principalOutstanding is null) — report `principalOriginal` as the ORIGINAL principal with the balance undisclosed, never as the current balance. `conversionBasis: "formula_unanchored"` means the conversion mechanism is disclosed but no price input exists, so no share count can be computed — the row is unquantified,…
| Name | Type | Req | Description |
|---|---|---|---|
| family | string | yes | Instrument family to return. One of: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings. |
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_performance Get Post-Offering Price Performance ~422
Get post-offering price performance: for each recorded offering, how the stock traded after it priced or closed. Use when assessing how the market has absorbed this issuer's past financings. 🔴 THIS IS HISTORY, NOT A FORECAST — it describes what happened after prior offerings and must never be phrased as an expectation, a price target or a prediction about a named company. An empty or unavailable series means no offering performance was measured, NOT that offerings had no effect and NOT that there were no offerings. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status. Coverage is partial: `not_covered` means THIS COMPANY HAS NOT BEEN ANALYSED YET, which is different from it having no dilution and different from an outage (an outage is a 5xx). Never report a company as having no dilution on the strength of an unavailable response. NULL, absent or withheld means NOT MEASURED — it NEVER means "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a MEASURED zero and defeats a null check, so decide from the accompanying availability/withheld/reason field, never from the value itself. If a figure is absent, say it was not measured; do not describe the company as having none of that instrument. Figures are as of `meta.asOfDate`, from filings read through `meta.filingsThrough` — a stale as-of date means the answer predates anything filed since, not that nothing has happened. Share counts are rebased onto a single split basis; a row that cannot be rebased is omitted and counted rather than published on a mixed basis. Included in Signal8 Pro — without it the call returns 403 with code FEATURE_NOT_AVAILABLE and `requiredTier: "pro"`. That is a subscription-tier upgrade, not an add-on purchase; there is no separate add-on to buy.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_risk Get Dilution Pressure Score and Risk Levels ~1,667
Get the dilution pressure score: a 0-100 score with its seven-component breakdown (shelf capacity, ATM/equity-line capacity, warrants in the money, convertible proximity, cash burn urgency, historical dilution, toxic financing), plus four risk levels — overall, offering ability, overhead supply, cash need. When the filings state no current share count, components that need the share count or market cap (warrants in the money, shelf / ATM capacity) are scored on the best-estimate share count — `details.sharesOutstandingEstimate` {shares, kind, asOf, source} and `details.marketCapSource: "derived_price_x_estimated_os"` say so; report those components as resting on an estimate. 🔴 THE SCORE IS MEANINGLESS WITHOUT `scoreMaxMeasured` AND `scoreWithheldReason`: components whose inputs could not be measured are DROPPED FROM THE DENOMINATOR, so a score of 58 may be 58 out of 85, not out of 100. Always report it as `score`/`scoreMaxMeasured` and name the excluded components from `scoreUnmeasuredComponents`; NEVER rescale it to /100, and never treat a low numerator as a low-risk finding. When `scoreDenominatorThin` is true the score rests on fewer than 70 measured points — report it as a PARTIAL reading ("N of M measured"), never as a full one. A non-null `scoreWithheldReason` (e.g. `no_dilution_snapshot`) means there is NO score — not a score of zero. 🔴 WHEN `levelsAreLowerBound` IS TRUE THE LEVELS ARE FLOORS, NOT MEASUREMENTS: a "medium" then means AT LEAST medium. State it as a lower bound; presenting a floor as a measurement understates the risk of a named issuer. `levelsLowerBoundScope` names WHICH levels are floors and ONLY those carry the at-least qualifier; `levelsLowerBoundReason` says why: `unquantified_live_instruments` (instruments that could not be sized were excluded — floors `overall` + `overheadSupply`), `offering_capacity_unknown` (a live shelf/ATM/equity line/registration states no remaining capacity) or `market_cap_unmeasured` (no market cap to compare ca…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_dilution_snapshot Get Dilution Snapshot Summary ~776
Get the dilution snapshot header (the heaviest dilution call): summary totals (potential new shares and their percentage of shares outstanding, per-family share totals), the cash position (anchor cash, monthly burn, estimated current cash, runway months), the float block, and `meta` provenance. DOES NOT INCLUDE INSTRUMENT ROWS — call get_dilution_instruments per family for those, and call get_dilution_coverage first to avoid a wasted call on an uncovered ticker. 🔴 FLOAT: a declined float block (`available: false`) carries the read tier's `reason` and, when the extraction recorded a veto, a `refusal` object whose `withheldReason` is the exact value get_float serves — read that, not the bare reason, when reconciling the two. 🔴 FLOAT: when `floatWithheldReason` is non-null the tradeable float was NOT MEASURED and must not be stated as a number. `tradeableFloatCeiling` is an UPPER BOUND ("at most X"), NOT a float — never feed it to a market capitalisation, a percent-of-float, a short-interest ratio or a comparison; say in words that the float is at most that figure (a bound) — never print it as a bare number and never with a ~ / ≤ / ≥ glyph (2026-10-18). 🔴 BOUNDED TOTALS: a null share total (`potentialNewShares`, `totalWarrantShares`, `totalConvertibleShares`, `totalEquityPlanShares`, `totalExchangeableShares`, and `potentialDilutionPercent`) may sit beside `<key>Bound: "ceiling"`, `<key>Ceiling` and `<key>Floor`: some rows could not be placed on one split basis, but they can add at most a provably small amount. Report the ceiling as "at most X" and the floor as the measured part — NEVER the ceiling as the measured total, and never feed it to a ratio or comparison as if measured. The null key itself still means not measured. 🔴 RUNWAY: a runway figure beside `goingConcern: true` is a contradiction the issuer's own auditors have flagged — report both, never the runway alone. ALWAYS RETURNS 200 — read `available` and `reason`, never the HTTP status. Coverage is partia…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "MNTS", "VNRX") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_donor_aggregates Get Donor Aggregates ~159
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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' |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_earnings Get Earnings History ~88
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of earnings periods to return (1-40). Defaults to 8. |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_earnings_calendar Get Earnings Calendar ~172
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.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | yes | 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 | yes | End date inclusive (YYYY-MM-DD) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_economic_calendar Get Economic Calendar ~120
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.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | Optional ISO-3166 alpha-2 country code (e.g. "US", "GB", "JP") |
| from | string | yes | Start date inclusive (YYYY-MM-DD) |
| to | string | yes | End date inclusive (YYYY-MM-DD) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_etf_bundle Get ETF Bundle ~158
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).
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | ETF ticker symbol (e.g., SPY, QQQ, IWM) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_executives Get Company Executives ~58
Get key executives and officers of a company including name, title, compensation, and tenure. Use when researching company leadership or management quality.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_exhibit_content Get Exhibit Content ~143
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 with get_filing_documents (`exhibitId`, by accession number) or get_filing_exhibits (by filing ID), or from search_filing_text matches (`exhibit_id`).
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Exhibit ID (numeric). Find via get_filing_exhibits. |
| maxLength | number | – | Truncate content to this many characters. Response includes a "truncated" boolean. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_calendar Get SEC Filing Calendar ~140
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).
| Name | Type | Req | Description |
|---|---|---|---|
| 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") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_document Get Filing Document ~391
Get the full raw text/HTML content of an SEC filing by its internal filing ID (the `id` on search_sec_filings rows, `filingId` from lookup_accession_number or get_filing_documents). 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. Record-only filings (bodyStored: false) have no body here — open them on sec.gov. To read one exhibit rather than the whole submission, use get_filing_documents or get_filing_exhibits, then get_exhibit_content. For Form 3/4/5, 13F and SCHEDULE 13D/G, get_filing_structured returns parsed fields instead of XML. Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archive only holds filings from its `archiveFrom` date; before that it holds only a scatter (well under 1% of most years), so ABSENCE BEFORE archiveFrom IS NOT EVIDENCE a filing was never filed — check SEC EDGAR for earlier periods. Some rows are record-only (bodyStored: false — metadata from the EDGAR index with no document body), so their text cannot be read here; open them at their sec.gov URL.
| Name | Type | Req | Description |
|---|---|---|---|
| filingId | string | yes | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_documents Get Filing Documents ~442
List EVERY document in one SEC filing by accession number — the primary document, each exhibit, XML and XBRL files, graphics — with seq, type (e.g. "8-K", "EX-99.1"), description, size in bytes, `stored` and `secUrl`. Also returns the filing's cik, companyName, formType, filingDate, acceptedAt, bodyStored, primaryDocument, indexUrl, and `filingId`. HOW TO READ A DOCUMENT: if it has an `exhibitId`, call get_exhibit_content with that id; for the whole submission text call get_filing_document with `filingId`. `exhibitId: null` means the document has no readable text row here (XML/XBRL/graphics, or text not held) — open its `secUrl`. When `readableIdsResolved` is false the id lookup failed and exhibitId is omitted (not "none"); get_filing_exhibits(filingId) lists them. `stored: false` means Signal8 holds the filing record but not that document's body — it exists on EDGAR at `secUrl`. A filing not held in the archive returns a not-found error; its documents are still on EDGAR. Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archive only holds filings from its `archiveFrom` date; before that it holds only a scatter (well under 1% of most years), so ABSENCE BEFORE archiveFrom IS NOT EVIDENCE a filing was never filed — check SEC EDGAR for earlier periods. Some rows are record-only (bodyStored: false — metadata from the EDGAR index with no document body), so their text cannot be read here; open them at their sec.gov URL.
| Name | Type | Req | Description |
|---|---|---|---|
| accessionNumber | string | yes | SEC accession number, dashed ("0001193125-22-010026") or 18-digit compact form |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_exhibits Get Filing Exhibits ~114
List the readable exhibits (individual documents with stored text) within an SEC filing, by internal filing ID. Returns each exhibit's `id`, exhibit type, description, content size and sec_url. Use the `id` with get_exhibit_content. Excludes XML/XBRL. For the COMPLETE document list of a filing by accession number (including files with no stored text), use get_filing_documents.
| Name | Type | Req | Description |
|---|---|---|---|
| filingId | string | yes | Internal filing ID (numeric). Find via search_sec_filings. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_filing_structured Get Structured Filing Data ~664
Parsed, machine-readable data from an ownership or holdings filing, by accession number. `kind` says which: "ownership" (Form 3/4/5 and amendments) — issuer, reporting owners with relationship (director, officer title, 10% owner, or the filer's own "Other" text), and `parsed.transactions` (one row per transaction: table nonDerivative/derivative, securityTitle, transactionDate, code, acquiredDisposed A/D, shares, pricePerShare, sharesOwnedAfter, ownership D/I, and for derivatives exercisePrice, exerciseDate, expirationDate, underlyingTitle, underlyingShares); "thirteen_f" (13F-HR) — period, holdings with cusip, issuer, shares/principal, put/call, discretion and voting; "schedule13" (XML SCHEDULE 13D/G, filed 2025 onward) — reporting persons, percent of class, items. 13F VALUES: `valueThousands` is the raw filed number; the SEC changed its unit from thousands of dollars to whole dollars for filings on/after 2023-01-03, so use `valueUsd` / `totalMarketValueUsd` (normalised to dollars; null when the unit cannot be determined) and `valueUnit`. Holdings are capped at holdingsLimit (default 200) — `holdingsTotal` is the full count and `holdingsTruncated` says whether rows were cut. NULL MEANS NOT STATED IN THE FILING, never zero (e.g. a gift or grant with no price has pricePerShare null; Form 4 `directShares` is null on a derivative-only filing). `parsed.transactions` ABSENT (not empty) means the transaction table could not be read — the totals still apply. `parsed: null` on a 13F means the filing has no information table (e.g. 13F-NT), not zero holdings. Unsupported forms, pre-2025 Schedule 13D/G (not XML), and filings not in the archive return a not-found error whose `details.reason` says which — read those with get_filing_document instead. Coverage: Signal8's archive of SEC EDGAR filings in the archive's held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in), updated through the day. The archiv…
| Name | Type | Req | Description |
|---|---|---|---|
| accessionNumber | string | yes | SEC accession number of a Form 3/4/5, 13F-HR or SCHEDULE 13D/G, dashed or 18-digit compact form |
| holdingsLimit | integer | – | 13F only: max holdings rows to return (default 200, max 5000) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_financials Get Financial Statements ~124
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of periods to return (1-40). Defaults to 8. |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| type | string | – | Financial period type: "annual", "quarter", or "ttm" (trailing twelve months). Defaults to annual. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_float Get Float Data ~2,711
Get float data for a company: floatShares, floatDefinition, as-of date, and — when the headline float is WITHHELD — the bounds and labelled stand-ins that replace it. Use when analyzing share supply. The share count the float was judged against (`basisSharesOutstanding`) is DATED: `sharesOutstandingAsOf` + `sharesOutstandingAsOfKind` ("stated" / "checked" / "none" = date not recorded) and a vendor-free `sharesOutstandingSource`; never present the count without its date. CARDINAL RULE: null / absent / withheld means NOT MEASURED — never "no float", never "no restricted shares", never zero. A numeric 0 is a MEASURED zero and passes a null check, so decide from the reason/marker field ("floatWithheldReason", "restrictedBlockCount", "provenance", "direction"), never from the value alone. IMPORTANT: check "floatDefinition" to know which float you are reading — "tradeable" (shares outstanding minus affiliates minus restricted/unregistered blocks: what can actually reach the tape; used on filing-derived dilution-snapshot tickers), "non_affiliate" (the SEC I.B.6 figure, which INCLUDES restricted shares held by non-affiliates — not what a trader means by float), "non_affiliate_estimate" (approximated from ownership filings), or "free_float" (vendor methodology). TODAY "floatDefinition" and "source" are only present on dilution-snapshot results: a vendor-sourced float arrives with neither (just floatShares, asOfDate, floatEstimated) because vendors are not named — read an ABSENT floatDefinition as "not a filing-derived tradeable float" and do not assume it is tradeable. On snapshot tickers "nonAffiliateFloatShares" carries the SEC I.B.6 figure separately — it is the ONLY correct input to baby-shelf / I.B.6 shelf-capacity math; never use the tradeable float there, and never present the non-affiliate figure as tradeable supply. floatShares:null with "floatWithheldReason" set ("restricted_blocks_unnetted" | "stated_figure_impossible" | "affiliate_basis_stale" | "affiliate_figur…
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_float_history Get Float History ~217
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" ("computed" | "sec_10k" or a market-data vendor tier) because float quality varies by provider — weigh rows accordingly rather than treating all sources as equal. Charged per your API tier.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Lookback window in trade dates. Default 90, clamped to 1-730. |
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_historical_prices Get Historical Stock Prices ~196
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| to | integer | – | End date as UNIX timestamp (overrides period) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_cluster_buys Get Insider Cluster Buys ~73
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.
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_cross_company Get Cross-Company Insider Trading ~290
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. Cluster buying is computed only for purchases (transactionType P, the default). Useful for detecting coordinated insider activity, cross-company insider networks, and market-wide buying/selling trends.
| Name | Type | Req | Description |
|---|---|---|---|
| endDate | string | – | End date, YYYY-MM-DD (e.g., "2025-12-31"); a full ISO timestamp is cut to its date. |
| 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, YYYY-MM-DD (e.g., "2025-01-01"); a full ISO timestamp is cut to its date. Either bound may be given alone. An unparseable date is rejected, never ignored. |
| transactionType | string | – | Filter by transaction type: "P" (purchase), "S" (sale), "A" (grant/award), "M" (conversion) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_positions Get Insider Positions ~139
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the insider OR the issuer (company). Tried as issuer first, then falls back to insider. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_positions_by_ticker Get Insider Positions by Ticker ~220
Get per-insider position aggregates for a given ticker — which insiders hold positions in the stock and their aggregate cost/value. Derived from Form 4 filings. NOT LIFETIME: every figure covers only the Form 4 history Signal8 holds, which starts at the response's `coverageStart` date (also repeated on each row) — say "since <coverageStart>", never "lifetime" or "all-time". Each row carries `costBasisStatus`: `complete` (every share the history knows was bought inside coverage), `partial` (the holding predates coverage, so `weightedAvgCost` averages only in-coverage priced buys and is NOT the cost of the position), or `unknown` (the first in-coverage event was a sale, or there was no priced buy — `weightedAvgCost`/`costBasisTotal` are null, which means NOT MEASURED, never zero cost).
| Name | Type | Req | Description |
|---|---|---|---|
| ticker | string | yes | Stock ticker symbol (e.g., "AAPL", "TSLA") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insider_transactions Get Insider Transactions ~348
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. IMPORTANT: each row's sharesOwnedFollowing is the holding on THAT row's ownership line only (securityTitle + directOrIndirect + natureOfOwnership), NOT the insider's total position — insiders often report several lines. holdingsByInsider lists every line with its as-of filing; its sumOfReportedLines is not beneficial ownership (lines can be stale). Never compute a "% of position" from one row; use 13D/13G totals, or omit the percentage. A trade re-reported in a later filing is listed once.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | 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) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_insiders Get Insider Trading Intelligence ~182
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum results to return (default: 20, max: 100) |
| offset | integer | – | Offset for pagination (default: 0) |
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_activity Get Institution Activity ~72
Get an institution's position changes over recent 13F periods by CIK. Reads the number of trailing periods to include.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| periods | number | – | Number of trailing quarters to include (default: 4, max: 12) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_derivatives Get Institution Derivatives ~121
Get an institution's reported PUT/CALL derivative positions by CIK (13F options), with pagination and sorting.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | 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 |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_detail Get Institution Detail ~84
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_filings Get Institution Filings ~79
Get the list of 13F filings for an institution by CIK, with pagination.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| limit | number | – | Maximum results to return (default: 20, max: 50) |
| offset | number | – | Offset for pagination (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_holdings Get Institution Holdings ~101
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| limit | number | – | Maximum results to return (default: 20, max: 100) |
| offset | number | – | Offset for pagination (default: 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_portfolio_analytics Get Institution Portfolio Analytics ~43
Get sector allocation and top holdings analytics for an institution's portfolio by CIK.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | SEC CIK number of the institution |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_position_changes Get Institution Position Changes ~151
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | 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) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institution_top_aum Get Top Institutions by AUM ~142
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
get_institutions Get Institutional Holders ~112
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results to return (default: 20, max: 100) |
| offset | number | – | Offset for pagination (default: 0) |
| ticker | string | yes | Stock ticker symbol (e.g., AAPL, TSLA) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | – | – |
No examples provided.
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
claude mcp add ai-signal8-mcp -- npx -y @signal8ai/mcp
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.