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

REMOTE · MCP.SIGNAL8.AI · 2 COMPONENTS

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

0 this week 92 Trust /100

Last scanned (11 hours ago)

Scores higher than 99% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Finance and Payments

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security89
Transport & Reachability100
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 45091 tokens (~186/item across 242 items; 113 tools + 129 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 113 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 115 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
What we tested

Checks we ran (13)

  • TLS certificate
  • Authorization
  • HTTPS
  • HSTS header
  • DNSSEC
  • Transport
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this hosted endpoint (2)

  • Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
  • Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.

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

Changelog

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

  • 5 Nov 26 0
    • Stability: 0.97 → pass security
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “get_accumulation_snapshot” rewrote its description, which is the text the model reads security
    • Tool “get_analyst_coverage” rewrote its description, which is the text the model reads security
    • Tool “get_analyst_estimates” rewrote its description, which is the text the model reads security
    • Tool “get_baby_shelf_capacity” rewrote its description, which is the text the model reads security
    • Tool “get_cash_history” rewrote its description, which is the text the model reads security
    • Tool “get_cash_position” rewrote its description, which is the text the model reads security
    • Tool “get_cash_runway_calendar” rewrote its description, which is the text the model reads security
    • Tool “get_clinical_trials” rewrote its description, which is the text the model reads security
    • Tool “get_company_profile” rewrote its description, which is the text the model reads security
    • Tool “get_compliance” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_coverage” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_history” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_instruments” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_performance” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_risk” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_snapshot” rewrote its description, which is the text the model reads security
    • Tool “get_donor_aggregates” rewrote its description, which is the text the model reads security
    • Tool “get_earnings” rewrote its description, which is the text the model reads security
    • Tool “get_ended_reverse_splits” rewrote its description, which is the text the model reads security
    • Tool “get_executives” rewrote its description, which is the text the model reads security
    • Tool “get_exhibit_content” rewrote its description, which is the text the model reads security
    • Tool “get_filing_document” rewrote its description, which is the text the model reads security
    • Tool “get_filing_documents” rewrote its description, which is the text the model reads security
    • Tool “get_filing_exhibits” rewrote its description, which is the text the model reads security
    • Tool “get_filing_structured” rewrote its description, which is the text the model reads security
    • Tool “get_financials” rewrote its description, which is the text the model reads security
    • Tool “get_float” rewrote its description, which is the text the model reads security
    • Tool “get_float_history” rewrote its description, which is the text the model reads security
    • Tool “get_historical_prices” rewrote its description, which is the text the model reads security
    • Tool “get_insider_cross_company” rewrote its description, which is the text the model reads security
    • Tool “get_insider_positions_by_ticker” rewrote its description, which is the text the model reads security
    • Tool “define_term” rewrote its description, which is the text the model reads security
    • Tool “get_analyst_consensus” rewrote its description, which is the text the model reads security
    • Tool “get_insider_transactions” rewrote its description, which is the text the model reads security
    • Tool “get_institution_derivatives” rewrote its description, which is the text the model reads security
    • Tool “get_institution_detail” rewrote its description, which is the text the model reads security
    • Tool “get_institution_position_changes” rewrote its description, which is the text the model reads security
    • Tool “get_institution_top_aum” rewrote its description, which is the text the model reads security
    • Tool “get_institutions_leaderboards” rewrote its description, which is the text the model reads security
    • Tool “get_intraday_bars” rewrote its description, which is the text the model reads security
    • Tool “get_learn_guide” rewrote its description, which is the text the model reads security
    • Tool “get_legislative_calendar” rewrote its description, which is the text the model reads security
    • Tool “get_market_breadth” rewrote its description, which is the text the model reads security
    • Tool “get_market_metrics” rewrote its description, which is the text the model reads security
    • Tool “get_market_news” rewrote its description, which is the text the model reads security
    • Tool “get_news” rewrote its description, which is the text the model reads security
    • Tool “get_ownership” rewrote its description, which is the text the model reads security
    • Tool “get_policy_events” rewrote its description, which is the text the model reads security
    • Tool “get_policy_trade_leaderboard” rewrote its description, which is the text the model reads security
    • Tool “get_policy_trade_overlap” rewrote its description, which is the text the model reads security
    • Tool “get_political_sector_rotation” rewrote its description, which is the text the model reads security
    • Tool “get_politician_committees” rewrote its description, which is the text the model reads security
    • Tool “get_politician_detail” rewrote its description, which is the text the model reads security
    • Tool “get_politician_disclosures” rewrote its description, which is the text the model reads security
    • Tool “get_politician_donor_summary” rewrote its description, which is the text the model reads security
    • Tool “get_politician_donors” rewrote its description, which is the text the model reads security
    • Tool “get_politician_late_filers” rewrote its description, which is the text the model reads security
    • Tool “get_politician_pnl” rewrote its description, which is the text the model reads security
    • Tool “get_politician_roles” rewrote its description, which is the text the model reads security
    • Tool “get_politician_scorecard” rewrote its description, which is the text the model reads security
    • Tool “get_post_earnings_movers” rewrote its description, which is the text the model reads security
    • Tool “get_premarket_scan_history” rewrote its description, which is the text the model reads security
    • Tool “get_premarket_scanner” rewrote its description, which is the text the model reads security
    • Tool “get_quote” rewrote its description, which is the text the model reads security
    • Tool “get_recent_congressional_votes” rewrote its description, which is the text the model reads security
    • Tool “get_recent_uplistings” rewrote its description, which is the text the model reads security
    • Tool “get_reverse_split_authority” rewrote its description, which is the text the model reads security
    • Tool “get_reverse_split_lifecycle” rewrote its description, which is the text the model reads security
    • Tool “get_reverse_splits_list” rewrote its description, which is the text the model reads security
    • Tool “get_rvol_history” rewrote its description, which is the text the model reads security
    • Tool “get_senate_trades_by_ticker” rewrote its description, which is the text the model reads security
    • Tool “get_short_interest” rewrote its description, which is the text the model reads security
    • Tool “get_split_history” rewrote its description, which is the text the model reads security
    • Tool “get_split_performance” rewrote its description, which is the text the model reads security
    • Tool “get_stock_price_change” rewrote its description, which is the text the model reads security
    • Tool “get_top_movers” rewrote its description, which is the text the model reads security
    • Tool “get_trading_halts” rewrote its description, which is the text the model reads security
    • Tool “get_upcoming_reverse_splits” rewrote its description, which is the text the model reads security
    • Tool “get_volume_profile” rewrote its description, which is the text the model reads security
    • Tool “lookup_accession_number” rewrote its description, which is the text the model reads security
    • Tool “screen_companies” rewrote its description, which is the text the model reads security
    • Tool “screen_must_raise” rewrote its description, which is the text the model reads security
    • Tool “screen_sec_filings” rewrote its description, which is the text the model reads security
    • Tool “screen_sec_filings_performance” rewrote its description, which is the text the model reads security
    • Tool “search_clinical_trials” rewrote its description, which is the text the model reads security
    • Tool “search_companies” rewrote its description, which is the text the model reads security
    • Tool “search_filing_text” rewrote its description, which is the text the model reads security
    • Tool “search_institutions” rewrote its description, which is the text the model reads security
    • Tool “search_learn_guides” rewrote its description, which is the text the model reads security
    • Tool “search_sec_filings” rewrote its description, which is the text the model reads security
    • “get_exhibit_content” reworded the description of “id” cosmetic
    • “get_filing_document” reworded the description of “filingId” cosmetic
    • “get_filing_exhibits” reworded the description of “filingId” cosmetic
    • “get_legislative_calendar” reworded the description of “minRelevance” cosmetic
    • “get_policy_trade_leaderboard” reworded the description of “sort” cosmetic
    • “get_policy_trade_overlap” reworded the description of “slug” cosmetic
    • “get_politician_pnl” reworded the description of “slug” cosmetic
    • “get_premarket_scan_history” reworded the description of “asOfTime” cosmetic
    • “get_premarket_scan_history” reworded the description of “baselineDays” cosmetic
    • “get_premarket_scan_history” reworded the description of “date” cosmetic
    • “get_premarket_scan_history” reworded the description of “includeNoHistory” cosmetic
    • “get_premarket_scan_history” reworded the description of “includeUnscreened” cosmetic
    • “get_premarket_scan_history” reworded the description of “minBaselineVolume” cosmetic
    • “get_premarket_scan_history” reworded the description of “minSessionVolume” cosmetic
    • “get_recent_uplistings” reworded the description of “dayOffset” cosmetic
    • “get_rvol_history” reworded the description of “asOfTime” cosmetic
    • “get_rvol_history” reworded the description of “baselineDays” cosmetic
    • “get_rvol_history” reworded the description of “session” cosmetic
    • “get_top_movers” reworded the description of “session” cosmetic
    • “screen_companies” reworded the description of “excludeHalted” cosmetic
    • “screen_companies” reworded the description of “maxCash” cosmetic
    • “search_clinical_trials” reworded the description of “phase” cosmetic
    • “search_filing_text” reworded the description of “exhibitTypes” cosmetic
    • “search_filing_text” reworded the description of “facets” cosmetic
    • “search_filing_text” reworded the description of “match” cosmetic
    • “search_filing_text” reworded the description of “matchedSections” cosmetic
    • “search_filing_text” reworded the description of “pattern” cosmetic
    • “search_filing_text” reworded the description of “section” cosmetic
    • “search_sec_filings” reworded the description of “companyTypes” cosmetic
    • “search_sec_filings” reworded the description of “cursor” cosmetic
    • “search_sec_filings” reworded the description of “exchanges” cosmetic
    • “search_sec_filings” reworded the description of “excludeForms” cosmetic
    • “search_sec_filings” reworded the description of “exhibitTypes” cosmetic
    • “search_sec_filings” reworded the description of “facets” cosmetic
    • “search_sec_filings” reworded the description of “foreignIssuer” cosmetic
    • “search_sec_filings” reworded the description of “formTypes” cosmetic
    • “search_sec_filings” reworded the description of “industries” cosmetic
    • “search_sec_filings” reworded the description of “items” cosmetic
    • “search_sec_filings” reworded the description of “match” cosmetic
    • “search_sec_filings” reworded the description of “matchedSections” cosmetic
    • “search_sec_filings” reworded the description of “maxFloat” cosmetic
    • “search_sec_filings” reworded the description of “maxMarketCap” cosmetic
    • “search_sec_filings” reworded the description of “maxPrice” cosmetic
    • “search_sec_filings” reworded the description of “minFloat” cosmetic
    • “search_sec_filings” reworded the description of “minMarketCap” cosmetic
    • “search_sec_filings” reworded the description of “minPrice” cosmetic
    • “search_sec_filings” reworded the description of “q” cosmetic
    • “search_sec_filings” reworded the description of “recentIpo” cosmetic
    • “search_sec_filings” reworded the description of “section” cosmetic
    • “search_sec_filings” reworded the description of “sectors” cosmetic
  • 4 Nov 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “define_term” rewrote its description, which is the text the model reads security
    • Tool “get_baby_shelf_capacity” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_coverage” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_history” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_instruments” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_performance” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_risk” rewrote its description, which is the text the model reads security
    • Tool “get_dilution_snapshot” rewrote its description, which is the text the model reads security
    • Tool “get_filing_document” rewrote its description, which is the text the model reads security
    • Tool “get_filing_documents” rewrote its description, which is the text the model reads security
    • Tool “get_filing_structured” rewrote its description, which is the text the model reads security
    • Tool “get_float” rewrote its description, which is the text the model reads security
    • Tool “get_intraday_bars” rewrote its description, which is the text the model reads security
    • Tool “get_learn_guide” rewrote its description, which is the text the model reads security
    • Tool “get_ownership” rewrote its description, which is the text the model reads security
    • Tool “get_politician_late_filers” rewrote its description, which is the text the model reads security
    • Tool “get_premarket_scan_history” rewrote its description, which is the text the model reads security
    • Tool “get_premarket_scanner” rewrote its description, which is the text the model reads security
    • Tool “get_reverse_split_authority” rewrote its description, which is the text the model reads security
    • Tool “get_reverse_split_lifecycle” rewrote its description, which is the text the model reads security
    • Tool “get_reverse_splits_list” rewrote its description, which is the text the model reads security
    • Tool “screen_companies” rewrote its description, which is the text the model reads security
    • Tool “screen_sec_filings” rewrote its description, which is the text the model reads security
    • Tool “search_filing_text” rewrote its description, which is the text the model reads security
    • Tool “search_learn_guides” rewrote its description, which is the text the model reads security
    • Tool “search_sec_filings” rewrote its description, which is the text the model reads security
    • Resource “Signal8 Stock Screeners: Movers, Halts and Dilution” was removed ▼ functional
    • Resource “Stocks Halted Today: Live Halt List and What Each Code Means” was removed ▼ functional
    • Resource “Upcoming Reverse Splits: The Next Two Weeks, Explained” was removed ▼ functional
    • Stability: pass → 0.97 functional
    • New resource “Congress Stock Trading Ban: Where It Stands” functional
    • New resource “How to Read the Reverse Split Calendar” functional
    • New resource “Signal8 Stock Screeners: Halts, Dilution and Delisting” functional
    • New resource “Why Stocks Get Halted and How to Find Today's Halts” functional
    • “get_dilution_instruments” reworded the description of “family” cosmetic
    • “get_intraday_bars” reworded the description of “extended” cosmetic
  • 3 Nov 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

    • Tool “get_split_history” rewrote its description, which is the text the model reads security
    • Tool “get_quote” rewrote its description, which is the text the model reads security
    • Tool “get_upcoming_reverse_splits” rewrote its description, which is the text the model reads security
    • Schema quality: 355 → 205 ▲ functional
    • New resource “13F Value vs AUM: Why a Fund's 13F Is Not Its Total Assets” functional
    • New resource “8-K Item Codes Explained: Items 1.01 to 9.01” functional
    • New resource “8-K vs 10-K: Event Report Within Four Business Days or the Audited Annual Report” functional
    • New resource “Adverse Financing Terms: MFN, Partitions, No Maturity” functional
    • New resource “At-the-market (ATM) offering” functional
    • New resource “Authorized Share Increases: Reading the Proxy Vote” functional
    • New resource “Authorized shares” functional
    • New resource “Baby Shelf Rule Explained: S-3 I.B.6 vs Form S-1” functional
    • New resource “Baby shelf rule” functional
    • New resource “Beneficial Ownership Blockers: 4.99% and 9.99% Caps” functional
    • New resource “Cash Runway: How to Calculate It From a 10-Q” functional
    • New resource “Cash runway” functional
    • New resource “Cashless exercise” functional
    • New tool “get_ended_reverse_splits” functional
    • New tool “get_reverse_split_authority” functional
    • New tool “get_reverse_splits_list” functional
    • New tool “get_split_performance” functional
  • 31 Oct 26 −1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 21 Oct 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 20 Oct 26 −1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 17 Oct 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 16 Oct 26 −1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

Diagnostics

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

Captured 5 Nov 2026 · Probed https://mcp.signal8.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=signal8.ai CN=WE1,O=Google Trust Services,C=US 11 Oct 2026 9 Jan 2027 ECDSA 256 ECDSA-SHA256 347a136f1a654b920efbad0024c768c6
SANs: signal8.ai, *.signal8.ai
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.signal8.ai. — Not signed

Zone DS Keys Algorithms Outcome
. Trust anchor 20326, 38696 8, 8 Verified
ai. DS published 1814, 3799 8, 8 Verified
signal8.ai. No DS Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://mcp.signal8.ai/.well-known/oauth-protected-resource/mcp"

Bearer resource_metadata="https://mcp.signal8.ai/.well-known/oauth-protected-resource/mcp"

Protected resource metadata

Document https://mcp.signal8.ai/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://mcp.signal8.ai/mcp
Authorisation server https://api.signal8.ai/

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.signal8.ai/mcp Verified 200
http (plaintext) http://mcp.signal8.ai/mcp HTTPS enforced 308 https://mcp.signal8.ai/mcp
MCP tools · 113 exposed · ~37,618 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
define_term ~220

Free: works without an API key or Pro plan (the hosted server only needs a signed-in account). Looks 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; the Academy guide search may still cover it.

NameTypeReqDescription
termstringyesTerm, alias or glossary slug, e.g. "baby shelf", "ATM", "full-ratchet".
NameTypeReqDescription
data–––

No examples provided.

get_accumulation_snapshot ~88

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

NameTypeReqDescription
tickerstringyesStock ticker symbol
NameTypeReqDescription
data–––

No examples provided.

get_analyst_consensus ~60

Get the analyst ratings consensus for a company: average target price, number of analysts, buy/hold/sell breakdown and consensus recommendation.

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

No examples provided.

get_analyst_coverage ~55

Get aggregated analyst coverage for a ticker: a 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 ~107

Get forward analyst estimates for a company: EPS, revenue, EBITDA and net income (low/high/avg) with analyst counts, for annual or quarterly periods.

NameTypeReqDescription
limitinteger–Maximum number of estimate periods to return (1-40). Defaults to 8.
periodstring–Estimate 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
limitnumber–Maximum results to return (default: 10, max: 50)
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
NameTypeReqDescription
data–––

No examples provided.

get_baby_shelf_capacity ~735

SEC Form S-3 General Instruction I.B.6 "baby shelf" capacity: how much the issuer may raise off an effective shelf now, under the one-third-of-public-float cap that applies below a $75M non-affiliate float, less trailing-twelve-month takedowns. Returns the float basis, the cap, takedowns counted and the remaining raisable amount. `constraintApplies: false`: the cap does not bind (float >= $75M, primary offerings unlimited under I.B.1); this is neither "no capacity" nor a favourable finding. `constraintApplies: null` with `suppressedReason: "float_unmeasured"`: the float value was not measured, so whether the cap binds is unknown; it does not mean the cap does not bind and does not mean unlimited. A `suppressed` figure is withheld (e.g. an issuer delisted to OTC cannot run an S-3 primary): the capacity is not stateable, which is not $0 raisable. `suppressedReason: "ib6_pool_unattributed"`: the cap applies but trailing sales could not all be attributed, so $0 is a lower bound; `remainingCapacity` is null and capacity lies between `capacityLowerBoundDollars` and `capacityUpperBoundDollars` (at most the upper bound). `remainingCapacityBasis: "lower_bound"`: the figure counts unattributed rows whole, so capacity is at least `remainingCapacity` and at most `capacityUpperBoundDollars`. `staleIssuerStatement`: the issuer's own $0 statement dated `asOf` was not used because sales its window counted have since left today's window; it is what the issuer stated as of that date, not today's capacity. `poolDerivations`: ATM periods split by differencing the issuer's own stated sub-periods, each with its accession. `suppressedReason: "issuer_not_ib6_limited"`: the issuer's current prospectus offers more than the cap with no I.B.6 limitation (`issuerUnlimitedOffer`); whether the cap applies is not measured, and is neither $0, constrained nor unlimited. `floatValueBasis: "issuer_stated"`: the issuer's own printed I.B.6 float (`issuerStatedFloat`, prospectus <= 60 days old) was lowe…

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

No examples provided.

get_cash_history ~99

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: available for any company with SEC filings.

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

No examples provided.

get_cash_position ~410

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. Returns HTTP 200 for unavailable data; the `available` and `reason` fields say why. Coverage is partial: `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). An unavailable response says nothing about whether the company has cash or runway. The `scenarios` envelope is kept 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 does not model speculative raises; shelf or ATM capacity is not a modelled raise. Currency: amounts are in the filer's reporting currency, which is not always USD (Canadian, European, Japanese and Chinese filers report in their own currency). Top-level `currency` is ISO 4217 (null = not determined), and `currencySource: "presumed_usd"` means no foreign-currency marker was found, not a measurement. Every money object is {usd, native: {amount, currency}}: `usd` (and scenarios.closed.estimatedCashUsd / adjustedEstimatedCashUsd / netCapitalRaisesUsd) is null when the block is not in USD, and nothing is converted, so `native.amount` is in `native.currency`, not dollars. monthsOfCashLeft is currency-neutral and stays populated. Included in Signal8 Pro: without it the call returns 403 FEATURE_NOT_AVAILABLE with `requiredTier: "pro"` (a tier upgrade; there is no add-on to buy).

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

No examples provided.

get_cash_runway_calendar ~278

Companies projected to run out of cash within a date window, a cash-depletion counterpart to a lockup expiration calendar. Returns companies sorted by urgency (lowest runway first). Runway is an estimate based on the current burn rate; actual depletion depends on future capital raises and operational changes. The 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, not a reported zero balance.

NameTypeReqDescription
fromstring–Start date (YYYY-MM-DD, default: today)
industrystring–Filter by company industry (exact match, e.g. "Biotechnology")
limitnumber–Maximum results to return (default: 25, max: 100)
marketstring–Listing market: "otc" (OTC Markets) or "exchange" (NASDAQ / NYSE / NYSE American / Arca / Cboe)
offsetnumber–Offset for pagination (default: 0)
tostring–End date (YYYY-MM-DD, default: today + 90 days)
NameTypeReqDescription
data–––

No examples provided.

get_clinical_trials ~248

Get the ClinicalTrials.gov trials Signal8 has matched to a company: phase, status, conditions, interventions and key dates. The list includes trials the company leads and trials where it is only a collaborator on another organisation's study. Each trial carries metadata.sponsorRole ("lead", "collaborator", or null = not determined) and metadata.sponsor (the lead sponsor). Only lead trials are the company's own pipeline; a collaborator trial is a trial run by the named lead sponsor that the company collaborates on. `sponsorRole: "lead"` filters to the company's own trials. The response's total, leadTotal and collaboratorTotal count the full list, so a total above the returned count means the list was truncated. Dates of type ESTIMATED are sponsor projections, not facts.

NameTypeReqDescription
limitinteger–Maximum number of clinical trials to return (1-50). Defaults to 10.
sponsorRolestring–Filter by the company's role: "lead" (its own trials), "collaborator", or "all" (default).
tickerstringyesStock ticker symbol (e.g., "MRNA", "PFE")
NameTypeReqDescription
data–––

No examples provided.

get_company_profile ~226

Get an enriched company profile by ticker symbol. Returns CIK, exchange, sector, industry, market cap, employee count, description, and other fundamental data in a lightweight response. Includes halted/haltCode/haltedAt trading-halt status on every call (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`. The count is only meaningful with its date. A null count means not measured; it does not mean zero. `cik: null` is a foreign issuer listed on US OTC that files nothing with the SEC (e.g. PGPHF): name, exchange and country come from reference data and every field Signal8 lacks is null.

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

No examples provided.

get_compliance ~147

Get full compliance rules evaluation for a company: Nasdaq/NYSE deficiency detection, bid price tracking, and delinquent filing detection, combining SEC filing data, market data and exchange rules. Rules cover bid price, equity, reverse-split limit, market value of publicly held shares, publicly held shares, holders, timely periodic filings, annual meeting and audit committee, per exchange tier. Standards that could not be judged from any measurement are listed in `notEvaluated`: they are neither passing nor failing. Neither a `notEvaluated` standard nor the absence of a deficiency notice is evidence of compliance.

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

No examples provided.

get_dilution_coverage ~402

Coverage pre-check for whether Signal8 holds a dilution analysis for a company (a lighter read than the full dilution payloads): 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. `outOfScope` is a statement about the product (dilution analysis covers small-cap issuers only) and says nothing about that company's dilution. `stale` means the analysis is real but predates recent filings; `statusDetail` refines it: `newer_filing_unread` (`unreadFilings` names the material filings since: new or amended instrument, 424B5 pricing, split, 10-K) or `delisting_filed` (`delistingFiled` names the Form 25/25-NSE/15). A stale analysis describes the company as it stood before that filing, not as of today. A null `unreadFilings` means not measured, not "nothing filed since". Returns HTTP 200 for unavailable data; the `available` and `reason` fields say why. `not_covered` means this company has not been analysed yet, not that it has no dilution; an outage is a 5xx. A null, absent or withheld value means the figure was not measured; it does not mean "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a measured zero, so availability is carried by the availability, withheld and reason fields, not by the value. Included in Signal8 Pro: without it the call returns 403 FEATURE_NOT_AVAILABLE with `requiredTier: "pro"` (a tier upgrade; there is no add-on to buy).

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

No examples provided.

get_dilution_history ~374

Historical shares-outstanding and cash series from SEC XBRL filings, with offering and material-cash-event overlays that line an issuance or a raise up against the share count and cash balance around it: share-count growth over time and 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 (a growth rate computed across a split boundary from these raw points is not meaningful). A gap in the series means no filing supplied that period, not that the share count was unchanged. Returns HTTP 200 for unavailable data; the `available` and `reason` fields say why. `not_covered` means this company has not been analysed yet, not that it has no dilution; an outage is a 5xx. A null, absent or withheld value means the figure was not measured; it does not mean "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a measured zero, so availability is carried by the availability, withheld and reason fields, not by the value. Figures are as of `meta.asOfDate`, from filings read through `meta.filingsThrough` (a stale date predates anything filed since). Share counts are on one 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 FEATURE_NOT_AVAILABLE with `requiredTier: "pro"` (a tier upgrade; there is no add-on to buy).

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

No examples provided.

get_dilution_instruments ~885

One instrument family's rows with per-field SEC citations (accession number, filing date and the verbatim sentence each figure was read from). Families: warrants, convertibles, preferred, shelfs, atms, elocs, s1_offerings, equity_plans, exchangeables, recent_offerings, rights; each call returns one family. `withheldRows` / `withheldRowCount`: rows that could not be verified were blanked, so every family total is a lower bound. An empty rows array on a covered company is a measured "none found in the filings read"; an unavailable response is not. `disputed` status (warrants / convertibles / preferred / exchangeables): the issuer's latest filing disputes the instrument; it is shown and excluded from totals (`summary.disputedInstrumentCount` / `disputedInstrumentShares`), and it is a disputed claim, neither outstanding nor retired. `contingencyTrigger: "event_of_default"`: the instrument is still outstanding and counted; it converts only on an event of default, which does not make it non-dilutive. Convertibles with `principalBasis` `aggregate_only` / `fair_value_only` / `conflict` / `undisclosed_since_issue`: the current balance is not measured (`principalOutstanding` null), and `principalOriginal` is the original principal, not the current balance. `conversionBasis: "formula_unanchored"`: no share count is computable, so the share count is unquantified, not zero. Convertibles / preferred `sharesIssuableBasis: "conflict_upper_bound"`: `sharesIssuableIfConverted` is an upper bound (up to that many shares) and `sharesIssuableIssuerStated` is the issuer's own count; the higher figure is not the issuer's count. Warrants with null `sharesUnderlying` beside `aggregateExerciseValueDollars` / `exercisePriceFloor` / `sharesCeilingAsFiled` are dollar-denominated or capped: `summary.warrantSharesCeiling` is a ceiling, not a count, and is not in `potentialNewShares`. `warrantCount` counts warrants, not shares. Shelfs: `babyShelfCurrentCapacityDollars` is a stored, dated figure, n…

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

No examples provided.

get_dilution_performance ~330

Post-offering price performance: for each recorded offering, how the stock traded after it priced or closed, i.e. how the market absorbed this issuer's past financings. This is history, not a forecast: it describes what happened after prior offerings and is not an expectation, a price target or a prediction about the 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. Returns HTTP 200 for unavailable data; the `available` and `reason` fields say why. `not_covered` means this company has not been analysed yet, not that it has no dilution; an outage is a 5xx. A null, absent or withheld value means the figure was not measured; it does not mean "no dilution", "no warrants", "no shelf" or zero. A numeric 0 is a measured zero, so availability is carried by the availability, withheld and reason fields, not by the value. Figures are as of `meta.asOfDate`, from filings read through `meta.filingsThrough` (a stale date predates anything filed since). Share counts are on one 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 FEATURE_NOT_AVAILABLE with `requiredTier: "pro"` (a tier upgrade; there is no add-on to buy).

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

No examples provided.

get_dilution_risk ~1,001

Dilution pressure score: 0-100 with a 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. Score: components whose inputs could not be measured are dropped from the denominator, so `score` is out of `scoreMaxMeasured`, not out of 100 (58 may be 58 out of 85), and `scoreUnmeasuredComponents` names the excluded components. A low numerator over a reduced denominator is not a low-risk reading. `scoreDenominatorThin: true` (under 70 measured points) marks a partial reading (N of M measured). A non-null `scoreWithheldReason` (e.g. `no_dilution_snapshot`) means there is no score, not a score of zero. With no filed share count, the share-count and market-cap components rest on `details.sharesOutstandingEstimate` {shares, kind, asOf, source}, and `details.marketCapSource` is `"derived_price_x_estimated_os"`: those components rest on an estimate. Levels: when `levelsAreLowerBound` (always present) is true, the levels named in `levelsLowerBoundScope` are a lower bound (floors), not measurements: "medium" means at least medium. Levels outside that scope are measured. `levelsLowerBoundReason` determines which levels are floored: `unquantified_live_instruments` floors overall and overheadSupply; `offering_capacity_unknown` and `market_cap_unmeasured` floor overall and offeringAbility, not `overheadSupply`; `os_growth_span_short`, `os_growth_issuance_floor` and `os_growth_rebased_partial` floor historical and overall; `overhead_capacity_unquantified` floors overheadSupply and overall. `details.levelBounds` per level: `floor` (unsized instruments at zero), `ceiling` (at filed maximum; null when some instrument has none), `exact`, `bestEstimate`, `estimated`, `estimateBasis`. An estimated level is a best estimate between its floor and ceiling, not a measurement. A null `overall` with a n…

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

No examples provided.

get_dilution_snapshot ~874

Dilution snapshot header (the largest dilution payload): summary totals (potential new shares, their % of shares outstanding, per-family totals), the cash position (anchor cash, monthly burn, estimated current cash, runway months), the float block, and `meta` provenance. Instrument rows are not included. Cash is in the filer's reporting currency: `cashPosition.currency` is ISO 4217 (null = not determined), and `cashPosition.currencySource: "presumed_usd"` is a presumption, not a measurement. Runway months are currency-neutral. Float: a non-null `floatWithheldReason` means the tradeable float was not measured, and no float figure is stated. A declined float block (`available: false`) may carry `refusal.withheldReason`, the same value the standalone float data serves. `tradeableFloatCeiling` is an upper bound, not a float: the float is at most that figure, and the ceiling is not an input to a market capitalisation, percent-of-float, short-interest ratio or comparison. Bounded totals: a null total (`potentialNewShares`, `totalWarrantShares`, `totalConvertibleShares`, `totalEquityPlanShares`, `totalExchangeableShares`, `totalRightsShares`, `potentialDilutionPercent`) may sit beside `<key>Bound: "ceiling"`, `<key>Ceiling` and `<key>Floor`: the total is at most the ceiling, the floor is the measured part, and the ceiling is not the total. With `potentialDilutionPercentBoundReason: "stated_count_denominator"` there is no floor: the ceiling divides by the last stated share count (as of `potentialDilutionPercentCeilingShareCountAsOf`), so the figure is at most that percentage against the count stated as of that date. `notMeasuredReasons[]` ({field, code, text, detail, expected {form, dueDate, status}}) gives the reason a figure is null; it is an explanation, not a value. `expectedFilings[]` lists the next periodic report(s): `status: "late"` means due by `dueDate` with none on file as of `checkedOn` and carries no information about why; `dueDate: null` means not computed. A…

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

No examples provided.

get_donor_aggregates ~144

Get market-wide campaign-finance rollups across every tracked politician for a cycle: total raised, top 10 individual donors, top 10 PACs, party/chamber/cycle splits, and a most-funded politician leaderboard. Answers questions like "who are the biggest donors in 2024?" or "which party raised more?".

NameTypeReqDescription
chamberstring–Filter by chamber: 'senate' or 'house'
cyclestring–Election cycle as 4-digit year (e.g. "2024"). Defaults to most recent cycle.
partystring–Filter by party: 'D', 'R', or 'I'
NameTypeReqDescription
data–––

No examples provided.

get_earnings ~80

Get historical earnings data for a company: EPS actual vs estimate, revenue actual vs estimate, and surprise percentages (beats and misses).

NameTypeReqDescription
limitinteger–Maximum 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)
maxMarketCapnumber–Maximum market cap in USD (e.g., 2000000000 for under $2B)
minMarketCapnumber–Minimum market cap in USD (e.g., 10000000000 for $10B+)
tickersarray–Optional 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
countrystring–Optional 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_ended_reverse_splits ~740

Reverse-split episodes across companies that ended without the split taking effect, from Signal8's SEC-filing tracker: outcome "vote_failed" (shareholders did not approve), "abandoned" (the company said it will not proceed), "authority_expired" (an approval lapsed unused past its stated deadline) or "postponed_indefinitely". Splits that did happen are not in this list, and it is cross-company rather than one company's full history. Newest end first. Each row is the Reverse Splits page row (ticker, companyName, hasPage, ratio / ratioMin / ratioMax, trackerState, meetingDate, approvedDate, exchange, securityType, marketCapUsd, cik, approvalPath, domicile, splitAuthority, authorityTerms, verification) plus sourceUrl / sourceAccession and sourceDocuments (every document behind the episode, each with accession or URL) and an "ended" block: outcome, outcomeLabel, endedOn, endedOnBasis, closedReason (the tracker's own note, verbatim), voteDate, closingAccession / closingUrl (the filing that closed it, when one did). endedOnBasis says what endedOn is: "vote_date" or "meeting_date" = the vote as stated; "authority_expiry" = the stated last day of the authority; "closing_filing" = the ET day of the filing that closed it; "recorded" = none of those, the day the tracker recorded the close, which can be later than the event. Null means not measured or not stated. An empty list is what the tracker has on file for the window, not evidence that no company abandoned a split; completeness "tracked_episodes" = what the tracker has read from filings since it started, not every company. boundReached: true = the window held more episodes than one read returns (a narrower from / to window returns the rest). Locked rows are withheld, not absent. The facts are part of Signal8 Pro: a key not owned by a Pro account gets rows with locked: true and only ticker, companyName, hasPage and exchange (access "preview", lockedCount); a locked row means the facts were withheld from this caller. outcom…

NameTypeReqDescription
cursorstring–nextCursor from the previous page. Omit for the first page.
exchangearray–Listing venues to keep: NASDAQ, NYSE, AMEX (NYSE American), OTC, or not_measured. Empty = every row.
fromstring–Earliest endedOn, YYYY-MM-DD (default: 365 days before "to").
limitinteger–Rows per page, 1 to 200 (default 50).
outcomearray–Outcomes to keep: vote_failed, abandoned, authority_expired, postponed_indefinitely. Empty = all four.
tostring–Latest endedOn, YYYY-MM-DD (default: today, US Eastern).
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
includestring–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…
tickerstringyesETF ticker symbol (e.g., SPY, QQQ, IWM)
NameTypeReqDescription
data–––

No examples provided.

get_executives ~49

Get the key executives and officers of a company: name, title, compensation and tenure.

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

No examples provided.

get_exhibit_content ~141

Get the full text/HTML content of a single exhibit from an SEC filing, by exhibit id. Returns the exhibit text along with exhibit_type, description, company_name, accession_number, and form_type. maxLength truncates large exhibits. Exhibit ids appear as `exhibitId` in a filing's document list, as `id` in a filing's exhibit list, and as `exhibit_id` on full-text search matches.

NameTypeReqDescription
idstringyesExhibit ID (numeric), as listed for the filing's exhibits.
maxLengthnumber–Truncate 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
formTypesarray–Optional SEC form types subset, e.g. ["10-Q"]
fromstring–Start date inclusive (YYYY-MM-DD, default today)
tostring–End date inclusive (YYYY-MM-DD, default today + 45d)
universestring–Optional index-universe filter (default "all")
NameTypeReqDescription
data–––

No examples provided.

get_filing_document ~297

Get the full raw text/HTML content of an SEC filing by its internal filing ID (the `id` on filing search rows, or `filingId` from an accession-number lookup or a filing's document list). Returns the complete filing document, which can be very large (10-K filings can be 1MB+); maxLength truncates 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; the document is on sec.gov. Content is the whole submission as filed. Coverage: Signal8's SEC EDGAR archive, updated through the day, in its held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in). Before archiveFrom it holds only a scatter, so absence before archiveFrom is not evidence a filing was never filed; SEC EDGAR itself covers earlier periods. Record-only rows (bodyStored: false) have no stored body; the document is at its sec.gov URL.

NameTypeReqDescription
filingIdstringyesInternal filing ID (numeric), the `id` on filing search rows.
maxLengthnumber–Truncate 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_documents ~380

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`. A document with an `exhibitId` has readable stored text under that exhibit id; `filingId` identifies the whole submission text. `exhibitId: null` means the document has no readable text row here (XML/XBRL/graphics, or text not held); its `secUrl` still opens it. When `readableIdsResolved` is false the id lookup failed and exhibitId is omitted (unknown, not "none"). `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 SEC EDGAR archive, updated through the day, in its held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in). Before archiveFrom it holds only a scatter, so absence before archiveFrom is not evidence a filing was never filed; SEC EDGAR itself covers earlier periods. Record-only rows (bodyStored: false) have no stored body; the document is at its sec.gov URL.

NameTypeReqDescription
accessionNumberstringyesSEC accession number, dashed ("0001193125-22-010026") or 18-digit compact form
NameTypeReqDescription
data–––

No examples provided.

get_filing_exhibits ~97

List the readable exhibits (individual documents with stored text) within an SEC filing, by internal filing ID. Returns each exhibit's `id` (the exhibit id for reading that exhibit's text), exhibit type, description, content size and sec_url. Excludes XML/XBRL and documents with no stored text.

NameTypeReqDescription
filingIdstringyesInternal filing ID (numeric), the `id` on filing search rows.
NameTypeReqDescription
data–––

No examples provided.

get_filing_structured ~593

Parsed, machine-readable data from an ownership or holdings filing, by accession number. `kind`: "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` (per transaction: table nonDerivative/derivative, securityTitle, transactionDate, code, acquiredDisposed A/D, shares, pricePerShare, sharesOwnedAfter, ownership D/I; derivatives add 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, 2025 onward): reporting persons, percent of class, items. 13F VALUES: `valueThousands` is the raw filed number, whose unit changed from thousands to whole dollars for filings on/after 2023-01-03; `valueUsd` / `totalMarketValueUsd` are normalised to dollars (null when the unit cannot be determined) and `valueUnit` names the unit. Holdings are capped at holdingsLimit (default 200); `holdingsTotal` is the full count, `holdingsTruncated` says whether rows were cut. A null value means not stated in the filing; it does not mean zero (a gift with no price has pricePerShare null; `directShares` is null on a derivative-only Form 4). `parsed.transactions` absent (not empty) means the table could not be read; totals still apply. `parsed: null` on a 13F means no information table (e.g. 13F-NT), not zero holdings. Unsupported forms, pre-2025 Schedule 13D/G and filings not in the archive return a not-found error with `details.reason`; their raw text remains readable as a filing document. Coverage: Signal8's SEC EDGAR archive, updated through the day, in its held range (see `archiveFrom` in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in). Before archiveFrom it holds only a scatter, so absence before archiveFrom is not evidence a filing was never filed; SEC ED…

NameTypeReqDescription
accessionNumberstringyesSEC accession number of a Form 3/4/5, 13F-HR or SCHEDULE 13D/G, dashed or 18-digit compact form
holdingsLimitinteger–13F only: max holdings rows to return (default 200, max 5000)
NameTypeReqDescription
data–––

No examples provided.

get_financials ~119

Get income statement, balance sheet and cash flow data for a company (revenue, profitability, debt, cash position), in annual, quarterly or trailing-twelve-month views.

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

No examples provided.

get_float ~1,227

Get float data for a company: floatShares, floatDefinition, the as-of date and, when the headline float is withheld, the bounds and labelled stand-ins that replace it. Null, absent or withheld means not measured; it does not mean "no float", "no restricted shares" or zero. A numeric 0 is a measured zero, so the reason and marker fields ("floatWithheldReason", "restrictedBlockCount", "provenance", "direction") carry the verdict, not the value alone. The share count the float was judged against ("basisSharesOutstanding") is dated by "sharesOutstandingAsOf" and "sharesOutstandingAsOfKind" ("stated", "checked", or "none" = date not recorded) and "sharesOutstandingSource". "floatDefinition": "tradeable" (shares outstanding minus affiliates minus restricted/unregistered blocks; filing-derived snapshot tickers), "non_affiliate" (the SEC I.B.6 figure, which includes restricted shares held by non-affiliates and is not a trader's float), "non_affiliate_estimate" (from ownership filings), "free_float" (vendor). "floatDefinition" and "source" appear only on snapshot results; an absent floatDefinition means the figure is not a filing-derived tradeable float. "nonAffiliateFloatShares" (snapshot tickers) is the input that baby-shelf / I.B.6 math rests on; it is not tradeable supply, and the tradeable float is not an I.B.6 input. Precedence: when the snapshot carries any figure ("floatEstimate", "tradeableFloatCeiling", an "affiliateBasis" range), "floatShares" stays null and that figure is the answer. A lower tier fills "floatShares" (its own "source" and definition, with "snapshotFloatWithheldReason" as provenance context, not a second refusal) only when the snapshot has no figure, or its only figure is a trivial ceiling (at or above 99% of the share count), which is stripped. Floors, points, every "shares_outstanding_ceiling" and an "affiliate_sizing_estimate" (with its "reason" and "unsizedAffiliates") are kept. A lower tier that also answered appears as "otherSourceFloat" {fl…

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

No examples provided.

get_float_history ~178

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), showing the float on a past date and how it expanded across a dilution event. The series is forward-only: it began accumulating in mid-2026 and is not backfilled, so early or absent history is expected and an empty rows array is a normal result, not an error or a sign of delisting. Each row carries "source" ("computed", "sec_10k" or a market-data vendor tier) because float quality varies by provider.

NameTypeReqDescription
daysinteger–Lookback 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 ~181

Get historical OHLCV price candles for a stock at daily, weekly or monthly resolution, for a period shorthand (1M, 3M, 6M, 1Y, 5Y or the full history) or an explicit from/to UNIX timestamp window. The default is one year of daily candles.

NameTypeReqDescription
frominteger–Start date as UNIX timestamp (overrides period)
periodstring–Lookback period shorthand (default: "1Y"). Ignored if from/to are provided.
resolutionstring–Candle resolution: "D" (daily, default), "W" (weekly), "M" (monthly)
tickerstringyesStock ticker symbol (e.g., "AAPL", "TSLA")
tointeger–End date as UNIX timestamp (overrides period)
NameTypeReqDescription
data–––

No examples provided.

get_insider_cluster_buys ~182

Detect cluster buying for a company: periods where 3+ distinct insiders bought shares (Form 4 open-market purchases, code P) within a 14-day window, over a lookback of 7, 30 or 90 days (default 90). Returns clusterBuyingDetected, the strongest clusterWindow, a summary (totalValue is null when no purchase disclosed a price, and is a floor when unpricedPurchaseCount > 0) and the deduped purchases. `asOf` and `lookback` state the date range covered; clusterBuyingDetected false means none in that range only.

NameTypeReqDescription
daysnumber–Lookback in days by transaction date: 7, 30 or 90 (default 90)
tickerstringyesStock ticker symbol (e.g., AAPL, TSLA)
NameTypeReqDescription
data–––

No examples provided.

get_insider_cross_company ~279

Discover insider trading patterns across multiple companies (the whole universe, not a single ticker): insiders active across multiple companies, cluster buying patterns, and large transactions. Optional filters: 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.

NameTypeReqDescription
endDatestring–End date, YYYY-MM-DD (e.g., "2025-12-31"); a full ISO timestamp is cut to its date.
insiderNamestring–Filter by insider name (partial match, e.g., "Musk" or "Cohen")
limitnumber–Maximum results to return (default: 10, max: 100)
offsetnumber–Offset for pagination (default: 0)
startDatestring–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.
transactionTypestring–Filter 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 ~210

Get per-insider position aggregates for a ticker: which insiders hold positions in the stock and their aggregate cost and value, derived from Form 4 filings. The figures are not lifetime totals: they cover only the Form 4 history Signal8 holds, which starts at the response's `coverageStart` date (repeated on each row), so every figure is "since coverageStart". 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` and `costBasisTotal` are null, which means not measured, not zero cost).

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

No examples provided.

get_insider_transactions ~319

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. Optional year/month and transactionCode filters (purchases P, sales S, etc.) narrow results. 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, so one row is not a basis for a "% of position" figure. holdingsByInsider lists every line with its as-of filing; its sumOfReportedLines is not beneficial ownership (lines can be stale). A trade re-reported in a later filing is listed once.

NameTypeReqDescription
limitnumber–Maximum results to return (default: 20, max: 100)
monthinteger–Filter by transaction month (1-12, requires year)
offsetnumber–Offset for pagination (default: 0)
tickerstringyesStock ticker symbol (e.g., AAPL, TSLA)
transactionCodestring–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.
yearinteger–Filter 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
limitinteger–Maximum results to return (default: 20, max: 100)
offsetinteger–Offset 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
periodsnumber–Number 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
limitnumber–Maximum results to return (default: 20)
offsetnumber–Offset for pagination (default: 0)
periodstring–Filing period to filter (e.g., "2025-Q1")
sortBystring–Column to sort by
sortOrderstring–Sort direction
NameTypeReqDescription
data–––

No examples provided.

get_institution_detail ~76

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. Takes the institution's CIK.

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
limitnumber–Maximum results to return (default: 20, max: 50)
offsetnumber–Offset 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
limitnumber–Maximum results to return (default: 20, max: 100)
offsetnumber–Offset 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 ~135

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. The diff is computed server-side in a single query.

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

No examples provided.

get_institution_top_aum ~127

Discover top institutional holders across the entire company universe ranked by assets under management (AUM), across all companies rather than for a single company. Optionally set a minimum AUM. Useful for identifying smart money flows and major institutional positioning trends.

NameTypeReqDescription
limitnumber–Maximum results to return (default: 25, max: 100)
minAumnumber–Minimum AUM in USD to filter institutions (e.g., 1000000000 for $1B+)
offsetnumber–Offset for pagination (default: 0)
NameTypeReqDescription
data–––

No examples provided.

Install

How do I install the Signal8 MCP server?

Signal8 is a hosted endpoint at https://mcp.signal8.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.signal8.ai

# add to Claude Code
claude mcp add --transport http ai-signal8-mcp 'https://mcp.signal8.ai/mcp'
Common questions

What is the Signal8 MCP server?

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

Is the Signal8 MCP server safe to use?

Signal8 scores 92 out of 100 on VerifyMCP. 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 113 tools: search_companies, get_company_profile, get_quote, get_market_metrics, get_short_interest, and 108 more. Their descriptions and schemas cost roughly 37,618 tokens of context every time the server is loaded.

Does the Signal8 MCP server require authentication?

Yes. Signal8 asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

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 did VerifyMCP test on the Signal8 MCP server?

VerifyMCP ran 13 checks on Signal8, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.