Annalist Financial Statements
Server Details
Company financial statements and ratios from official filings, each figure with its source. Keyless.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
Each tool targets a clearly distinct resource or action: company lookup, snapshot metadata, source documents, statement figures, computed ratios, and buyout modelling. The only apparent overlaps are handled by descriptions: get_statement returns raw figures while get_ratios returns computed values, and get_sources resolves provenance referenced by the other tools.
All tool names use consistent snake_case verb_noun phrasing: get_ratios, get_snapshot_info, get_sources, get_statement, run_buyout, and search_companies. The get_/run_/search_ verb prefixes accurately signal retrieval, modelling, and lookup operations.
Six tools is well scoped for a financial snapshot and modelling server. Each tool covers a meaningful stage of the workflow, and there are no redundant or trivial entries.
The surface covers the core read-only workflow: finding companies, inspecting snapshots, retrieving statements and ratios, resolving sources, and running a buyout model. A notable gap is that point-in-time snapshot metadata is supported, but statement and ratio retrieval appear limited to the latest snapshot, which may block historical analysis.
Available Tools
6 toolsget_ratiosGet financial ratiosARead-onlyIdempotentInspect
Ratios computed from a company's latest snapshot by formulas with stable ids (bank.roe, corp.roic). Every value gives its unit, period and the snapshot figures it was computed from, each with its value and source document ids. Banks use the bank template (quarterly values annualised); US companies use the corporate template (annual, quarterly and trailing four quarters, ttm), which includes credit metrics, liquidity, earnings quality and forensic scores; scores, credit reconciliations and the liquidity cover also give their parts, named with their coefficients in the catalogue. A value computed with an estimated input, such as the lease cost of the latest fiscal year for quarters that do not report it, names it in estimates; a ratio that a rule leaves out for the company gives the reason in excluded. Call without ratios to list the catalogue of one frequency.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | last period, in the same forms | |
| from | No | first period: a fiscal year (2024), a fiscal quarter (FY2024 Q2) or an ISO date | |
| limit | No | maximum values, latest periods kept (default 120) | |
| ratios | No | ratio ids or short names, for example ["roe", "corp.operating_margin"]; leave empty for all | |
| compact | No | true for the values with their units only, without the conventions, the catalogue entries, the inputs and the citation format | |
| company | Yes | company id from search_companies | |
| category | No | keep one category, for example Profitability | |
| frequency | No | default annual |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only establish that this is a safe read-only, idempotent operation. The description adds substantial behavior beyond that: each value includes unit, period, snapshot figures and source document ids; banks use annualised quarterly values; US corporates include annual, quarterly and ttm data with credit/liquidity/forensic metrics; estimates and excluded ratios are explained; and catalogue mode is documented.
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 the content is dense with little wasted language. The sentences are long and pack multiple concepts together, but they generally earn their place given the tool's complex template, estimate, exclusion and citation behavior.
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 most of the return-value explanation, and it does so thoroughly by describing units, periods, source ids, template-specific behavior, estimates, exclusions and catalogue output. It is not fully exhaustive on how from/to/limit interact or what the catalogue response looks like, but the schema covers parameter details.
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 some useful parameter context, especially ratio-id examples and catalogue behavior, but it states that calling without ratios lists the catalogue while the schema says leaving ratios empty returns all, creating ambiguity about the ratios parameter.
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 clearly identifies the resource as ratios computed from a company snapshot, with stable formula ids such as bank.roe and corp.roic and a bank/corporate template distinction. It does not explicitly contrast itself with siblings like get_statement, so sibling differentiation is left implicit.
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 gives one concrete usage rule: call without ratios to list the catalogue of one frequency. It also explains template and frequency behavior, but does not state when to use this instead of get_statement or get_snapshot_info, nor does it provide exclusions or prerequisites beyond the schema's company id note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_snapshot_infoGet snapshot informationARead-onlyIdempotentInspect
The latest snapshot of a company: as-of period, release date and time of publication, coverage, conventions (units, signs, fiscal calendar), validation summary, available statements, files with SHA-256 and the citation format. With at, the snapshot that was the latest on that date (point in time); every snapshot published is listed in snapshots.json of the company.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | an ISO date: the snapshot that was the latest on that date, in place of the latest snapshot | |
| company | Yes | company id from search_companies |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a read-only, idempotent, non-destructive, closed-world operation. The description adds useful behavioral context by explaining the latest-vs-point-in-time snapshot selection and enumerating the returned metadata, though it does not discuss authentication, rate limits, or error 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?
The description is dense but front-loads the main resource and returned metadata before explaining the `at` parameter behavior. It is appropriately sized for a metadata-returning tool and has little filler, though the first sentence is quite long.
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 burden of explaining return values. It does so comprehensively by listing the snapshot fields, conventions, validation summary, available statements, files with hashes, citation format, and point-in-time snapshots reference.
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 both parameters are already documented. The description restates the meaning of `at` as a point-in-time selector and does not add meaningful detail about `company` beyond the schema's reference to search_companies. Baseline 3 is appropriate.
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 clearly identifies the resource as a company snapshot and enumerates the metadata it returns, such as as-of period, release date, coverage, conventions, validation summary, statements, and files. It is distinguishable from siblings like get_statement and get_ratios by scope, though it does not explicitly name or contrast those alternatives.
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 point-in-time use of `at` is clearly explained: it selects the snapshot that was latest on a given date. However, the description does not explicitly state when to use this tool versus siblings such as get_statement or get_sources, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sourcesGet source documentsARead-onlyIdempotentInspect
Source documents of a company's latest snapshot: kind, period, release or filing date (indexed: the date an index added a report that states no date of publication), URL of the official document or of the search page of its store, and SHA-256 of the file used. Pass the document ids found in a statement's sources to resolve them.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | document ids, for example ["10-K:0000320193-25-000079"]; leave empty for all | |
| company | Yes | company id from search_companies |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds real context beyond that: results are restricted to the LATEST snapshot (not historical), the 'indexed' date is defined as the date an index added a report lacking a publication date, and the SHA-256 identifies the exact file version used.
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 sentences, front-loaded with the resource and its fields, then the usage instruction. Dense but every clause carries information; the parenthetical definition of 'indexed' is justified because the term is otherwise ambiguous.
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 burden of return values and it does so by enumerating the record fields. Missing only minor operational detail such as result ordering or whether the empty-ids case is bounded โ small gaps for a two-parameter read 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 baseline is 3, but the description adds meaning the schema does not: it tells the agent that the ids come from a statement's sources list, which is the essential discovery path for that parameter. The company parameter is left to the schema ('company id from search_companies'), which already covers it.
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+resource: retrieves the source documents of a company's latest snapshot, and enumerates exactly what each record contains (kind, period, date, URL, SHA-256). The verb 'get' plus the scope 'latest snapshot' separates it from get_statement and get_snapshot_info, though no sibling is named outright.
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?
'Pass the document ids found in a statement's sources to resolve them' gives a concrete workflow: use this after reading a statement's sources list to resolve document ids. 'Leave empty for all' (in the schema) implies the browse-all case. It stops short of explicit when-not-to-use or naming get_statement directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statementGet a financial statementARead-onlyIdempotentInspect
Figures of one statement for one company from its latest snapshot, filtered by period and item. Every row gives its period with start and end dates, whether each value is reported or derived, and the source document ids of its values; item units are in items. Cite the snapshot and the source document id.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | an ISO date: the snapshot that was the latest on that date, in place of the latest snapshot | |
| to | No | last period, in the same forms | |
| from | No | first period: a fiscal year (2024), a fiscal quarter (FY2024 Q2) or an ISO date | |
| items | No | item keys to keep, for example ["revenue", "net_income"]; leave empty for all | |
| limit | No | maximum rows, latest first kept (default 40, at most 60) | |
| compact | No | true for the rows with their units only, without the conventions, item definitions and citation format | |
| company | Yes | company id from search_companies, for example apple or mizuho | |
| frequency | No | for income_statement and cash_flow (default annual); other statements have one frequency | |
| statement | Yes | income_statement, balance_sheet and cash_flow (US companies); Mizuho also has capital, npl, shares and annual_highlights |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), so the description's job is added context, and it delivers: rows carry period start/end dates, a reported-vs-derived flag, and source document ids, plus the expectation to cite them. Units ('items') and the default/at-most row count are mentioned, though the row cap comes from 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?
Two tight sentences with no filler, leading with what the tool returns and following with the row-shape and citation requirement. Dense but always front-loaded.
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 explain return values, and it does: rows with periods, reported/derived status, and source ids. Combined with a fully documented 9-parameter schema, an agent has enough to call it correctly, though it could say more about ordering or pagination beyond limit.
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 every parameter is already documented, including the 'at' snapshot override and frequency defaults. The description only echoes period/item filtering and the units concept, adding little beyond the schema, so 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?
The description names a specific resource and scope: figures of one statement for one company, from its latest snapshot, filtered by period and item. That is clearly distinct from get_ratios and get_snapshot_info, though no sibling is named 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?
Usage is implied: filter by period and item, and cite the snapshot and source document id in the output. There is no explicit guidance on when to prefer this tool over get_ratios or get_snapshot_info, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_buyoutRun a buyout modelARead-onlyIdempotentInspect
Run the buyout model 1.0 of Annalist Deal Lab on a company's published figures, at its starting values or with the caller's assumptions under the keys of the address of the page (entry, exit_mult, years, debt, growth, margin, tax, base and the others that the starting values list). Returns the returns, sources and uses, the debt schedule, the covenants and the checks of the model, optionally the 3 solvers, every input with its source document ids, and the address of the same deal on the site. Shares and rates are fractions (0.2 for 20%) and multiples are times EBITDA. The result is arithmetic on published figures and the caller's assumptions: it values no company, recommends no transaction and forecasts nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| company | Yes | company id from search_companies, for example apple | |
| solvers | No | also return the highest entry multiple for the target return, the growth it needs and the debt capacity | |
| assumptions | No | assumptions to change, for example {"entry": 8, "debt": 4}; leave out for the starting values |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint, idempotentHint and destructiveHint=false already declaring the safety profile, the description adds useful context: the result is arithmetic on published figures and caller assumptions, and it neither values a company nor recommends a transaction. It also discloses what the return payload includes, including source document ids and the deal address.
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 opening sentence is front-loaded and specific, but the description then becomes very dense, packing a long output list, assumption-key enumeration and unit conventions into run-on sentences. The information is useful, but it could be structured more cleanly.
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 appropriately summarizes the returned data: returns, sources and uses, debt schedule, covenants, checks, optional solvers, inputs with source document ids, and a site address. It also includes an important non-advice disclaimer, leaving only minor gaps such as error behavior or pagination.
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?
The schema already documents all three parameters at 100% coverage, but the description adds meaningful semantics by naming assumption keys such as entry, exit_mult, years, debt, growth, margin, tax and base. It also clarifies that shares and rates are fractions and multiples are times EBITDA, which is not in 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?
The description states a specific verb and resource: it runs the buyout model on a company's published figures using starting values or caller assumptions. It is clearly distinct from the retrieval-oriented sibling tools, though it does not explicitly name or contrast those 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?
The usage context is implied by the output list and the optional assumptions/solvers flags, but the description never explicitly says when to choose this tool over the simpler sibling tools. It also gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesSearch companiesARead-onlyIdempotentInspect
Find companies covered by Annalist by name, ticker, SEC CIK or id, optionally filtered by country. Returns each company's id (used by the other tools), identifiers, sources and latest snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | maximum number of companies (default 20) | |
| query | No | part of a name, ticker, CIK or id; leave empty to list all | |
| country | No | ISO 3166 country code, for example US or JP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, closed-world operation, so the description correctly spends its words on the payload: id, identifiers, sources and latest snapshot. It omits result ordering and what happens when nothing matches, which leaves a small gap.
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 tight sentences with zero filler: the search surface comes first, then the return contents. Every clause carries information an agent would otherwise have to infer.
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 usefully previews the returned fields and explains the id's downstream role. Only minor details, such as ordering or empty-result behavior, are absent for a three-parameter lookup 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 description coverage is 100%, so limit, query and country are already fully documented, including 'leave empty to list all'. The description loosely echoes the query fields without adding syntax or matching behavior, 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 ('Find companies covered by Annalist') and enumerates the exact key spaces it searches: name, ticker, SEC CIK or id. That is enough for an agent to distinguish it from the get_* siblings without inspecting any 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?
Makes the retrieval path clear ('optionally filtered by country') and, crucially, tells the agent that the returned id is what the other tools consume, which implies search-first. It stops short of naming a specific sibling as the follow-up or stating when not to use it.
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.
1 tool update
- Added
run_buyout
5 tool updates
- First observed
get_ratios - First observed
get_snapshot_info - First observed
get_sources - First observed
get_statement - First observed
search_companies
Related MCP Connectors
Read-only fundamentals of developed-market listed companies from official filings, with dates.
SEC-filed company financials with filing citations, plus market data, for AI agents
Icelandic company financials from annual reports; every figure cites its source document and page.
Financial statements, metrics, dividends, and price data for public companies.
Related MCP Servers
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- FlicenseNot gradedqualityDmaintenanceProvides access to comprehensive financial data including income statements, balance sheets, cash flow statements, stock prices, company news, SEC filings, and cryptocurrency information with built-in financial ratio analysis.-
- FlicenseNot gradedqualityDmaintenanceReturns verified financial data (SEC EDGAR & FRED) with machine-readable citations. Guaranteed zero hallucinations for AI agents.-
- AlicenseNot gradedqualityBmaintenanceProvides free SEC filing fundamentals for US public companies, including financial statements, 10-K/10-Q summaries, and 8-K event histories. No API key or signup required.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.