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 · SCANNED SEP 20

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

+2 this week 85 Trust /100
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 122 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability79
  • 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 22189 tokens (~217/item across 102 items; 101 tools + 1 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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
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 101 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 103 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
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
// .cursor/mcp.json
{
  "mcpServers": {
    "ai-signal8-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@signal8ai/mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ai-signal8-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@signal8ai/mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add ai-signal8-mcp -- npx -y @signal8ai/mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-signal8-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@signal8ai/mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ai-signal8-mcp --command npx --arg -y --arg @signal8ai/mcp
# ~/.hermes/config.yaml
mcp_servers:
  ai-signal8-mcp:
    command: "npx"
    args: ["-y", "@signal8ai/mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ai-signal8-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@signal8ai/mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add ai-signal8-mcp -t stdio -c npx -a -y @signal8ai/mcp
// mcp.json
{
  "mcpServers": {
    "ai-signal8-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@signal8ai/mcp"
      ]
    }
  }
}
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.

  • 20 Sept 26 +16
    • Malware scan: unverified → pass security
    • Stability: 0.97 → pass security
  • 19 Sept 26 −15
    • Malware scan: pass → unverified security
    • Schema quality: 176 → 217 functional
    • Package version: 0.15.0 → 0.16.0 functional
  • 17 Sept 26 +1

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

  • 16 Sept 26 +2
    • CVE-2026-82417 no longer affects this package security
    • CVE-2026-82562 no longer affects this package security
    • Known CVEs: fail → pass security
  • 14 Sept 26 −2
    • Stability: pass → 0.80 functional
  • 13 Sept 26 0
    • Stability: 0.97 → pass security
  • 11 Sept 26 +1

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

  • 9 Sept 26 +1

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

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 20 Sept 2026 · Analysed npm/@signal8ai/mcp@0.16.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 122 packages
Packages resolved 122
Stale 39
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 101 exposed · ~21,921 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_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.

NameTypeReqDescription
tickerstringyesStock ticker symbol
NameTypeReqDescription
data

No examples provided.

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.

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

No examples provided.

get_analyst_coverage ~55

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

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

No examples provided.

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.

NameTypeReqDescription
limitintegerMaximum number of estimate periods to return (1-40). Defaults to 8.
periodstringEstimate period: "annual" (default) or "quarter".
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data

No examples provided.

get_analyst_grades ~83

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

NameTypeReqDescription
limitnumberMaximum results to return (default: 10, max: 50)
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data

No examples provided.

get_baby_shelf_capacity ~516

Get the SEC Form S-3 General Instruction I.B.6 "baby shelf" capacity (10 credits): 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. 🔴 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. A null remaining capacity is likewise not measured, not zero. 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. Requires the Dilution Snapshots add-on — without it the call returns 403 with code ADDON_REQUIRED, which…

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "MNTS", "VNRX")
NameTypeReqDescription
data

No examples provided.

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

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

No examples provided.

get_cash_position ~264

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. Requires the Dilution Snapshots add-on (403 ADDON_REQUIRED without it).

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

No examples provided.

get_cash_runway_calendar ~173

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.

NameTypeReqDescription
fromstringStart date (YYYY-MM-DD, default: today)
industrystringFilter by company industry (exact match, e.g. "Biotechnology")
limitnumberMaximum results to return (default: 25, max: 100)
offsetnumberOffset for pagination (default: 0)
tostringEnd date (YYYY-MM-DD, default: today + 90 days)
NameTypeReqDescription
data

No examples provided.

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.

NameTypeReqDescription
limitintegerMaximum number of clinical trials to return (1-50). Defaults to 10.
tickerstringyesStock ticker symbol (e.g., "MRNA", "PFE")
NameTypeReqDescription
data

No examples provided.

get_company_profile ~115

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

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

No examples provided.

get_compliance ~83

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

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

No examples provided.

get_dilution_coverage ~394

Cheap pre-check (1 credit) 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. 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. Requires the Dilution Snapshots add-on — without it the call returns 403 with code ADDON_REQUIRED, which is an add-on purchase requirement and is DISTINCT from a subscription-tier upgrade.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "MNTS", "VNRX")
NameTypeReqDescription
data

No examples provided.

get_dilution_history ~461

Get the historical shares-outstanding and cash series (10 credits) 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. Requires the Dilution Snapshots add-on — without it the call returns 403 with code ADDON_REQUIRED, which is an add-on purchase requirement and is DISTINCT from a subscription-tier upgrade.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "MNTS", "VNRX")
NameTypeReqDescription
data

No examples provided.

get_dilution_instruments ~546

Get ONE instrument family's rows (10 credits) 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. 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. Requires the Dilution Snapshots add-on — without it the call returns 403 with code ADDON_REQUIRED, which…

NameTypeReqDescription
familystringyesInstrument family to return. One of: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings.
tickerstringyesStock ticker symbol (e.g., "MNTS", "VNRX")
NameTypeReqDescription
data

No examples provided.

get_dilution_performance ~414

Get post-offering price performance (10 credits): 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. Requires the Dilution Snapshots add-on — without it the call returns 403 with code ADDON_REQUIRED, which is an add-on purchase requirement and is DISTINCT from a subscription-tier upgrade.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "MNTS", "VNRX")
NameTypeReqDescription
data

No examples provided.

get_dilution_risk ~598

Get the dilution pressure score (5 credits): 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. 🔴 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. A non-null `scoreWithheldReason` (e.g. `unmeasured_score_components`, `unquantified_live_instruments`, `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, because instruments that could not be quantified were excluded from the sum. State it as a lower bound; presenting a floor as a measurement understates the risk of a named issuer. 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.filingsThro…

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "MNTS", "VNRX")
NameTypeReqDescription
data

No examples provided.

get_dilution_snapshot ~532

Get the dilution snapshot header (25 credits — the most expensive tool here): 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 paying 25 credits for an uncovered ticker. 🔴 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; render it with a ≤ and say it is a bound. 🔴 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 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 publis…

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g., "MNTS", "VNRX")
NameTypeReqDescription
data

No examples provided.

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.

NameTypeReqDescription
chamberstringFilter by chamber: 'senate' or 'house'
cyclestringElection cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
partystringFilter by party: 'D', 'R', or 'I'
NameTypeReqDescription
data

No examples provided.

get_earnings ~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.

NameTypeReqDescription
limitintegerMaximum number of earnings periods to return (1-40). Defaults to 8.
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data

No examples provided.

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.

NameTypeReqDescription
fromstringyesStart date inclusive (YYYY-MM-DD)
maxMarketCapnumberMaximum market cap in USD (e.g., 2000000000 for under $2B)
minMarketCapnumberMinimum market cap in USD (e.g., 10000000000 for $10B+)
tickersarrayOptional ticker filter, e.g. ["AAPL","NVDA"]
tostringyesEnd date inclusive (YYYY-MM-DD)
NameTypeReqDescription
data

No examples provided.

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.

NameTypeReqDescription
countrystringOptional ISO-3166 alpha-2 country code (e.g. "US", "GB", "JP")
fromstringyesStart date inclusive (YYYY-MM-DD)
tostringyesEnd date inclusive (YYYY-MM-DD)
NameTypeReqDescription
data

No examples provided.

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

NameTypeReqDescription
includestringComma-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…
tickerstringyesETF ticker symbol (e.g., SPY, QQQ, IWM)
NameTypeReqDescription
data

No examples provided.

get_executives ~58

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

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

No examples provided.

get_exhibit_content ~113

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

NameTypeReqDescription
idstringyesExhibit ID (numeric). Find via get_filing_exhibits.
maxLengthnumberTruncate content to this many characters. Response includes a "truncated" boolean.
NameTypeReqDescription
data

No examples provided.

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

NameTypeReqDescription
formTypesarrayOptional SEC form types subset, e.g. ["10-Q"]
fromstringStart date inclusive (YYYY-MM-DD, default today)
tostringEnd date inclusive (YYYY-MM-DD, default today + 45d)
universestringOptional index-universe filter (default "all")
NameTypeReqDescription
data

No examples provided.

get_filing_document ~147

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

NameTypeReqDescription
filingIdstringyesInternal filing ID (numeric). Find via search_sec_filings.
maxLengthnumberTruncate content to this many characters. Useful for previewing large filings. Response includes a "truncated" boolean when truncation is applied.
NameTypeReqDescription
data

No examples provided.

get_filing_exhibits ~79

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

NameTypeReqDescription
filingIdstringyesInternal filing ID (numeric). Find via search_sec_filings.
NameTypeReqDescription
data

No examples provided.

get_financials ~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.

NameTypeReqDescription
limitintegerMaximum number of periods to return (1-40). Defaults to 8.
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
typestringFinancial period type: "annual", "quarter", or "ttm" (trailing twelve months). Defaults to annual.
NameTypeReqDescription
data

No examples provided.

get_float ~408

Get float data for a company: floatShares, source, floatDefinition, and as-of date. Use when analyzing share supply. 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). 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_figure_declined") means the figure was deliberately WITHHELD, not unavailable — do not substitute a vendor float. On "affiliate_basis_stale", "affiliateBasis.floatLowerBound" / "floatUpperBound" are a RANGE the float lies in (both ends or neither; null = not measurable) — a range to state, never a number to compute with. "restrictedShares":null means NOT MEASURED (a block exists whose size the filings do not state), NEVER zero; "restrictedBlockCount":0 is an answer, not an absence. "affiliateBasisStale" (with basisSpanDays/affiliateAnchorDate) labels a float whose affiliate table is materially older than its share count — the number itself is unchanged.

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

No examples provided.

get_float_history ~219

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

NameTypeReqDescription
daysintegerLookback window in trade dates. Default 90, clamped to 1-730.
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data

No examples provided.

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

NameTypeReqDescription
fromintegerStart date as UNIX timestamp (overrides period)
periodstringLookback period shorthand (default: "1Y"). Ignored if from/to are provided.
resolutionstringCandle resolution: "D" (daily, default), "W" (weekly), "M" (monthly)
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
tointegerEnd date as UNIX timestamp (overrides period)
NameTypeReqDescription
data

No examples provided.

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.

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

No examples provided.

get_insider_cross_company ~241

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

NameTypeReqDescription
endDatestringEnd date for transaction range in ISO format (e.g., "2025-12-31")
insiderNamestringFilter by insider name (partial match, e.g., "Musk" or "Cohen")
limitnumberMaximum results to return (default: 10, max: 100)
offsetnumberOffset for pagination (default: 0)
startDatestringStart date for transaction range in ISO format (e.g., "2025-01-01")
transactionTypestringFilter by transaction type: "P" (purchase), "S" (sale), "A" (grant/award), "M" (conversion)
NameTypeReqDescription
data

No examples provided.

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.

NameTypeReqDescription
cikstringyesSEC CIK number of the insider OR the issuer (company). Tried as issuer first, then falls back to insider.
NameTypeReqDescription
data

No examples provided.

get_insider_positions_by_ticker ~66

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

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

No examples provided.

get_insider_transactions ~239

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.

NameTypeReqDescription
limitnumberMaximum results to return (default: 20, max: 100)
monthintegerFilter by transaction month (1-12, requires year)
offsetnumberOffset for pagination (default: 0)
tickerstringyesStock ticker symbol (e.g., AAPL, TSLA)
transactionCodestringFilter 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.
yearintegerFilter by transaction year (e.g., 2025)
NameTypeReqDescription
data

No examples provided.

get_insiders ~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.

NameTypeReqDescription
limitintegerMaximum results to return (default: 20, max: 100)
offsetintegerOffset for pagination (default: 0)
tickerstringyesStock ticker symbol (e.g., AAPL, TSLA)
NameTypeReqDescription
data

No examples provided.

get_institution_activity ~72

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

NameTypeReqDescription
cikstringyesSEC CIK number of the institution
periodsnumberNumber of trailing quarters to include (default: 4, max: 12)
NameTypeReqDescription
data

No examples provided.

get_institution_derivatives ~121

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

NameTypeReqDescription
cikstringyesSEC CIK number of the institution
limitnumberMaximum results to return (default: 20)
offsetnumberOffset for pagination (default: 0)
periodstringFiling period to filter (e.g., "2025-Q1")
sortBystringColumn to sort by
sortOrderstringSort direction
NameTypeReqDescription
data

No examples provided.

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.

NameTypeReqDescription
cikstringyesSEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway)
NameTypeReqDescription
data

No examples provided.

get_institution_filings ~79

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

NameTypeReqDescription
cikstringyesSEC CIK number of the institution
limitnumberMaximum results to return (default: 20, max: 50)
offsetnumberOffset for pagination (default: 0)
NameTypeReqDescription
data

No examples provided.

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.

NameTypeReqDescription
cikstringyesSEC CIK number of the institution
limitnumberMaximum results to return (default: 20, max: 100)
offsetnumberOffset for pagination (default: 0)
NameTypeReqDescription
data

No examples provided.

get_institution_portfolio_analytics ~43

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

NameTypeReqDescription
cikstringyesSEC CIK number of the institution
NameTypeReqDescription
data

No examples provided.

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.

NameTypeReqDescription
cikstringyesSEC CIK number of the institution (e.g., "0001067983" for Berkshire Hathaway)
limitintegerMaximum results to return (default: 50, max: 100)
offsetintegerOffset for pagination (default: 0)
NameTypeReqDescription
data

No examples provided.

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

NameTypeReqDescription
limitnumberMaximum results to return (default: 25, max: 100)
minAumnumberMinimum AUM in USD to filter institutions (e.g., 1000000000 for $1B+)
offsetnumberOffset for pagination (default: 0)
NameTypeReqDescription
data

No examples provided.

get_institutions ~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.

NameTypeReqDescription
limitnumberMaximum results to return (default: 20, max: 100)
offsetnumberOffset for pagination (default: 0)
tickerstringyesStock ticker symbol (e.g., AAPL, TSLA)
NameTypeReqDescription
data

No examples provided.

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
limitnumberMaximum 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
extendedbooleanInclude 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_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
fromstringEarliest vote-window date inclusive (YYYY-MM-DD, default: today)
limitnumberMaximum results to return (default: 25, max: 100)
minRelevancestringMinimum market relevance: 'low' (default), 'medium', 'high', or 'none' (explicit opt-in to the full audit trail incl. non-market items — rarely useful)
offsetnumberPagination offset (default: 0)
tostringLatest vote-window date inclusive (YYYY-MM-DD, default: today + 14 days)
NameTypeReqDescription
data

No examples provided.

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 85 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 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 101 tools: search_companies, get_company_profile, get_quote, get_market_metrics, get_short_interest, and 96 more. Their descriptions and schemas cost roughly 21,921 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 20 September 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.