FilingSpy
Server Details
SEC filings as tools: 13F superinvestor portfolios, Form 4 insider trades, XBRL and filing text
TDQS
Scored across 24 tools
Most tools target a distinct resource+action (investor holdings vs. activity vs. periods vs. summary; filing list vs. summary vs. section vs. statement). A few pairs have fuzzy boundaries — get_security_detail vs. get_security_holders both surface owners, and search_filing_text vs. search_disclosures both do keyword search — but descriptions explicitly signal which to use.
Consistent verb_noun pattern throughout (get_investor_holdings, list_company_filings, read_statement, search_filing_text, screen_insider_activity). The lone 'search' is still a verb and fits the same convention; no camelCase/snake_case mixing.
24 tools is at the heavy end, but the domain genuinely spans investors, filings, XBRL financials, insider Section 16, screeners and search, and each tool covers a discrete capability. Slightly over-scoped but no obvious filler tools.
Strong coverage across the domain's lifecycle: discover (search, list_investors, resolve_company), inspect (holdings, activity, periods, filings, statements, financials), compare, and screen. Minor gaps such as cross-investor performance/returns comparison and portfolio time-series analytics, but core research workflows are fully covered.
Available Tools
24 toolscompare_investorsCompare investorsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug1 | No | Deprecated first investor slug/CIK/unique name (use slugs) | |
| slug2 | No | Deprecated second investor slug/CIK/unique name (use slugs) | |
| slugs | Yes | 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) | |
| offset | No | Default 0. Repeat with nextOffset and identical filters to continue. | |
| period | No | Reporting quarter or month; omit for latest common quarter | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses that missing investors and capped results are labelled, and it explains the two-stage continuation model (nextOffset for flat pagination, resultPath/resultOffset for nested overflow recovery). It stops short of stating any rate limits or what a partial 'capped' result looks like in practice, but the mutation-safety surface is already covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and outputs, then routing, then pagination — the ordering matches how an agent reads it. It is dense but every sentence carries information; the final pagination sentence is partly redundant with the offset/resultPath schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns, and it does: totals, a split-adjusted holdings matrix, pairwise overlaps, unique top holdings, plus labelling of missing/capped data. Combined with the routing and continuation instructions, an agent has everything needed to call it correctly in one shot.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so most parameter meaning is already documented in the schema, including the slug formats and the period regex. The description only adds the notion of a 'common' vs explicitly requested period and restates the nextOffset-as-offset loop the schema already describes, so it does little beyond baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Compare 2–6 investors') plus the scope ('one common or requested period'), then enumerates the concrete outputs (portfolio totals, shared holdings matrix, pairwise overlaps, unique top holdings). It is immediately distinguishable from get_security_holders and resolve_company, which it names explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: use get_security_holders when the question is one security across managers, and use resolve_company to resolve company identifiers. It also states the 2–6 investor bound and the period semantics (common quarter by default), so the agent knows exactly which tool answers which question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_financialsGet company financialsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest period end, YYYY-MM-DD | |
| from | No | Earliest period end, YYYY-MM-DD | |
| limit | No | Periods per type: default 4, maximum 12. Follow each nextOffset for earlier periods. | |
| offset | No | ||
| ticker | Yes | Stock ticker, CUSIP or stable security ID (s-123) | |
| compact | No | 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. | |
| metrics | No | 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. | |
| periodType | No | Which period types to return. Default 'both'. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/non-destructive annotations: discloses the return payload (definitions, units, currency, missing reasons, derivation, source links), the period bases returned, pagination continuation mechanics (nextOffset, resultContinuations), identifier normalization with resolvedTicker echo, metric alias resolution with resolvedMetrics echo, and the shape of the error case with up to five candidate companies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the key sibling distinction, and most sentences carry unique routing or parameter information. It is a dense single block, though, mixing return contents, error recovery, aliasing and valuation workflow, which makes it harder to scan than bulleted sections would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters and no output schema, the description carries the burden of explaining return shape, period bases, pagination and error behavior — and it does all of that. Nothing an agent needs to invoke this correctly (identifier forms, metric selection, recovery args) is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 90%, so the baseline is 3; the description adds real value by documenting an alias table (cash_and_equivalents→cash, fcf→free_cash_flow, etc.) that is not in the schema, plus the intent of 'metrics' (keep the answer focused) and 'limit'/'periodType' (control period count and basis). It leaves compact, from/to, offset and resultPath/resultOffset entirely to the schema, so it doesn't fully compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get reported financial metrics ... from XBRL filings, by period') and enumerates the metric families covered, so an agent knows exactly what comes back. It explicitly distinguishes itself from the sibling read_statement ('use read_statement for other reported table values').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: this tool for standardized metrics, read_statement for other reported table values, and list_statements → read_statement when balance-sheet metrics are unavailable. It also names the fallback path for unresolved tickers (resolve_company via repairable error) and states a hard prohibition ('Never state a figure from memory or infer it from a summary').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filing_summaryGet filing summaryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Stock ticker, CUSIP or stable security ID (s-123) | |
| accession | No | Filing accession number (from list_company_filings). Omit for the latest periodic filing; provide an accession for an event or proxy. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the read-only/idempotent profile, and the description adds substantial context on top: other forms are listed only, text access is restricted to periodic filings, unknown identifiers produce a repairable error with up to five resolve_company candidates, and ticker variants are normalized with resolvedTicker echoed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and nearly every sentence carries operational information. It is a dense single block, though, and the valuation-conclusion instruction sits slightly apart from what the tool itself does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden and does so: it spells out the periodic response structure (headline, tl;dr, highlights, changes, watch items, per-section bullets and (part, sectionId) address) and states the exclusion of raw text explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema — that accession must come from list_company_filings and what omitting it does, plus concrete ticker-variant normalization behavior. It says nothing about resultPath/resultOffset beyond the schema's own overflow notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (8-K/6-K event summary, DEF 14A proxy extraction, 10-K/10-Q/20-F summary) and enumerates the returned fields, so an agent knows precisely what it gets. It also distinguishes itself from read_filing_section by stating full text lives there, not here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit branching: supply an accession from list_company_filings for events/proxies, omit it for the latest periodic filing, and use read_filing_section for raw text. It names the prerequisite sibling and the alternative in the same breath, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insider_activityGet insider activityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | 'insiders' = officers and directors; 'major_shareholders' = 10% owners. Default 'insiders'. | |
| window | No | Look-back window. Default '1y'. | |
| company | Yes | 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. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description goes far beyond them: price-plausibility exclusion rules for USD totals, the precise meaning and December 2022 origin of the 'discretionary' checkbox, Form 144 as intent-only with no dollar contribution, 'not yet reported' semantics, and the repairable-error/candidates behavior. This is exactly the operational context an agent needs to avoid misreporting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, which is good. But the body is a dense, run-on wall of presentation doctrine and edge-case rules mixed with output semantics; several sentences (e.g. the repeated 'do not add caveats' and 'no verdict' instructions) restate the same stance and could be compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining return semantics, and it does: row grouping by reporting-owner CIK set, no attribution to individual co-filers, USD totals that exclude failed-price rows, and continuation handling. An agent has everything needed to call this and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: the two views are distinct populations bucketed by filed role class (not by name), and company identifiers accept verified share-class variants and echo resolvedTicker. It adds little beyond the schema for window, resultPath and resultOffset, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource ('Section 16 insider activity over a window') and enumerates the payload (summary figures, buyers/sellers, recent filings), plus an anchoring analogy ('the Insiders tab of a security page'). It does not, however, explicitly distinguish itself from close siblings like get_insider_transactions or screen_insider_activity, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong guidance on how to interpret and present results (no caveats, no bullish verdicts, don't present failed rows as prices) and clarifies that the two views are different populations. It never says when to choose this tool over get_insider_transactions or screen_insider_activity, so selection guidance is only implied by scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insider_transactionsGet insider transactionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | 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 | No | nextCursor from a previous call. It encodes a filing and, inside an oversized filing, how many of its lines you have already seen. | |
| window | No | Look-back window. Default '1y'. | |
| company | Yes | 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 | Yes | Reporter name as displayed, or the exact reporterKey (comma-joined 10-digit CIKs). | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations covering read-only/idempotent/non-destructive, the description adds extensive behavioral detail beyond them: pagination with nextCursor, intra-filing resumption via transactionsSkipped/transactionsRemaining, price plausibility rules, 10b5-1 checkbox semantics back to December 2022, one-filing-group-per-call behavior with candidates, and holdings vs transactions separation. This is unusually rich and directly actionable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single enormous paragraph with many semicolon-separated clauses, making it difficult to scan. It front-loads the core purpose, but the volume of caveats and meta-instructions (e.g., 'do not explain this rule to the user unless asked') hurts conciseness. Structure is poor despite information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and complex data, the description covers return shapes (positionAfter, valuePlausible, transactionsSkipped), error recovery (candidates, resultContinuations), and critical caveats (price check exclusions, derivative vs common shares). It leaves no major gap for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema for the reporter argument (token matching, punctuation/case handling, reporterKey preferred) and company identifiers (verified share-class variants, resolvedTicker echo, repairable error with resolve_company candidates). It adds less for other parameters, but the extra meaning is substantial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific resource (one filing group's Form 4 filings at a company) and what is returned (transaction lines, latestReportedHoldings). It distinguishes itself from get_insider_activity by positioning itself as the drill-down. However, the purpose is buried in a dense, run-on sentence that requires careful parsing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it after get_insider_activity to open one row of 'who bought and sold', giving clear context. It also explains how to handle multiple candidates and the reporterKey alternative. It does not state when not to use it or name other alternatives, but the primary usage path is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_investor_activityGet investor activityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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) | |
| limit | No | Maximum rows requested; byte-bounded pages may contain fewer. Follow nextOffset. | |
| offset | No | Default 0; follow nextOffset with the same arguments. | |
| period | No | Reporting period like '2024Q4'. Omit for latest. | |
| changeType | No | Filter to only show a specific type of activity. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description discloses that pages are byte-bounded rather than purely limit-driven (default 20, max 100 requested rows), that callers must follow nextOffset with identical slug/period/filters, that adjustment_note must be repeated when present, and that nested overflow requires resultPath/resultOffset recovery. That is substantially more than the annotations carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four front-loaded sentences with no filler; the returns/pagination contract arrives immediately after the purpose. Slightly terse in spots ('Repeat adjustment_note when present') where a few more words would aid first-time comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, read-only, non-destructive tool with full schema coverage and no output schema, the description covers scope, filters, paging, and overflow recovery. It does not explain the result row shape or the units behind the reported percentages, which is the only material gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains slug, limit, offset, period, changeType and the resultPath/resultOffset recovery pair. The description reinforces the pagination-consistency constraint but adds no new format or syntax detail beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get an investor's buy/sell activity for a specific period') and enumerates what the rows contain: new positions, increases, decreases, exits, with split-adjusted share changes and percentages. This implicitly separates it from holdings-oriented siblings like get_investor_holdings and get_position_history, but it never names an alternative, so it stops short of the 5 tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Can filter by change type' and the period parameter imply when the tool applies, but there is no explicit when-to-use vs when-not, and no routing to siblings such as get_investor_periods (to discover valid periods) or get_position_history. The agent must infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_investor_holdingsGet investor holdingsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | |
| limit | No | Return only top N positions. Omit to get up to 30 positions. | |
| offset | No | Default 0. Repeat with nextOffset and identical filters to continue. | |
| period | No | Reporting period like '2024Q4' or '2024-12'. Omit for latest. | |
| sortBy | No | Sort order for holdings. Default: 'value' (largest positions first). | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds value beyond them by disclosing the default page size (30), the default period fallback, and the continuation loop with nextOffset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct information, with purpose and return shape front-loaded and defaults/pagination trailing. No filler; only the resultPath/resultOffset recovery path goes unmentioned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the returned fields (shares, value, weight %, ticker, security details). The only omission is the nested-overflow recovery via resultPath/resultOffset, which an agent must infer from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description earns a bump by explaining the pagination contract (reuse offset with the same filters) and that sort supports limiting top positions, clarifying behavior the schema fields only hint at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Get an investor's portfolio holdings for a specific period') and enumerates the returned fields, which distinguishes it from list-only siblings. It never names a sibling directly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete usage rules: omit period for the latest, and follow nextOffset with identical filters to continue. It offers no guidance on when to choose this over get_position_history, get_investor_summary, or get_investor_activity, which is the main gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_investor_periodsGet investor periodsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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) | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds real behavioral value beyond them: result ordering (most recent first) and the fallback that ambiguous identifiers return candidates rather than erroring or guessing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose and ordering front-loaded before the identifier detail. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description conveys enough (a list of reporting periods, newest first) to know what comes back, and the schema fully covers pagination recovery. A brief note on what a 'period' is (quarterly/annual) would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents slug formats and both continuation parameters. The description's abbreviation examples largely restate the slug schema and say nothing about resultPath/resultOffset recovery semantics, so it adds little beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get all available reporting periods for an investor") plus ordering (most recent first), which clearly separates it from siblings like get_investor_summary or get_investor_holdings. It does not name a sibling explicitly for differentiation, but the resource boundary is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence explains identifier flexibility and fallback behavior for unknown/ambiguous slugs, which is useful input guidance. However, it never says when to call this versus alternatives such as list_statements or get_investor_summary, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_investor_summaryGet investor summaryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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) | |
| period | No | Reporting period. Omit for latest. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered; the description adds real business logic instead — the derivatives block is 13F reported (usually notional) and must never be added to totalValue or used to derive combined weights. It doesn't mention the resultContinuations/overflow behavior beyond what the schema documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the payload, then the derivative caveat, with no filler sentences. The derivatives sentence is long and clause-heavy, but every element of it prevents a real aggregation error, so it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by describing the returned fields and the separate labelled derivatives block. For a 4-parameter read tool with full schema coverage and explicit annotations, an agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the slug description already spells out CIK, slugified name, and prefix matching, so the description adds nothing about parameters. The only adjacent guidance is the implicit 'omit period for latest' already stated in the schema, leaving this at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource, and it enumerates the exact payload (stock total value, position count, top 5 holdings, concentration metrics). It also carves out a distinct scope from get_investor_holdings by framing itself as the lightweight/overview path, so an agent can separate it from its siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this 'for quick overview questions instead of fetching all holdings,' which gives both a condition and the alternative category. It doesn't name get_investor_holdings or get_investor_periods directly, and says nothing about when period resolution is needed, so it falls short of a full when/when-not rule set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_overviewGet market overviewARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | How to group the data. 'by_security' for trending stocks, 'by_investor' for recent activity per investor. Default: 'by_security'. | |
| limit | No | Number of results to return (default 10, maximum 50) | |
| offset | No | Default 0. Repeat with nextOffset and identical filters to continue. | |
| period | No | Reporting period like '2024Q4'. Omit for latest. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral instructions about repeating adjustment_note and following nextOffset to continue, but it does not explain what adjustment_note represents or how resultContinuations overflow recovery behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the overall purpose, then moves efficiently through view semantics and pagination. It is reasonably tight, though the pagination sentence slightly duplicates the offset schema description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description helpfully outlines what each view returns, including buyer/seller counts and top position changes, and it mentions adjustment_note and nextOffset continuation. It still leaves resultPath/resultOffset overflow recovery largely to the schema, which is a minor gap given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already well documented in the schema, including view, limit, offset, period, resultPath, and resultOffset. The description restates view meaning and pagination behavior but adds no format or syntax details beyond the schema, making 3 the appropriate baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Get a market-wide overview of recent activity among tracked investors') and defines what each view returns. It does not explicitly contrast itself with nearby siblings such as get_investor_activity or get_insider_activity, so an agent must infer the broad-market scope, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the two view modes ('by_security' for trending stocks, 'by_investor' for per-investor activity) and gives pagination guidance. However, it does not state when to choose this tool over adjacent siblings, nor does it provide exclusions or required preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_position_historyGet position historyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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) | |
| limit | No | Maximum rows requested; byte-bounded pages may contain fewer. Follow nextOffset. | |
| offset | No | Default 0; follow nextOffset with the same arguments. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. | |
| tickerOrCusip | Yes | Stock ticker (e.g. 'AAPL') or CUSIP identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavior: byte-bounded pages with a sane default of 20 and a 100 request ceiling, the nextOffset follow-up rule, ticker normalization with resolvedTicker echo, and unknown identifiers producing a repairable error with resolve_company candidates. That is the kind of operational detail an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but mostly front-loaded: purpose and return contents come first, then pagination, then the usage example, then identifier handling and error recovery. The usage example arriving after the paging mechanics is slightly misplaced, and the identifier-variant enumeration is verbose, but no sentence is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description enumerates the return fields and the activity-type vocabulary (NEW, INCREASED, DECREASED, SOLD, UNCHANGED), so an agent knows what comes back without a schema. With 6 parameters (2 required) fully documented at 100% schema coverage plus annotations, nothing material about invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns a bump by explaining normalization semantics for tickerOrCusip (BRK-B/BRK/B/BRK B/brk.b → BRK.B, resolvedTicker echo) and by confirming the limit/offset paging contract and the repairable-error recovery path. The nested resultPath/resultContinuations overflow arguments are only gestured at ('follow nextOffset') rather than explained, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb + resource + scope: 'Track how a specific investor's position in a security has changed over time', and it names the exact data returned (shares, value, delta/percentage, activity type, adjustment_note). The 'over time'/'chronological timeline' framing implicitly separates it from snapshot siblings like get_investor_holdings, but no sibling is named, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a concrete usage question ('How has Buffett's AAPL position changed over the years?') that pins down the intended call context and the two required identifiers. It gives no explicit exclusions or named alternatives (e.g. use get_investor_holdings for a current snapshot), so the routing guidance stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_security_detailGet security detailARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Reporting period. Omit for latest. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. | |
| tickerOrCusip | Yes | Stock ticker (e.g. 'AAPL', 'GOOGL'), CUSIP or stable security ID (s-123) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, yet the description still adds genuinely new behavioral detail: identifier normalization rules, the resolvedTicker echo, and that unknown identifiers produce a repairable error carrying up to five resolve_company candidates. That error contract is the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool returns, then identifier rules, then error behavior — a sensible ordering with no filler sentences. It is denser than average, but each clause carries distinct information rather than restating the name or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description must convey return content, and it does so by enumerating the three data sections; pagination recovery is delegated to the well-documented resultPath/resultOffset parameters. It stops short of describing the output shape or how the sections are keyed, which for a no-output-schema tool leaves a small residual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes beyond the schema's terse 'Stock ticker (e.g. AAPL, GOOGL)' to specify verified share-class variant forms (BRK-B, BRK/B, BRK B, brk.b → BRK.B) and the resolvedTicker echo. The period and pagination parameters are left entirely to the schema, which is acceptable given its coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information about a security') and enumerates the three payload areas: current owners with share counts and values, quarterly ownership history, and recent buy/sell activity. It is clear what the tool returns, but it never contrasts itself with the close sibling get_security_holders, so the agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description says what data comes back, from which an agent infers 'use this when you need a full security profile'. There is no explicit when-to-use, when-not-to-use, or alternative-naming guidance despite several overlapping siblings (get_security_holders, get_position_history, get_investor_holdings). The ticker-variant and error-recovery notes are input guidance, not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_security_holdersGet security holdersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum returned investors (default 25) | |
| slugs | No | 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 | |
| offset | No | Default 0. Repeat with nextOffset and identical filters to continue. | |
| period | No | Reporting quarter or month; omit for the newest 75%-covered consensus quarter | |
| ticker | Yes | Ticker, CUSIP, or s-123 security identifier | |
| changeType | No | Optional admitted quarter-action row filter, on every plan; applied before paging. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, it discloses important behavior: totalCount includes exits before paging, population counts precede changeType filtering, exits and family aggregate totals are included, tie-breaking rules for portfolioRank, portfolioWeightPct scope, and resultContinuations overflow recovery. These details materially reduce ambiguity about what the returned counts and rows mean.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, starting with the primary purpose and then covering filtering, counts, pagination, and error recovery. Most sentences carry useful information, though the single-paragraph format makes the density slightly harder to scan than an ideally structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex read-only tool with eight parameters and no output schema, the description explains return semantics, count behavior, pagination, identifier normalization, and error repair. It provides enough information for an agent to invoke the tool correctly and interpret the main returned values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is already strong, but the description adds meaningful semantics for changeType filtering order and scope, ticker normalization variants, slug family aggregate representation, and period default behavior. It does not need to repeat every schema detail, but it usefully clarifies the most error-prone inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: showing tracked investors who hold a security, along with the exact data fields returned. It also implicitly distinguishes this per-security holder view from sibling investor-centric tools such as get_investor_holdings, so an agent can identify the correct tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: optional investor slug and period restrictions, resolve_company for identifier resolution, and continuing via nextOffset with identical filters. It also clarifies that changeType is a per-security row filter rather than a screener filter, though it does not explicitly compare this tool against every sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_company_filingsList company filingsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| ticker | Yes | Stock ticker, CUSIP or stable security ID (s-123) | |
| formTypes | No | 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. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent safety, and the description adds the operational detail they can't: newest-first ordering, which form types get full text vs. AI summaries vs. proxy extractions vs. metadata-only, the nextOffset/resultContinuations pagination contract, and repairable error behavior with up to five resolve_company candidates. That is a substantial disclosure load beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the highest-value facts (ordering and returned fields) and free of filler, but the remaining rules are packed into an undifferentiated run of sentences. A short bulleted split of filtering, pagination and identifier rules would scan faster, though nothing is genuinely wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must convey the return shape, and it does so field by field. Filtering, pagination, identifier normalization and error recovery are all covered, leaving nothing an agent needs in order to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage and no description at all on limit/offset, the description carries real weight: it explains formTypes exact-match/default semantics, the ticker normalization rules (BRK-B, BRK/B, BRK B → BRK.B) and resolvedTicker echo, and how resultPath/resultOffset continuation works. It stops short of stating the default page size or the 30-row ceiling on limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('List company filings') plus sort order and the exact payload fields (accession, items, AI headline, hasSummary, hasText, hasStatements, sourceLink). That is enough to separate it from search_disclosures, get_filing_summary and read_filing_section without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the default form universe (10-K/10-Q/20-F, 8-K/6-K, DEF 14A incl. amendments) and the when-to-use rule for formTypes, plus that other forms like 424B4/S-1 are listed only when requested. It also escalates unknown identifiers to resolve_company, but it never contrasts itself with sibling tools such as search_disclosures or get_filing_summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_investorsList investorsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows requested; byte-bounded pages may contain fewer. Follow nextOffset. | |
| offset | No | Default 0; follow nextOffset with the same arguments. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. | |
| investor_style | No | Optional primary-style metadata filter; available on every plan. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile costs the description nothing. It adds real value beyond that: default 50 / max 100 byte-bounded pages, nextOffset follow-up, the 75%-coverage consensus-quarter fallback, and the caution that firm 13F and fund N-PORT must never be summed. Those are substantive behavioral disclosures that lift it above a bare 'list' verb, though the pagination guidance largely restates the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and each sentence carries information — the consensus-quarter and fund-family sentences materially affect interpretation. It is dense and slightly redundant with the schema on pagination mechanics, costing it the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must describe the response, and it does: latest portfolio period, total value, position count, consensus stats, nextPeriod {period, investorsFiled}, fundCount/funds, plus the pagination continuation contract. An agent can call and interpret this tool without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-parameter descriptions for limit, offset, resultPath, resultOffset and the investor_style enum, so the schema already does the heavy lifting. The description adds the default of 50 rows, the 100-row ceiling, and that investor_style is available on every plan — marginal but genuine value. 3 reflects the baseline where the schema is authoritative.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list tracked superinvestors) and enumerates what each row carries: primaryStyle, latest portfolio period, total value, position count, plus consensus stats. The fund-family/firm dedup clause and the 13F vs N-PORT warning make the scope unmistakable versus the many get_investor_* and screen_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this to see who is being tracked or for dashboard-level questions" gives a clear selection context, and the drill-down note about fund slugs points toward the detail tools. It stops short of naming an explicit alternative (e.g. get_investor_summary) or a when-not-to-use condition, so it does not reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_statementsList statementsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Optional words matched against report titles, case-insensitive, any order, across punctuation | |
| offset | No | ||
| ticker | Yes | Company ticker, CUSIP, or stable security ID s-123 | |
| accession | Yes | Exact accession from page context or list_company_filings | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world. The description adds real behavioral context beyond that: independence from AI summaries, pagination via nextOffset, ticker normalization with resolvedTicker echo, and a repairable error path with up to five candidates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, each carrying distinct information: scope, return shape, independence from summaries, and pagination/error/normalization behavior. Front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return fields and continuation mechanics, plus error recovery and ticker normalization. Minor gaps remain around limit defaults and the relationship between nextOffset and the offset parameter, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so the schema covers much of the ground. The description still adds meaningful semantics for the ticker parameter (share-class variant normalization) and pagination follow-through that the schema does not fully convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: discovering primary statements, notes, and detailed tables in one published filing, and enumerates what is returned (statement IDs, names, source links). This is clearly distinguishable from read_statement (reads content) and list_company_filings (lists filings).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope ('one published filing') and required accession imply the workflow, and the description routes unknown identifiers to resolve_company candidates. It does not explicitly name sibling alternatives or exclusions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_filing_sectionRead filing sectionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | 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. | |
| part | Yes | SEC Part the section belongs to ('I'..'IV') | |
| offset | No | Character offset; default 0. Pass nextOffset to continue. | |
| ticker | Yes | Stock ticker, CUSIP or stable security ID (s-123) | |
| accession | Yes | Filing accession number | |
| sectionId | Yes | Section id, or alias such as 3, Item 3, 1A or Item 7A; discover ids with get_filing_summary | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, it discloses paging behavior (~12,000 characters), nextOffset continuation, missing-section behavior returning availableSections, find semantics including found:false and suggestions, offset indexing, ticker normalization, and repairable error behavior. This is unusually rich operational context with no contradiction of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and grounding rule are front-loaded, and every sentence carries useful operational detail. It is dense and somewhat long, with some overlap between the find/offset prose and schema descriptions, but the length is largely justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, 8-parameter read tool with no output schema, the description covers the important return and continuation behaviors: page size, nextOffset, missing sections, find results, and error recovery. Nothing an agent critically needs in order to call it correctly appears absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: sectionId aliases, ticker normalization variants, offset continuation, and the optional literal find behavior with suggestions. It stops short of exhaustively explaining resultPath/resultOffset, but adds substantial value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the raw text of one filing section') and explicitly distinguishes itself as the grounding tool versus get_filing_summary and search_filing_text. An agent can immediately tell what it returns and why it exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: verify or quote filing language before factual claims, source identifiers from get_filing_summary or search_filing_text, and read Risk Factors/MD&A before downgrading a claim. It also names the alternatives that supply the required accession/part/sectionId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_statementRead statementARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | 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. | |
| offset | No | ||
| rowIds | No | ||
| ticker | Yes | Company ticker, CUSIP, or stable security ID s-123 | |
| accession | Yes | Exact accession from page context or list_company_filings | |
| columnIds | No | ||
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| textOffset | No | ||
| statementId | Yes | ||
| columnOffset | No | ||
| column_limit | No | ||
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. | |
| footnoteOffset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, and the description still adds substantial behavior beyond them: pagination via rows and columns, nextTextOffset/nextFootnoteOffset continuation protocol, budgeting text with rowIds: [], the empty-cell-plus-non-null-offset recovery path, ticker normalization with resolvedTicker echo, repairable errors with up to five resolve_company candidates, and a data-integrity warning against summing unlike units or quarterly vs cumulative periods.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose leads, then continuation mechanics — a sensible front-load with no filler sentences; every rule maps to a real failure mode an agent would hit. It is dense to the point of being packed into one paragraph, which slightly hurts scanability for a 14-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter paginated reader with no output schema, the description covers what comes back (raw numbers, scale, unit, period, dimensions, links) and how to keep paging, plus error/identifier edge cases. The remaining gaps (simple limit/offset semantics) are low-risk and partly documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 36% schema coverage across 14 parameters, the description does real work: it explains rowIds/columnIds as cell targeting, textOffset/nextTextOffset and footnoteOffset/nextFootnoteOffset pairing, and preserves the 'column_limit' spelling. It leaves limit, offset, columnOffset and statementId's provenance largely to inference, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Read structured filing rows and cells') and enumerates the returned payload — raw numbers, display scale, unit, period, dimensions, source links. That scope cleanly separates it from list_statements (enumeration), read_filing_section (prose) and get_company_financials (Core metrics).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for numbers absent from Core and to explain the selected statement' gives a concrete selection condition, and the continuation rules (textOffset, footnoteOffset, rowIds/columnIds targeting, empty-cell retry) tell the agent exactly how to proceed on follow-up calls. It stops short of naming a sibling alternative by name for the borderline cases (e.g. when to prefer search_filing_text for narrative).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_companyResolve companyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Company name or ticker (e.g. 'Microsoft', 'MSFT', 'Apple') | |
| offset | No | Default 0. Repeat with nextOffset and identical filters to continue. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. | |
| includeInactive | No | Also return companies with no SEC CIK (delisted shells, 13F-only issuers). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the shape of the result (including has-financials and has-filing-text flags) and the continuation protocol ('Follow nextOffset as offset with the same filters'). It does not explain the nested resultPath/resultContinuations overflow case, which is the least obvious behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, and the sequencing instruction ('use this FIRST') is front-loaded immediately after the purpose statement. Every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned fields and the pagination follow-up, which is enough to call and continue correctly. It stops short of saying what to do when resolution yields multiple candidates or no match, a real decision point for a resolver tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and all five parameters are already documented. The description reinforces the offset continuation contract ('same filters') but says nothing about includeInactive or the resultPath/resultOffset recovery mechanics, so it adds only marginal meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resolve a company name or ticker to candidate companies') and enumerates the return payload (ticker, name, CIK, financial-data/filing-text flags). It is clearly distinguishable from siblings like get_company_financials or list_company_filings, which consume the output of this tool rather than produce the identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'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' gives an explicit ordering rule, a trigger condition, and names the dependent tool family. No ambiguity about when to reach for this versus a lookup-only sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_insider_activityScreen insider activityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cap | No | Current market-cap band: micro (<$300M), small ($300M-$2B), mid ($2B-$10B), large (>$10B). A company with no known cap is in no band. | |
| role | No | Whose filings count, by each filing's own role class. 'all' adds 10% owners, whose sales are not management trades. Default 'management'. | |
| side | No | Which side qualifies a company. Default 'buys'. | |
| sort | No | net = net USD, buyers = distinct filing groups, latest = last filing, below_ref = furthest under the insiders' own buy price. Default 'net'. | |
| cursor | No | nextCursor from a previous call. | |
| preset | No | 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 | No | Look-back window. Default '1m'. | |
| minValue | No | USD floor on the window's plausible-price total for the side being screened. Default 100000. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| clusterOnly | No | Keep only companies where 2+ filing groups bought within 14 days. | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. | |
| discretionaryOnly | No | Count only open-market rows the insider chose to time, excluding 10b5-1 plan trades and filings with no plan checkbox. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/idempotent safety, and the description adds substantial non-obvious behavior: USD totals exclude pricePlausible=false rows while unverifiable prices still count, 'discretionary' vs 10b5-1 semantics with a Dec-2022 checkbox cutoff, and a hard cap of 25 companies plus total count. Null-price and withheld-market-cap behavior (deliberate refusal, quote the reason) are disclosed rather than left to guess.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the body becomes a long undifferentiated wall of field-level rules (priceVsRef, marketCapBasic, sharesObservedAt, sharesClassScope, marketCapBasis, marketCapWithheldReason, clusterBuyers) plus style directives. Much of this belongs in a return-value reference or in per-field guidance rather than a single prose block. Length and density make it hard to parse even though most sentences carry real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, zero-required, no-output-schema tool, the description covers what comes back (ranking, per-company buyer detail, priceVsRef, latestClose nulls, market-cap basis and withheld-reason strings, 25-row cap plus total count) and how paging works via cursor/resultPath. Nothing an agent needs to call and interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description still adds interpretive meaning beyond the schema: it explains that 'discretionary' reflects the filing checkbox rather than a 10b5-1 plan and that unanswered checkboxes are 'unknown', and it ties minValue to plausible-price totals. It does not, however, explain preset interactions or the cursor/resultPath overflow mechanism, which the schema hints at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource (site-wide insider screener at /insiders ranking companies by insider flow) plus the output dimensions (who bought, what they paid, current price). It explicitly differentiates from the sibling get_insider_activity by scope: many companies vs one named company.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ("which companies are insiders buying") and an explicit exclusion naming the correct alternative (get_insider_activity) for the single-company case. It also constrains response style (no verdicts, no disclaimers), which shapes invocation expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_stock_consensusScreen stock consensusARead-onlyIdempotentInspect
Screen stocks by material quarterly activity among tracked investors. Default ranking is the weighted score (2NEW + INCREASED - DECREASED - 2SOLD), 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.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Default: buy. | |
| limit | No | ||
| offset | No | Default 0. Repeat with nextOffset and identical filters to continue. | |
| period | No | Reporting period like '2026Q2'. Omit for the latest substantially complete quarter. | |
| sortBy | No | Default: score. Available on every plan; preserves plan row caps. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. | |
| min_investors | No | ||
| investor_style | No | Optional primary investor styles to include (OR semantics). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, but the description adds material context they cannot: sortBy is available on every plan including free and anonymous/demo, counts and dollars are recalculated from only the requested styles, and pagination continues via nextOffset with identical filters. Those are non-obvious behavioral traits an agent would otherwise get wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five dense sentences, all front-loaded with the screening purpose and ranking before the sortBy guidance. Every sentence carries information, but the sortBy discussion is compressed into one long clause chain that slightly hurts scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the tricky parts of a 9-parameter screening tool with no output schema: ranking semantics, plan availability, style-scoped recalculation, and both pagination mechanisms (nextOffset and resultPath overflow). It omits what a result row contains, which the absence of an output schema leaves unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 78%, so the baseline is 3, and the description earns above that by explaining what each sortBy value actually ranks and that 'side: sell' reverses the default score. It also clarifies offset/nextOffset continuation and lists valid investor_style keys, though it leaves min_investors and limit defaults to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus scope: 'Screen stocks by material quarterly activity among tracked investors'. The default ranking formula (2*NEW + INCREASED - DECREASED - 2*SOLD) makes the result semantics concrete and separates it from list-style siblings like get_security_holders or get_investor_holdings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete selection guidance for the ordering decision: 'Use sortBy: buyers to answer which stocks did the most funds buy/add', and explains what sellers and net_value rank. It does not explicitly exclude or name sibling tools as alternatives, so it falls short of a full when/when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (e.g. 'Buffett', 'AAPL', 'Apple') | |
| offset | No | Default 0. Repeat with nextOffset and identical filters to continue. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering read-only, idempotent, non-destructive, and closed-world behavior, the description adds substantial behavioral context: returned investor fields, role definitions for firm/fund/investor, parentSlug semantics, owner counts on security matches, and the one-character investor-skip rule. These details materially help an agent predict results and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: the first sentence states what can be searched, and subsequent sentences cover matching rules, return semantics, selection behavior, and pagination. Every sentence appears to earn its place, with no obvious repetition of annotations or schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description explains what investor and security matches carry, including roles and owner counts. Combined with rich annotations and a fully documented parameter schema, it gives an agent enough information to call the tool correctly and interpret the main results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters and sets the baseline at 3. The description still adds meaningful query semantics beyond the schema: the two-character minimum for investors, the one-character security exception, how names/tickers map to firms or funds, and how nextOffset continues the search.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and two concrete resources: investors by name, manager, slug, fund ticker, or alias, and securities by ticker or issuer name. It also positions the tool as a slug/ticker resolver before detail lookups, which separates it from the get_* detail siblings and from filing-text search siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this tool to find the correct slug or ticker before looking up details, and it explains the continuation pattern with nextOffset. It does not name alternatives such as list_investors or resolve_company, nor does it state when not to use search, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_disclosuresSearch disclosuresARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Literal English substring, e.g. debt, covenant, restructuring. Try synonyms in separate searches. | |
| offset | No | ||
| ticker | Yes | Company ticker, CUSIP, or stable security ID s-123 | |
| accessions | Yes | ||
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| matchOffset | No | Location offset within each report; default 0. Pass a report nextMatchOffset with the same report page offset to discover more locations. | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, so the safety bar is met; the description adds genuinely non-obvious behavior: bounded snippets with read_statement coordinates and source links, per-report nextMatchOffset continuation and resultPath overflow recovery, ticker normalization with resolvedTicker echo, and a repairable error returning up to five resolve_company candidates. Minor deduction because the nextMatchOffset vs nextOffset pagination sentences are slightly hard to disentangle and limit behavior is never mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded, and nearly every sentence carries load (routing, caveat, pagination, error recovery). The two adjacent continuation sentences about nextMatchOffset and nextOffset are somewhat overlapping and cost a bit of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, no-output-schema search tool this covers the important ground: what comes back, how to paginate, how overflow is recovered, and what errors look like. The unresolved pieces are the limit and offset parameters, which are neither documented in the schema nor the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 63%, so the description must do some lifting, and it does: it explains the intent behind accessions (one filing vs cross-period comparison), the matchOffset/nextMatchOffset pairing with the same page offset, and the resultPath/resultOffset overflow pattern. It never explains limit (1-8) or offset, which carry no schema description, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) plus exactly what is searched (structured notes, row labels, text cells, footnotes) and the matching mode (English literal substring). It explicitly separates itself from the narrative-text sibling by naming search_filing_text, so an agent can pick the right tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the operating envelope (1-3 company-owned accessions, single filing vs cross-period comparison) and an explicit exclusion routing narrative chapters to search_filing_text. It also states a use-condition caveat: read source reports before making claims or comparing figures, and no match never proves absence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filing_textSearch filing textARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Keywords to search for (e.g. 'supply chain', 'goodwill impairment') | |
| offset | No | Match offset; default 0. Follow nextOffset. | |
| ticker | Yes | Stock ticker, CUSIP or stable security ID (s-123) | |
| accession | No | Limit the search to one filing. Omit to search all of the company's filings. | |
| resultPath | No | Nested overflow recovery: use the exact resultContinuations call returned by this tool (JSON pointer). | |
| resultOffset | No | Offset within resultPath; copy from resultContinuations. Keep the original request arguments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses the ranked-snippet return shape, the '[Separate passage]' compatibility separator warning, nextOffset chaining, resultContinuations overflow recovery, ticker normalization with resolvedTicker echo, and the repairable-error behavior with up to five resolve_company candidates. This is unusually rich behavioral context for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return shape, then caveats and routing. Dense but each sentence carries distinct operational information; only the compatibility-separator sentence is slightly granular for its position.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter search tool with no output schema, the description covers returns, pagination, overflow recovery, identifier normalization, and error remediation. An agent has everything needed to call it, chain it, and recover from failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds value by explaining ticker variant acceptance and normalization, the accession scoping semantics, offset chaining through nextOffset, and that query should use concrete filing terms. It does not mention resultPath/resultOffset beyond what the schema already says, which keeps it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Full-text keyword search over a company's filing sections,' then describes exactly what comes back (ranked matches, snippets[], accessionNumber/part/sectionId). It explicitly distinguishes itself from read_filing_section and get_company_financials, so an agent can pick it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a positive condition ('locate where a topic or phrase is discussed when you don't already know the section'), names two alternatives with their selection conditions (read_filing_section for known phrases, get_company_financials for numeric values), and adds an optional narrowing path via accession. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
24 tool updates
- First observed
compare_investors - First observed
get_company_financials - First observed
get_filing_summary - First observed
get_insider_activity - First observed
get_insider_transactions - First observed
get_investor_activity - First observed
get_investor_holdings - First observed
get_investor_periods - First observed
get_investor_summary - First observed
get_market_overview - First observed
get_position_history - First observed
get_security_detail - First observed
get_security_holders - First observed
list_company_filings - First observed
list_investors - First observed
list_statements - First observed
read_filing_section - First observed
read_statement - First observed
resolve_company - First observed
screen_insider_activity - First observed
screen_stock_consensus - First observed
search - First observed
search_disclosures - First observed
search_filing_text
Publisher details
- Operator
- FilingSpy LLC
- Operator website
- https://filingspy.com/ · Publisher source
- Vendor relationship
- Unknown
- Documentation
- https://filingspy.com/developers/mcp · Publisher source
- Trust center
- Not applicable
- Restrictions
- Unknown
Related MCP Connectors
SEC EDGAR data as tools: filing search, full text, XBRL financials, insider trades, 13F, 8-K events.
Holdings of great value investors: 13Fs, overseas stakes a 13F misses, 5% stakes, insider buys
SEC filings, insider trades, and earnings data
Search SEC filings, read 10-K/8-K, query XBRL facts, track Form 4 insider trades.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceSEC EDGAR for agents: Form 4 insider trades, cluster buys, filings, XBRL financials and full-text search. Free, no API key.MIT
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to download, parse, and analyze SEC EDGAR filings, including 10-K/Q reports, XBRL financial statements, and insider trading data. It provides structured access to institutional holdings, corporate events, and financial facts for comprehensive investment research.19MIT

EvidInvestofficial
AlicenseNot gradedqualityBmaintenanceSEC-filed financial statements back to 1985 for US-listed companies, plus global coverage, every number cited to its filing with an accession number. 59 tools for income statements, balance sheets, cash flow, growth rates, valuation (DCF, reverse DCF, comparables, fair-value range), SEC filing and earnings-call search, supply chains, 13F holders, options positioning and thesis monitoring.MIT- AlicenseAqualityAmaintenanceReal-time SEC Form 4 insider trading data — transactions with post-trade returns, cluster-buy signals, Form 144 early warnings, and 13F institutional holdings. 27 tools + 6 research prompts; free tier available.38125 npm2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.