The issuer record, as of any date, with the receipt.
As Of · on Data Vintage · Replay
read at render: the shelf ledger (shelf/state.json, tools.replay) and the gate's receipt counter · ledger 2026-10-28
get_as_of is the issuer record as it stood on a date: an issuer by ticker, ISIN or LEI plus a date returns the signed record of that day — every field with its source and read date, the sealed disclosure lines of the market-year up to that date — signed by the node of the issuer's market and receipted, so a backtest can show what it read and when. Nothing is restated and nothing is filled backwards: before the record existed the answer says before_record; in a market-year not yet sealed it says not_sealed and names the earliest sealed date.
1 What it is
- 1.1
- Built specifically so an AI agent can read the issuer record as it stood on any date since 2021, with the proof that it read it.
- 1.2
- Any agent gets in; it pays in the call. A firm licenses the vintage.
- 1.3
- Sealed years, 2021 forward, done. Each market lights as its vintage seals.
2 What it is not
Not a price. Not a terminal. Not a news feed. Not a restated dataset.
3 The tool
| field | specification |
|---|---|
| Input | issuer (ticker, ISIN or LEI) · as_of (ISO date) · market (optional; the owning node resolves it if absent) |
| Output | The signed issuer record version whose validity covers as_of: every field with value, source page, read date and effective date; version id; node signature and key id (kid); the RCO receipt (id, hash) |
| Receipt | Written on every cleared read under the Allooloo writer key; the receipt id is returned in the answer. |
| typed error | when |
|---|---|
unknown_issuer | no issuer on the register for this identifier |
before_record | the record did not exist on that date; nothing is inferred backwards |
not_sealed | the market-year is not yet sealed; the answer names the earliest sealed date (and, in the current year, the date it is sealed through); no partial vintage is served as final |
not_found | the market or record asked for is not on this door |
- 3.1
- One call:
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_as_of","arguments":{"issuer":"NASDAQ:MSFT","as_of":"2023-03-15"}}}athttps://mcp.getasof.ai/mcp. - 3.2
- Nothing is answered from memory. Identity fields answer on the read-date clock: a field is held only if the record had read it by the date asked; the disclosure lines are the sealed vintage — public filings dated on or before that date, each with its source and read date, each signed.
- 3.3
- Paying for a read: every read is free unless the agent asks for the offer (header
x402-pay: 1); the door then answers HTTP 402 with a signed offer and the same call carries the payment and the receipt — data-paygo.ai.
4 The edge
Point-in-time fundamentals exist as premium products elsewhere; replay exists on terminals. "As of a date" alone is not the edge. The edge is five things the record already has by construction, which no feed vendor built:
| property | what it means for a quant |
|---|---|
| Two clocks | Every fact carries when it was true in the world (effective) and when the record learned it (read date). get_as_of answers on the second clock — what was knowable that day. That is the only honest basis for a backtest; most feeds have one clock and overwrite. |
| Append-only, signed versions | Nothing is restated in place. A change is a new signed version; the old one is kept. The as-of answer is a lookup, never a recomputation, so it is the same answer forever. |
| Per-field provenance | Source page and read date on every field. A regulator's restatement and our re-read are distinguishable. |
| Receipts (RCO) | Every read writes an RCO-10060 receipt chaining the answer hash. The firm can prove what a model relied on. |
| Agent-native, open | MCP door, verb-object tool name, human page free to read, x402 to pay. Built for the reader that is actually arriving — an agent — not a human with a seat. |
Others sell point-in-time data; Allooloo sells point-in-time proof.
5 The proof
- 5.1
- Each get_as_of read is cleared and receipted: subject, jurisdiction, rule version, the stated time of the read, the hash of the signed answer, and the link to the previous receipt in the chain. The door signs the receipt; the producing node signs the content under the record key.
- 5.2
- verify_receipt is public. Anyone holding the receipt and the answer can confirm the answer is the one that was served, unaltered.
- 5.3
- A firm's own auditor key (issue_auditor_key) lets model-risk, internal audit or an external auditor list and verify every as-of read behind a model — the signed input list of a backtest, replayable to any date.
- 5.4
- The quant's artefact is therefore not a CSV. It is a receipt chain: a signed, chained statement of every record the model read, as of when, and what it said. Model validation, MiFID II record-keeping and SR 11-7 style reviews want exactly this and have never been able to buy it.
- 5.5
- KYP the facts · Issuerwire the news · RCO the proof.
6 Access
Any MCP client that speaks Streamable HTTP:
{
"mcpServers": {
"getasof": {
"type": "http",
"url": "https://mcp.getasof.ai/mcp"
}
}
}Claude Code:
claude mcp add --transport http getasof https://mcp.getasof.ai/mcp
- 6.1
- Door:
https://mcp.getasof.ai/mcp— the same router ashttps://mcp.getissuer.ai/mcp: same index, no second copy of the history; read-only, no authentication, no account. get_as_of is routed to the node of the issuer's listing; the node signs and receipts; the router forwards. - 6.2
- Agent Card (A2A):
https://agent.getasof.ai/.well-known/agent-card.json. - 6.3
- Tools:
get_as_of, withresolve_issuer·list_events_since·list_nodeson the same door. list_events_since stays where it is; get_as_of reads the same history. - 6.4
- Regional doors: every node door answers get_as_of for its own market (
mcp.<market>-cm-kg.ai/mcp,<market>.eu-cm-kg.ai/mcp). - 6.5
- Registry entry:
registry.modelcontextprotocol.io · io.github.allooloo/getasof.
7 Lanes
| lane | what | where |
|---|---|---|
| Agent, per read | x402 on the existing per-call till. USDC and Open USD on Base. | data-paygo.ai |
| Firm, licence | Data Vintage enterprise licence. | data-licence.ai |
| Audit | issue_auditor_key — the firm's own key to list and verify its receipt chain. | rco-records.ai |
8 Data path
- 8.1
- Store: the Replay store under Data Vintage — sealed market-years, 2021 forward. get_as_of is a read over it. No new store, no second copy of the history.
- 8.2
- Index: the router holds an index only; the record is served by the owning node's regional door in its own jurisdiction. getasof.ai routes the same way.
- 8.3
- Nightly: the OpsAgents re-slate the trading day; a sealed year is immutable thereafter. Receipts chain per writer.
- 8.4
- Two clouds: Azure primary, AWS warm standby (Data Ark). The vintage and the receipt chain are both in the ark.
- 8.5
- Markets light one by one as each vintage seals (us first, then the roster). The door answers not_sealed until then rather than guessing.
9 Markets
| node | market | sealed vintage | state |
|---|---|---|---|
ae-cm-kg | United Arab Emirates | not sealed yet — the door answers not_sealed | live |
at-cm-kg | Austria | not sealed yet — the door answers not_sealed | live |
au-cm-kg | Australia | not sealed yet — the door answers not_sealed | live |
be-cm-kg | Belgium | not sealed yet — the door answers not_sealed | live |
bm-cm-kg | Bermuda | not sealed yet — the door answers not_sealed | live |
br-cm-kg | Brazil | not sealed yet — the door answers not_sealed | live |
ca-cm-kg | Canada | not sealed yet — the door answers not_sealed | live |
ch-cm-kg | Switzerland | not sealed yet — the door answers not_sealed | live |
cz-cm-kg | Czech Republic | not sealed yet — the door answers not_sealed | live |
de-cm-kg | Germany | not sealed yet — the door answers not_sealed | live |
dk-cm-kg | Denmark | not sealed yet — the door answers not_sealed | live |
es-cm-kg | Spain | not sealed yet — the door answers not_sealed | live |
fi-cm-kg | Finland | not sealed yet — the door answers not_sealed | live |
fr-cm-kg | France | not sealed yet — the door answers not_sealed | live |
gr-cm-kg | Greece | not sealed yet — the door answers not_sealed | live |
hk-cm-kg | Hong Kong | not sealed yet — the door answers not_sealed | live |
ie-cm-kg | Ireland | not sealed yet — the door answers not_sealed | live |
in-cm-kg | India | not sealed yet — the door answers not_sealed | live |
it-cm-kg | Italy | not sealed yet — the door answers not_sealed | live |
je-cm-kg | Jersey | not sealed yet — the door answers not_sealed | live |
jp-cm-kg | Japan | not sealed yet — the door answers not_sealed | live |
kr-cm-kg | South Korea | not sealed yet — the door answers not_sealed | live |
ky-cm-kg | Cayman Islands | not sealed yet — the door answers not_sealed | live |
lu-cm-kg | Luxembourg | not sealed yet — the door answers not_sealed | live |
mx-cm-kg | Mexico | not sealed yet — the door answers not_sealed | live |
nl-cm-kg | Netherlands | not sealed yet — the door answers not_sealed | live |
no-cm-kg | Norway | not sealed yet — the door answers not_sealed | live |
pl-cm-kg | Poland | not sealed yet — the door answers not_sealed | live |
pt-cm-kg | Portugal | not sealed yet — the door answers not_sealed | live |
se-cm-kg | Sweden | not sealed yet — the door answers not_sealed | live |
sg-cm-kg | Singapore | not sealed yet — the door answers not_sealed | live |
tw-cm-kg | Taiwan | not sealed yet — the door answers not_sealed | live |
uk-cm-kg | United Kingdom | not sealed yet — the door answers not_sealed | live |
us-cm-kg | United States | 2021 → 2026 | live |
source: list_nodes at https://mcp.getissuer.ai/mcp and the shelf ledger, read at render
10 Machine kit
- 10.1
/llms.txt·/index.md·/facts.json·/.well-known/agent-card.json·/.well-known/mcp.json·/.well-known/x402.json·/.well-known/security.txt·/sitemap.xml·/robots.txt·/mcp.json- 10.2
- Forwards here (301, whole zone): getasof.com, getasof.org, getasof.io.