{"result":{"tools":[{"name":"list_investors","title":"List investors","description":"List the tracked superinvestors with primaryStyle (nullable) and an optional investor_style primary-style metadata filter, available on every plan, plus their latest portfolio period, total value, and position count. Also returns high-level stats for the latest substantially complete consensus quarter (75% coverage, same fallback as consensus), with nextPeriod {period, investorsFiled} when later filings have started. Returns byte-bounded investor pages (default 50, maximum 100 requested rows); follow nextOffset with identical arguments. Use this to see who is being tracked or for dashboard-level questions. A fund family is listed once, as its firm, with `fundCount` and `funds` naming the individual fund slugs you can drill into; the firm's 13F and each fund's N-PORT are separate SEC lenses on the same manager and must never be added together.","inputSchema":{"type":"object","properties":{"investor_style":{"type":"string","enum":["value","quality","growth","activist","macro","special"],"description":"Optional primary-style metadata filter; available on every plan."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."},"offset":{"type":"integer","minimum":0,"description":"Default 0; follow nextOffset with the same arguments."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum rows requested; byte-bounded pages may contain fewer. Follow nextOffset."}},"required":[]},"annotations":{"title":"List investors","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_investor_holdings","title":"Get investor holdings","description":"Get an investor's portfolio holdings for a specific period. Returns positions with shares, value, portfolio weight %, ticker, and security details. If period is omitted, returns the latest available period. Supports sorting and limiting results. Follow nextOffset as offset with the same filters to continue.","inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"description":"Default 0. Repeat with nextOffset and identical filters to continue."},"slug":{"type":"string","description":"Investor slug, CIK digits (leading zeros accepted), or exact case-insensitive investor/manager name, including its lowercase hyphenated slugified form (punctuation dropped; terminal legal suffix optional; unique whole-word prefixes/subsequences such as pershing-square accepted); aliases must identify exactly one investor","minLength":1,"maxLength":200},"period":{"type":"string","description":"Reporting period like '2024Q4' or '2024-12'. Omit for latest."},"sortBy":{"type":"string","enum":["value","shares","name"],"description":"Sort order for holdings. Default: 'value' (largest positions first)."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return only top N positions. Omit to get up to 30 positions."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["slug"]},"annotations":{"title":"Get investor holdings","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_investor_activity","title":"Get investor activity","description":"Get an investor's buy/sell activity for a specific period. Shows new positions, increases, decreases, and exits with split-adjusted share changes and percentages. Repeat adjustment_note when present. Can filter by change type. Returns byte-bounded pages (default 20, maximum 100 requested rows); follow nextOffset with identical slug/period/filters.","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"Investor slug, CIK digits (leading zeros accepted), or unique exact case-insensitive investor/manager name, including its lowercase hyphenated slugified form (punctuation dropped; terminal legal suffix optional; unique whole-word prefixes/subsequences such as pershing-square accepted)","minLength":1,"maxLength":200},"period":{"type":"string","description":"Reporting period like '2024Q4'. Omit for latest."},"changeType":{"type":"string","enum":["NEW","INCREASED","DECREASED","SOLD"],"description":"Filter to only show a specific type of activity."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."},"offset":{"type":"integer","minimum":0,"description":"Default 0; follow nextOffset with the same arguments."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum rows requested; byte-bounded pages may contain fewer. Follow nextOffset."}},"required":["slug"]},"annotations":{"title":"Get investor activity","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_investor_periods","title":"Get investor periods","description":"Get all available reporting periods for an investor, ordered most recent first. Unique whole-word abbreviations such as pershing-square and tiger-global are accepted; unknown or ambiguous identifiers return candidates.","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"Investor slug, CIK digits (leading zeros accepted), or unique exact case-insensitive investor/manager name, including its lowercase hyphenated slugified form (punctuation dropped; terminal legal suffix optional; unique whole-word prefixes/subsequences such as pershing-square accepted)","minLength":1,"maxLength":200},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["slug"]},"annotations":{"title":"Get investor periods","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_security_detail","title":"Get security detail","description":"Get detailed information about a security (stock/bond) including current owners among tracked investors with their share counts and values, quarterly ownership history (owner count and total shares over time), and recent buy/sell activity across all investors. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"tickerOrCusip":{"type":"string","description":"Stock ticker (e.g. 'AAPL', 'GOOGL'), CUSIP or stable security ID (s-123)"},"period":{"type":"string","description":"Reporting period. Omit for latest."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["tickerOrCusip"]},"annotations":{"title":"Get security detail","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_market_overview","title":"Get market overview","description":"Get a market-wide overview of recent activity among tracked investors. View 'by_security' shows the most actively traded stocks (buyer/seller counts and names). View 'by_investor' shows the latest trading activity grouped by investor with their top position changes. Repeat adjustment_note when present. Follow nextOffset as offset with the same filters to continue.","inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"description":"Default 0. Repeat with nextOffset and identical filters to continue."},"view":{"type":"string","enum":["by_security","by_investor"],"description":"How to group the data. 'by_security' for trending stocks, 'by_investor' for recent activity per investor. Default: 'by_security'."},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Number of results to return (default 10, maximum 50)"},"period":{"type":"string","description":"Reporting period like '2024Q4'. Omit for latest."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":[]},"annotations":{"title":"Get market overview","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"screen_stock_consensus","title":"Screen stock consensus","description":"Screen stocks by material quarterly activity among tracked investors. Default ranking is the weighted score (2*NEW + INCREASED - DECREASED - 2*SOLD), reversed for side sell. Use sortBy: \"buyers\" to answer which stocks did the most funds buy/add; sellers ranks fund sellers and net_value ranks net estimated dollars in the side direction. sortBy is available on every plan, including free and anonymous/demo. Counts and dollar figures are recalculated from only the requested investor styles. Valid investor_style keys: value, quality, growth, activist, macro, special. Follow nextOffset as offset with the same filters to continue.","inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"description":"Default 0. Repeat with nextOffset and identical filters to continue."},"period":{"type":"string","description":"Reporting period like '2026Q2'. Omit for the latest substantially complete quarter."},"side":{"type":"string","enum":["buy","sell"],"description":"Default: buy."},"sortBy":{"type":"string","enum":["score","buyers","sellers","net_value"],"description":"Default: score. Available on every plan; preserves plan row caps."},"min_investors":{"type":"integer","minimum":1,"maximum":10},"investor_style":{"type":"array","items":{"type":"string","enum":["value","quality","growth","activist","macro","special"]},"uniqueItems":true,"description":"Optional primary investor styles to include (OR semantics)."},"limit":{"type":"integer","minimum":1,"maximum":20},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":[]},"annotations":{"title":"Screen stock consensus","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"search","title":"Search","description":"Search for investors by name, manager, slug, fund ticker or alias (at least two characters), and securities by ticker/issuer name. One-character security queries are supported; investor matching is explicitly skipped. Returns investor matches with their latest period, portfolio value, and their role — 'firm' (files a 13F for a fund family), 'fund' (one N-PORT series, with parentSlug naming its firm) or 'investor' (standalone). A person or firm name selects the firm; a fund name or ticker selects that fund. Security matches carry the current owner count among tracked investors. Use this to find the correct slug or ticker before looking up details. Follow nextOffset as offset with the same filters to continue.","inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"description":"Default 0. Repeat with nextOffset and identical filters to continue."},"query":{"type":"string","description":"Search query (e.g. 'Buffett', 'AAPL', 'Apple')"},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["query"]},"annotations":{"title":"Search","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_position_history","title":"Get position history","description":"Track how a specific investor's position in a security has changed over time. Returns a chronological timeline of shares, value, effective share delta/percentage, activity type (NEW, INCREASED, DECREASED, SOLD, UNCHANGED), and adjustment_note for each reporting period. Returns byte-bounded history pages (default 20, maximum 100 requested rows); follow nextOffset. Use this for questions like 'How has Buffett's AAPL position changed over the years?' Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"Investor slug, CIK digits (leading zeros accepted), or unique exact case-insensitive investor/manager name, including its lowercase hyphenated slugified form (punctuation dropped; terminal legal suffix optional; unique whole-word prefixes/subsequences such as pershing-square accepted)","minLength":1,"maxLength":200},"tickerOrCusip":{"type":"string","description":"Stock ticker (e.g. 'AAPL') or CUSIP identifier"},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."},"offset":{"type":"integer","minimum":0,"description":"Default 0; follow nextOffset with the same arguments."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum rows requested; byte-bounded pages may contain fewer. Follow nextOffset."}},"required":["slug","tickerOrCusip"]},"annotations":{"title":"Get position history","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"compare_investors","title":"Compare investors","description":"Compare 2–6 investors in one common or requested period. Returns portfolio totals, a shared holdings matrix with split-adjusted quarter changes, pairwise overlaps, and unique top holdings. Missing investors and capped results are labelled. For one security across managers, use get_security_holders; resolve_company resolves company identifiers. Follow nextOffset as offset with the same filters to continue.","inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"description":"Default 0. Repeat with nextOffset and identical filters to continue."},"slugs":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"minItems":2,"maxItems":6,"description":"Investor slugs, CIK digits (leading zeros accepted), or unique exact case-insensitive investor/manager names, including their lowercase hyphenated slugified forms (punctuation dropped; terminal legal suffix optional; unique whole-word prefixes/subsequences such as pershing-square accepted)"},"slug1":{"type":"string","description":"Deprecated first investor slug/CIK/unique name (use slugs)"},"slug2":{"type":"string","description":"Deprecated second investor slug/CIK/unique name (use slugs)"},"period":{"type":"string","pattern":"^[0-9]{4}(Q[1-4]|-(0[1-9]|1[0-2]))$","description":"Reporting quarter or month; omit for latest common quarter"},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["slugs"]},"annotations":{"title":"Compare investors","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_security_holders","title":"Get security holders","description":"Show tracked investors holding a security, their filing-reported value, portfolio weight, period-end shares, split-adjusted quarter action, and first-seen period. Includes portfolioWeightPct (percent of selected long-stock book; derivatives/shorts excluded), portfolioRank (1 = largest stock position; securityId breaks value ties; exits rank null), holdersAtPeriodEnd and exitedThisPeriod counts. totalCount counts matching rows including exits before paging; population counts and totals precede changeType filtering. Optional changeType filters admitted actions before paging on every plan; this is a per-security row filter, not a screener filter. Includes exits and totals across the family aggregate universe. Optionally restrict to investor slugs and a reporting period. Use resolve_company to resolve company identifiers. Follow nextOffset as offset with the same filters to continue. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"description":"Default 0. Repeat with nextOffset and identical filters to continue."},"ticker":{"type":"string","minLength":1,"maxLength":100,"description":"Ticker, CUSIP, or s-123 security identifier"},"period":{"type":"string","pattern":"^[0-9]{4}(Q[1-4]|-(0[1-9]|1[0-2]))$","description":"Reporting quarter or month; omit for the newest 75%-covered consensus quarter"},"changeType":{"type":"string","enum":["NEW","INCREASED","DECREASED","SOLD"],"description":"Optional admitted quarter-action row filter, on every plan; applied before paging."},"slugs":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"\\S"},"minItems":1,"maxItems":12,"description":"Restrict to investor slugs, CIK digits (leading zeros accepted), or unique exact case-insensitive investor/manager names, including their lowercase hyphenated slugified forms (punctuation dropped; terminal legal suffix optional; unique whole-word prefixes/subsequences such as pershing-square accepted) (up to 12); family aggregate representatives only"},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum returned investors (default 25)"},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker"]},"annotations":{"title":"Get security holders","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_investor_summary","title":"Get investor summary","description":"Get a lightweight portfolio summary for an investor: stock total value, stock position count, top 5 holdings, and concentration metrics (top 5 and top 10 as % of total). Derivative positions (PUT/CALL options, note principal) come back in a separate labelled `derivatives` block whose values are 13F reported values (usually the underlying's notional for options) — never add them to totalValue and never derive a combined weight. Use this for quick overview questions instead of fetching all holdings.","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"Investor slug, CIK digits (leading zeros accepted), or unique exact case-insensitive investor/manager name, including its lowercase hyphenated slugified form (punctuation dropped; terminal legal suffix optional; unique whole-word prefixes/subsequences such as pershing-square accepted)","minLength":1,"maxLength":200},"period":{"type":"string","description":"Reporting period. Omit for latest."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["slug"]},"annotations":{"title":"Get investor summary","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"resolve_company","title":"Resolve company","description":"Resolve a company name or ticker to candidate companies with filings/financials. Returns ticker, name, CIK, and whether each has financial data and filing text. Use this FIRST when the user names another company (e.g. 'Microsoft', 'compare with MSFT') to get the ticker before calling the other filing/financials tools. Follow nextOffset as offset with the same filters to continue.","inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"description":"Default 0. Repeat with nextOffset and identical filters to continue."},"query":{"type":"string","maxLength":200,"description":"Company name or ticker (e.g. 'Microsoft', 'MSFT', 'Apple')"},"includeInactive":{"type":"boolean","description":"Also return companies with no SEC CIK (delisted shells, 13F-only issuers). Default false."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["query"]},"annotations":{"title":"Resolve company","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_company_filings","title":"List company filings","description":"List company filings newest filing date first, with accession, items, AI headline, hasSummary, hasText, hasStatements and EDGAR sourceLink. Default: 10-K/10-Q/20-F, 8-K/6-K and DEF 14A, including amendments. Optional formTypes filters exact SEC forms; other forms (e.g. 424B4, S-1, S-3) are listed only when requested. Full text covers periodic 10-K/10-Q/20-F; 8-K/6-K have AI summaries and DEF 14A has proxy extractions, when available. Other forms are listed only. Follow nextOffset; reporting period and filing date differ. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"formTypes":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":40},"description":"Exact SEC forms, e.g. [\"8-K\"], [\"DEF 14A\"], [\"10-K\",\"10-Q\"]. Include amendments explicitly, e.g. \"8-K/A\". Omit for periodic + events + proxy."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":30},"ticker":{"type":"string","description":"Stock ticker, CUSIP or stable security ID (s-123)"},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker"]},"annotations":{"title":"List company filings","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_filing_summary","title":"Get filing summary","description":"Get an 8-K/6-K AI event summary (items, headline, bullets, EDGAR sourceLink), a DEF 14A proxy extraction (CEO/NEO compensation, say-on-pay and other available topics), or a periodic 10-K/10-Q/20-F summary. Supply an accession from list_company_filings for events/proxies. Other forms are listed only. Full text is available only for periodic filings, via read_filing_section. Periodic response: a filing-level summary (headline, tl;dr, highlights, changes vs prior, watch items) plus each section's headline, bullet points, and its (part, sectionId) address. Does NOT include the raw section text — use read_filing_section for that. Omit accession to get the latest periodic filing. Use this to answer or expand on a summary the user is reading, and to discover section ids (part, sectionId) before reading raw text. Before a single-company valuation conclusion, select the newest 10-Q accession from list_company_filings; state unavailable coverage. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Stock ticker, CUSIP or stable security ID (s-123)"},"accession":{"type":"string","description":"Filing accession number (from list_company_filings). Omit for the latest periodic filing; provide an accession for an event or proxy."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker"]},"annotations":{"title":"Get filing summary","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"read_filing_section","title":"Read filing section","description":"Read the raw text of one filing section (e.g. MD&A, Risk Factors). This is the grounding tool: use it to verify or quote what a filing actually says before making a factual claim about its language. Use the (accession, part, sectionId) from get_filing_summary or search_filing_text. Common sectionId aliases such as 3, Item 3, and Item 7A are accepted; missing sections return availableSections for that accession. Pages contain about 12,000 characters. Follow nextOffset as offset with the same address and omit find to read on. Optional literal find locates a paragraph at or after offset; found:false explicitly means no occurrence at or after offset and returns the ordinary page plus up to eight suggestions (matching headings/short lines with character offsets). Offsets index stored text characters. Before downgrading a claim absent from structured notes, read the relevant Risk Factors and MD&A here and name the section read; absence from notes is not absence from the filing. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Stock ticker, CUSIP or stable security ID (s-123)"},"accession":{"type":"string","description":"Filing accession number"},"part":{"type":"string","description":"SEC Part the section belongs to ('I'..'IV')"},"sectionId":{"type":"string","description":"Section id, or alias such as 3, Item 3, 1A or Item 7A; discover ids with get_filing_summary"},"offset":{"type":"integer","minimum":0,"description":"Character offset; default 0. Pass nextOffset to continue."},"find":{"type":"string","minLength":1,"description":"Literal case-insensitive phrase; starts at its paragraph, searching at or after offset. Omit when continuing. If the phrase is not found, suggestions list matching headings/short lines and character offsets."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker","accession","part","sectionId"]},"annotations":{"title":"Read filing section","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"search_filing_text","title":"Search filing text","description":"Full-text keyword search over a company's filing sections. Returns ranked matches with separate highlighted snippets[] passages and the (accessionNumber, part, sectionId) to read. Compatibility snippet separates passages with [Separate passage]; never treat them as adjacent text. Use read_filing_section find with a literal snippet phrase (without highlight tags) to locate it. Follow nextOffset as offset with identical query/accession for more matches. Use this to locate where a topic or phrase is discussed in the filings when you don't already know the section. Keyword-based, so use concrete terms from the filing; for numeric values use get_company_financials instead. Optionally scope to one filing by accession. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Stock ticker, CUSIP or stable security ID (s-123)"},"offset":{"type":"integer","minimum":0,"description":"Match offset; default 0. Follow nextOffset."},"query":{"type":"string","description":"Keywords to search for (e.g. 'supply chain', 'goodwill impairment')"},"accession":{"type":"string","description":"Limit the search to one filing. Omit to search all of the company's filings."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker","query"]},"annotations":{"title":"Search filing text","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_company_financials","title":"Get company financials","description":"Get reported financial metrics (revenue, pretax income, income tax expense, interest expense (deposit/funding cost for banks), share-based compensation, R&D, SG&A, derived EBIT, margins, EPS, cash flow, balance-sheet items, etc.) from XBRL filings, by period. Use this for standardized metrics; use read_statement for other reported table values. Never state a figure from memory or infer it from a summary. Returns annual, quarterly or explicitly requested TTM data with definitions, units, currency, missing reasons, derivation and source links. Filter with 'metrics' to keep the answer focused; use 'periodType' and 'limit' to control how many periods come back. For valuation, check quarterly rows after the annual basis and compare the newest quarter year over year; identify the fiscal-year or trailing-quarter basis and price date of every ratio. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates. Metric aliases: cash_and_equivalents/cash_equivalents→cash, total_revenue/sales→revenue, net_profit→net_income, capital_expenditures→capex, fcf→free_cash_flow, eps→eps_diluted, buybacks→share_repurchases. Aliases echo resolvedMetrics. Unavailable balance-sheet metrics point to list_statements query balance, then read_statement.","inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0},"from":{"type":"string","description":"Earliest period end, YYYY-MM-DD"},"to":{"type":"string","description":"Latest period end, YYYY-MM-DD"},"ticker":{"type":"string","description":"Stock ticker, CUSIP or stable security ID (s-123)"},"metrics":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":20,"description":"Canonical metric IDs (e.g. ['revenue','net_income','eps_diluted','total_debt']). Max 20. Omit for up to 12 core metrics; availableMetrics lists all IDs."},"compact":{"type":"boolean","description":"true keeps each cell's value and source link, drops fact IDs, derivation and inputs, and trims definitions to metric, display, unit and period (roughly 20–30% smaller). Use when you only need the numbers."},"periodType":{"type":"string","enum":["annual","quarterly","both","ttm"],"description":"Which period types to return. Default 'both'."},"limit":{"type":"integer","minimum":1,"maximum":12,"description":"Periods per type: default 4, maximum 12. Follow each nextOffset for earlier periods."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker"]},"annotations":{"title":"Get company financials","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_statements","title":"List statements","description":"Discover primary statements, notes and detailed tables in one published filing. Returns statement IDs, friendly/original names and source links. Does not depend on AI summaries. Follow nextOffset. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Company ticker, CUSIP, or stable security ID s-123"},"accession":{"type":"string","description":"Exact accession from page context or list_company_filings"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":40},"query":{"type":"string","description":"Optional words matched against report titles, case-insensitive, any order, across punctuation"},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker","accession"]},"annotations":{"title":"List statements","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"search_disclosures","title":"Search disclosures","description":"Search published structured notes, row labels, text cells and footnotes using an English literal substring. Specify 1 to 3 company-owned accessions for a single filing or cross-period comparison. Returns bounded discovery snippets with read_statement coordinates and source links. Each report returns nextMatchOffset for more matching locations; pass it as matchOffset with the same page offset. Follow nextOffset with identical query/accessions. Read source reports before making claims or comparing figures. Partial coverage or no match never proves absence of disclosure; narrative chapters use search_filing_text. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Company ticker, CUSIP, or stable security ID s-123"},"accessions":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":3},"query":{"type":"string","description":"Literal English substring, e.g. debt, covenant, restructuring. Try synonyms in separate searches."},"matchOffset":{"type":"integer","minimum":0,"description":"Location offset within each report; default 0. Pass a report nextMatchOffset with the same report page offset to discover more locations."},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":8},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker","accessions","query"]},"annotations":{"title":"Search disclosures","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"read_statement","title":"Read statement","description":"Read structured filing rows and cells with raw numbers, display scale, unit, period, dimensions and source links. Use for numbers absent from Core and to explain the selected statement. Pages through rows and columns; rowIds/columnIds target cells. Text/footnotes return nextTextOffset: repeat with those IDs and textOffset for continuation. For footnotes use footnoteOffset/nextFootnoteOffset and rowIds: [] to reserve the text budget. If a cell returns empty content and non-null nextTextOffset, target only its rowId and columnId before continuing. Keep the public column_limit spelling. Never sum unlike units or quarterly and cumulative periods. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"Company ticker, CUSIP, or stable security ID s-123"},"accession":{"type":"string","description":"Exact accession from page context or list_company_filings"},"offset":{"type":"integer","minimum":0},"limit":{"type":"integer","minimum":1,"maximum":20},"query":{"type":"string","description":"Optional words to find in a row label, case-insensitive, any order, across punctuation: 'Earnings per share' matches 'Earnings (loss) per share - basic'. No match returns queryMatched: false with the statement's section headings; it never means the statement is empty."},"statementId":{"type":"string"},"columnOffset":{"type":"integer","minimum":0},"column_limit":{"type":"integer","minimum":1,"maximum":6},"rowIds":{"type":"array","items":{"type":"integer"},"maxItems":20},"columnIds":{"type":"array","items":{"type":"integer"},"maxItems":20},"footnoteOffset":{"type":"integer","minimum":0},"textOffset":{"type":"integer","minimum":0},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["ticker","accession","statementId"]},"annotations":{"title":"Read statement","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_insider_activity","title":"Get insider activity","description":"One company's Section 16 insider activity over a window: the summary figures, who bought and sold, and the most recent filings. This is the Insiders tab of a security page. USD totals already exclude rows whose filed price failed the price check (pricePlausible false); unverifiable prices still count. Never present a failed row as an amount someone paid, and do not explain this rule to the user unless asked. 'Discretionary' means the filing's checkbox said the insider chose the timing, not that a pre-set Rule 10b5-1 plan executed it. The checkbox only exists on filings from December 2022; an unanswered one is 'unknown', never 'not planned'. A Form 144 is a notice of *intent* to sell, never a trade. Its share count is what the filer announced and its market value is the filer's own estimate, which enters no dollar total. 'Not yet reported' means no Form 4 matches it yet — not that the sale did not happen. Insider buying is not a recommendation and not a signal. Do not add caveats, disclaimers or methodology notes; state the facts and stop. If asked whether a buy is bullish, give the facts (who, role, size, price, timing) and no verdict. Two views, and they are different populations: 'insiders' is officers and directors (management), 'major_shareholders' is 10% owners — funds, parent companies and holding vehicles, whose sales are portfolio decisions and not management trades. Each filing is bucketed by its own filed role class, never by how a name reads, so one filer group can appear in both views with only its own filings. Rows are grouped by filing group (a set of reporting-owner CIKs), never by name, and nothing here attributes a share to an individual co-filer. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"company":{"type":"string","description":"Company ticker, name, CUSIP or stable security ID (s-123). A ticker is read only through the reviewed listing that carries it TODAY, so a former ticker resolves to nothing rather than to whoever used to hold it — pass s-<id> for a delisted line. A string matching more than one company comes back as `candidates` for you to choose from; never pick one yourself from a partial name."},"window":{"type":"string","enum":["1m","3m","6m","1y","3y","all"],"description":"Look-back window. Default '1y'."},"view":{"type":"string","enum":["insiders","major_shareholders"],"description":"'insiders' = officers and directors; 'major_shareholders' = 10% owners. Default 'insiders'."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["company"]},"annotations":{"title":"Get insider activity","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_insider_transactions","title":"Get insider transactions","description":"One filing group's own Form 4 filings at a company, plus latestReportedHoldings on the first page only, using the latest position date per title and verified terminal balances for a single management CIK (stock and derivative lines, dates, split basis and caveats; use this to answer how much the CEO holds), with each filing's Section 16 transaction lines: trade date, transaction code, shares, the price as filed, positionAfter (also sharesOwnedAfter): the holding reported after this line for one reporting owner and one direct/indirect holding, never a total, never summed or attributable to a joint co-filer; derivative lines count the derivative instrument, not common stock. Also whether a 10b5-1 plan or the insider's own timing was checked. Use it after get_insider_activity to open one row of \"who bought and sold\". USD totals already exclude rows whose filed price failed the price check (pricePlausible false); unverifiable prices still count. Never present a failed row as an amount someone paid, and do not explain this rule to the user unless asked. 'Discretionary' means the filing's checkbox said the insider chose the timing, not that a pre-set Rule 10b5-1 plan executed it. The checkbox only exists on filings from December 2022; an unanswered one is 'unknown', never 'not planned'. The reporter argument accepts whole name tokens in any order/case, ignoring punctuation, suffixes and middle initials only for a unique match; normalized names echo resolvedReporter. It also accepts the name as get_insider_activity displayed it, or its reporterKey (the filing group's CIK set) — the key is exact and preferred. Holding-only source rows are returned separately in holdings, not transactions; they report an existing holding, not a trade. Exactly ONE filing group is answered per call: a name matching more than one comes back as `candidates`, because two groups are two reporters even under one name and their figures are never summed. Paged up to 20 filings at a time, fewer when the filings are long; follow nextCursor until it is null. It never steps over anything: a filing with more admitted lines than one page holds is resumed inside itself (transactionsSkipped / transactionsRemaining and holdingsSkipped / holdingsRemaining say where), so every line is reachable by paging. Per-row prices are the filer's own figures, each carrying its plausibility verdict: valuePlausible false means the price does not stand up against the issuer's close and the row's USD value is not a dollar figure anyone paid; null means nothing could be checked. adrSharesPerAds, where set, means the close it was checked against prices a depositary receipt rather than the ordinary share. Company identifiers accept verified share-class variants (BRK-B, BRK/B, BRK B, brk.b → BRK.B); normalized inputs echo resolvedTicker. Unknown identifiers return a repairable error with up to five resolve_company candidates.","inputSchema":{"type":"object","properties":{"company":{"type":"string","description":"Company ticker, name, CUSIP or stable security ID (s-123). A ticker is read only through the reviewed listing that carries it TODAY, so a former ticker resolves to nothing rather than to whoever used to hold it — pass s-<id> for a delisted line. A string matching more than one company comes back as `candidates` for you to choose from; never pick one yourself from a partial name."},"reporter":{"type":"string","description":"Reporter name as displayed, or the exact reporterKey (comma-joined 10-digit CIKs)."},"window":{"type":"string","enum":["1m","3m","6m","1y","3y","all"],"description":"Look-back window. Default '1y'."},"view":{"type":"string","enum":["insiders","major_shareholders"],"description":"Which role bucket the reporter's row was in. Omit to let the reporter's own filings decide; required only when one filing group filed in both."},"cursor":{"type":"string","description":"nextCursor from a previous call. It encodes a filing and, inside an oversized filing, how many of its lines you have already seen."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":["company","reporter"]},"annotations":{"title":"Get insider transactions","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"screen_insider_activity","title":"Screen insider activity","description":"The site-wide insider screener (/insiders) as a tool: companies ranked by insider flow over a window, with who bought, what they paid and where the stock trades now. Use it for \"which companies are insiders buying\", never for one named company — get_insider_activity answers that. USD totals already exclude rows whose filed price failed the price check (pricePlausible false); unverifiable prices still count. Never present a failed row as an amount someone paid, and do not explain this rule to the user unless asked. 'Discretionary' means the filing's checkbox said the insider chose the timing, not that a pre-set Rule 10b5-1 plan executed it. The checkbox only exists on filings from December 2022; an unanswered one is 'unknown', never 'not planned'. Insider buying is not a recommendation and not a signal. Do not add caveats, disclaimers or methodology notes; state the facts and stop. If asked whether a buy is bullish, give the facts (who, role, size, price, timing) and no verdict. Returns up to 25 companies plus the exact total count. priceVsRef is the latest close against refBuyPrice, the share-weighted price the window's buyers actually paid on today's split basis — negative means the stock now trades below it. latestClose is null (with marketCapBasic and priceVsRef) when the company's reference security has stopped producing bars: a company that no longer trades keeps its row and its flow figures but reports no price. marketCapBasic is basic common shares outstanding times the close — never a fully converted figure, so do not describe it as total capitalisation; sharesObservedAt is the date that share count describes, and sharesClassScope says whether it covers one share class, multiple, or whether that is unknown -- unknown means no breakdown was filed, never that there is one class. marketCapBasis says what kind of figure the cap is: single_class and classes_converted are exact (the second means a reviewed conversion turned every class into the priced class's unit), while classes_summed_unconverted is APPROXIMATE -- several share classes added together and priced at one class's quote, because nothing reviewed says they are the same economic unit. Always say a classes_summed_unconverted figure is approximate and why; never present it as exact. A null marketCapBasic is a deliberate refusal, and marketCapWithheldReason is the site's own sentence saying why (marketCapWithheldReasonKey is the same fact as a machine word): quote the reason, never substitute an estimate of your own. clusterBuyers is already a count of participants — never add one to it.","inputSchema":{"type":"object","properties":{"preset":{"type":"string","enum":["cluster_month","ceo_cfo_buys","big_sales","below_insider_price"],"description":"A named starting point whose filters the other arguments override: cluster_month (2+ managers bought at their own discretion within 14 days), ceo_cfo_buys, big_sales, below_insider_price."},"window":{"type":"string","enum":["1w","1m","3m","6m","1y"],"description":"Look-back window. Default '1m'."},"side":{"type":"string","enum":["buys","sells","both"],"description":"Which side qualifies a company. Default 'buys'."},"role":{"type":"string","enum":["management","ceo_cfo","directors","all"],"description":"Whose filings count, by each filing's own role class. 'all' adds 10% owners, whose sales are not management trades. Default 'management'."},"discretionaryOnly":{"type":"boolean","description":"Count only open-market rows the insider chose to time, excluding 10b5-1 plan trades and filings with no plan checkbox. Default true."},"minValue":{"type":"number","description":"USD floor on the window's plausible-price total for the side being screened. Default 100000."},"clusterOnly":{"type":"boolean","description":"Keep only companies where 2+ filing groups bought within 14 days."},"cap":{"type":"string","enum":["micro","small","mid","large"],"description":"Current market-cap band: micro (<$300M), small ($300M-$2B), mid ($2B-$10B), large (>$10B). A company with no known cap is in no band."},"sort":{"type":"string","enum":["net","buyers","latest","below_ref"],"description":"net = net USD, buyers = distinct filing groups, latest = last filing, below_ref = furthest under the insiders' own buy price. Default 'net'."},"cursor":{"type":"string","description":"nextCursor from a previous call."},"resultPath":{"type":"string","description":"Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer)."},"resultOffset":{"type":"integer","minimum":0,"description":"Offset within resultPath; copy from resultContinuations. Keep the original request arguments."}},"required":[]},"annotations":{"title":"Screen insider activity","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}]},"jsonrpc":"2.0","id":2}