For AI agents
Data Access for AI Agents
Annalist data is available as JSON, CSV and Excel, through a read-only MCP server and with a description for language models, so that an agent can quote a figure with its document. Access requires no account or key.
https://annalist.io/mcpStreamable HTTP, JSON responses, no session. Read-only tools.
/llms.txt and /llms-full.txtThe coverage, the conventions and how to cite, in the llms.txt format.
/api/v1/openapi.jsonOpenAPI 3.1 description of the static JSON and CSV endpoints.
/api/v1/companies.jsonIds, names, tickers and the latest snapshot of each company.
/company/{id}/{id}.xlsxOne Excel workbook per company, with its statements, ratios, findings and checks.
Install in One Click
Each button opens the client, which asks before it adds the server. The server needs no account, key or sign-in.
ClaudeOn the web, in the desktop app or on a phone, open Connectors in the settings, choose Add custom connector and paste the server address above. No sign-in is needed.
ChatGPTTurn on developer mode in the settings of apps and connectors, create a connector with the server address above and choose no authentication. Deep research and company knowledge use the tools search and fetch.
Other clientsAny client that supports remote MCP servers over HTTP takes the server address above. Directories and clients read the server card at /.well-known/mcp/server-card.json.
Connect an Agent
Any client that supports remote MCP servers over HTTP can use the server URL above.
Claude Code
claude mcp add --transport http annalist https://annalist.io/mcp
Project Configuration (.mcp.json)
{
"mcpServers": {
"annalist": { "type": "http", "url": "https://annalist.io/mcp" }
}
}
Python Without an MCP Library
A request to the MCP server is one JSON-RPC message in a POST, so a tool call needs no session and no initialize request first.
Python Standard Library
import json, urllib.request
body = {"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {"name": "search_companies",
"arguments": {"query": "AAPL"}}}
req = urllib.request.Request(
"https://annalist.io/mcp",
data=json.dumps(body).encode(),
headers={"Content-Type": "application/json",
"Accept": "application/json, text/event-stream",
"User-Agent": "my-agent/1.0"})
with urllib.request.urlopen(req) as r:
print(json.load(r)["result"]["structuredContent"])
The User-Agent header in this example is required. The hosting service answers HTTP 403 (Cloudflare error 1010) to every request whose User-Agent starts with Python-urllib, the default of the Python standard library, or with libwww-perl, on the MCP server, the static API and llms.txt alike. The MCP Python SDK, requests, httpx, curl and browsers send other User-Agents and need no change.
Tools
All tools are read-only and return figures with units, methods and source ids.
search_companiesCompanies by name, ticker, SEC CIK or id, with a country filter.
get_company_overviewOne answer on a company: the latest revenue and net income with their change against a year earlier, the latest value of each measure, the current key findings, its peers and its data quality.
get_statementFigures of one statement with units, methods and source ids, for a range of fiscal years, quarters or dates.
get_ratiosRatio values with formula ids, units and the snapshot figures each value was computed from.
get_findingsThe current key findings, each a sentence with its rule, state, figures and source ids, and the history of each finding on request.
screen_companiesCompanies filtered and ranked by the latest value of a measure, by market, sector or industry; an amount is compared within one currency.
compare_companies2 to 4 companies side by side on calendar quarters, as Compare places their fiscal periods, each value in the currency of its company.
get_eventsAcquisitions, disposals, spin-offs, stock splits, restatements and the other corporate events, each with its date and source ids.
get_data_qualityThe data quality of a company: the values that checks confirm, the values derived, the values withheld with their reasons and the figures restated with the document of each value.
get_snapshot_infoCoverage, conventions, the validation summary, statements, files and the citation format.
list_snapshotsEvery snapshot published for a company with its time of publication, for an answer as at an earlier date.
get_sourcesSource documents with URL, release or filing date and SHA-256.
run_buyoutThe buyout model of Deal Lab on the published figures, at its starting values or with the assumptions given: returns, the debt schedule, the covenants and the checks of the model, each input with its source documents, and the address of the same deal on the site.
search, fetchThe documents of the companies that a question names, in the form that ChatGPT connectors and deep research use, each with the address of its page.
Prompts
Clients that show the prompts of a server, as slash commands or in a menu, offer 3 tasks with their steps and the citation format.
company_briefA brief of one company from its overview and its key findings.
credit_reviewThe credit metrics, liquidity, earnings quality and scores of one company.
peer_comparison2 to 4 companies on calendar quarters, with their margins, returns and debt against EBITDA.
Static API
Plain files behind a cache of 5 minutes, with cross-origin access allowed.
Latest Snapshot of a Company
curl https://annalist.io/api/v1/companies/apple/latest.json
One Statement
https://annalist.io/api/v1/companies/{company}/snapshots/{snapshot}/statements/pl_quarterly.json
Ratios of One Frequency
https://annalist.io/api/v1/companies/{company}/snapshots/{snapshot}/ratios/ttm.json
Every Company With Its Latest Measures
https://annalist.io/api/v1/overview.json
Calendar Quarters of a Snapshot
https://annalist.io/api/v1/companies/{company}/snapshots/{snapshot}/calendar.json
Citation
Each figure should be cited with its snapshot and its source document.