The record
A Family Office Record (FOR) is one subject, every field sourced. The field is { value, source_url, read_by, read, state } — and where a second independent public source agrees, second_source_url and second_read_by. The record carries:
- identity — legal name, jurisdiction, structure (single / multi-family / embedded / virtual), formation, registered office
- registrations — each public register the office appears on: register, id, url, status, read
- lei — the Legal Entity Identifier, the spine
- principals — as disclosed on the register, no more
- sectors — as disclosed
- website · aliases (sourced) · events (dated, URL'd) · gaps (declared, with reason)
A field without a URL does not exist. Hearsay, directories that aggregate without citing, and model memory are not sources. Search is a way to find a source page, not a source. Records are confirmed, not signed: the office's signing has not shipped on this record.
States
- sourced — one public source, read and dated
- filled — completed by an engine from a source and not yet confirmed
- confirmed — two independent public sources agree
- conflict — sources disagree; both kept, none chosen
- unverified — a constructed pointer, marked as such
Three passes: harvest (enumerate subjects from the spine register), fill (complete fields from source pages), confirm (a second source per field). Each node's as-of is its sweep start; nodes need not share a calendar date.
Nodes
| Node | Jurisdiction | As of | Records | Door | Spine |
|---|---|---|---|---|---|
| ae-fo-kg | United Arab Emirates | 2026-09-14 | 8 | ae.fo-kg.ai/mcp | GLEIF |
| au-fo-kg | Australia | 2026-09-14 | 24 | au.fo-kg.ai/mcp | GLEIF |
| ca-fo-kg | Canada | 2026-09-14 | 46 | ca.fo-kg.ai/mcp | GLEIF |
| ch-fo-kg | Switzerland | 2026-09-14 | 314 | ch.fo-kg.ai/mcp | GLEIF |
| de-fo-kg | Germany | 2026-09-14 | 182 | de.fo-kg.ai/mcp | GLEIF |
| dk-fo-kg | Denmark | 2026-09-14 | 16 | dk.fo-kg.ai/mcp | GLEIF |
| es-fo-kg | Spain | 2026-09-14 | 39 | es.fo-kg.ai/mcp | GLEIF |
| fr-fo-kg | France | 2026-09-14 | 196 | fr.fo-kg.ai/mcp | GLEIF |
| it-fo-kg | Italy | 2026-09-14 | 12 | it.fo-kg.ai/mcp | GLEIF |
| lu-fo-kg | Luxembourg | 2026-09-14 | 14 | lu.fo-kg.ai/mcp | GLEIF |
| nl-fo-kg | Netherlands | 2026-09-14 | 9 | nl.fo-kg.ai/mcp | GLEIF |
| no-fo-kg | Norway | 2026-09-14 | 12 | no.fo-kg.ai/mcp | GLEIF |
| row-fo-kg | Rest of world | 2026-09-14 | 176 | row.fo-kg.ai/mcp | GLEIF |
| sg-fo-kg | Singapore | 2026-09-14 | 580 | sg.fo-kg.ai/mcp | GLEIF |
| uk-fo-kg | United Kingdom | 2026-09-14 | 204 | uk.fo-kg.ai/mcp | GLEIF |
| us-fo-kg | United States | 2026-09-14 | 113 | us.fo-kg.ai/mcp | GLEIF |
A node with no records is pending, not a number. Every count on this page is read from /records/nodes.json and each node's index at request time.
The door
A Model Context Protocol (MCP) server plus an Agent-to-Agent (A2A) Agent Card: public, read-only, session-free, no authentication for reads, typed errors, real 404s. The apex door holds the index and forwards; the node door serves the record; nothing is stored at the apex. Five tools, the same names on every office graph:
- resolve_family_office(identifier) — LEI, legal name, alias or register id to the records that carry it, with the node that serves each
- get_record(identifier, version?) — the Family Office Record, every field with value, source_url, read_by and state
- list_events_since(identifier, since?, cursor?, limit?) — dated, URL'd events, oldest first, paged
- list_aliases(identifier) — every name the record carries, each with its source
- list_nodes() — the nodes, with record counts read from each node's index
- Apex door — https://mcp.fo-kg.ai/mcp · card /.well-known/mcp.json
- Node doors — https://ca.fo-kg.ai/mcp … https://row.fo-kg.ai/mcp, one per node in §03; the node slug (ca-fo-kg) is unchanged on every record, index and card
- Agent Card — https://agent.fo-kg.ai/.well-known/agent-card.json
- Long names keep answering — mcp.familyofficeknowledgegraph.ai/mcp · <node>.familyofficeknowledgegraph.ai/mcp · agent.familyofficeknowledgegraph.ai; the short root is the door of record
- Over HTTP — /resolve/{identifier} · records at /records/nodes.json
- Paid call — /api (x402 v2, $0.01 USDC, Base mainnet) returns the graph index of record as a signed statement with a receipt · /x402
RADAR
The graph's numbers, read live from the node indexes and facts.json:
Machine kit
The graph is addressable by machines at well-known paths: Agent Card, keyring, llms.txt, facts.json, ai-catalog.json, robots.txt, sitemap.xml, security.txt, mcp.json, skills.json, and the signal headers on every response — X-Office-Version, X-Office-Operator, X-Office-Node, X-Office-As-Of, X-Office-Source, X-Office-Keyring, X-Office-Contact, X-Office-X402. Reads are open. The paid door is priced, not gated. One licensed route, /licensed/index, answers to a token from the office's authorization server at agent-kg.ai.
Operator
- Agentic KG Holdings — https://agent-kg.ai · the Agentic Private Office of Matthew Keddy
- Family Office Knowledge Graph — familyofficeknowledgegraph.ai · held, through the office
- Surface 0.20.1 · first node ca-fo-kg · as of 2026-09-14
- Doors — mcp.fo-kg.ai/mcp · agent.fo-kg.ai · <node>.fo-kg.ai/mcp · the record is served only through the door