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 |
|---|---|---|---|---|---|
| ca-fo-kg | Canada | 2026-09-13 | 13 | ca-fo-kg.familyofficeknowledgegraph.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.familyofficeknowledgegraph.ai/mcp · card /.well-known/mcp.json
- Node door, Canada — https://ca-fo-kg.familyofficeknowledgegraph.ai/mcp
- Agent Card — https://agent.familyofficeknowledgegraph.ai/.well-known/agent-card.json
- 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
Sources
The registers and pages the harvest read for the nodes above, with read counts from the harvest manifest:
- accessfo.com — subject website — https://accessfo.com/ · fill · 1 reads
- SEC IAPD — firm summary page — https://adviserinfo.sec.gov/ · read only (JavaScript application) · 1 reads
- advisor.wellington-altus.ca — subject website — https://advisor.wellington-altus.ca/ · fill · 1 reads
- SEC IAPD — Investment Adviser Public Disclosure — https://api.adviserinfo.sec.gov/ · fill and confirm · 13 reads
- GLEIF — Global Legal Entity Identifier Foundation — https://api.gleif.org/ · spine · 11 reads
- Corporations Canada — open data, active CBCA corporations (CSV) — https://d4bf66bykfyaf.cloudfront.net/ · fill and confirm · 1 reads
- Corporations Canada — federal corporation pages — https://ised-isde.canada.ca/ · fill and confirm · 3 reads
- OrgBook BC — BC Registries — https://orgbook.gov.bc.ca/ · fill and confirm · 2 reads
- ourfamilyoffice.ca — subject website — https://ourfamilyoffice.ca/ · fill · 1 reads
- samara.ca — subject website — https://samara.ca/ · fill · 1 reads
- Ontario Business Registry — https://www.appmybizaccount.gov.on.ca/ · refuses machines — gap · 3 reads
- www.firstaffiliated.ca — subject website — https://www.firstaffiliated.ca/ · fill · 1 reads
- www.granitemfo.com — subject website — https://www.granitemfo.com/ · fill · 1 reads
- www.northwoodfamilyoffice.com — subject website — https://www.northwoodfamilyoffice.com/ · fill · 1 reads
- Ontario Securities Commission — orders, rulings and decisions — https://www.osc.ca/ · fill and confirm · 1 reads
- Registraire des entreprises (Québec) — https://www.registreentreprises.gouv.qc.ca/ · refuses machines — gap · 2 reads
- SEC EDGAR — https://www.sec.gov/ · fill · 1 reads
- SEDAR+ — https://www.sedarplus.ca/ · browser session needed — gap · 1 reads
- www.sigma2fo.com — subject website — https://www.sigma2fo.com/ · fill · 1 reads
- www.werklund.com — subject website — https://www.werklund.com/ · fill · 1 reads
Records
| Legal name | Jurisdiction | LEI | Fields confirmed / sourced / filled | Gaps | Events |
|---|---|---|---|---|---|
| First Affiliated Family Office Group Inc. | Canada | 2549006ASHWVMWDFX174 | 5 / 17 / 0 | 2 | 6 |
| RUKEN FAMILY OFFICE CORPORATION | Canada — Ontario | 254900ARTD3ROCG3JQ60 | 1 / 17 / 0 | 4 | 5 |
| LOGAN FAMILY OFFICE INC. | Canada — Alberta | 254900S9YI4QYJ1ZVP52 | 0 / 13 / 0 | 5 | 4 |
| Granite Family Office Inc. | Canada — Québec | 254900WN0M5OLKZTM395 | 1 / 14 / 3 | 3 | 4 |
| OUR FAMILY OFFICE INC. | Canada — Ontario | 54930086GRWZZFK96X93 | 0 / 14 / 0 | 4 | 4 |
| 1832 Family Office Bond Fund | Canada — Ontario | 549300DQYUKFXT15U425 | 0 / 10 / 0 | 6 | 3 |
| NORTHWOOD FAMILY OFFICE LTD. | Canada — Ontario | 549300QT3SIH27BVDV72 | 0 / 17 / 0 | 4 | 6 |
| Robinson Sauder Family Office Inc. | Canada — British Columbia | 8945004ILJII32XFGQ34 | 3 / 14 / 0 | 4 | 4 |
| West Oak Family Office Corporate Investment Pool | Canada | 8945009D74VK2I6QGM79 | 0 / 13 / 0 | 5 | 4 |
| Werklund Family Office Inc. | Canada — Alberta | 894500XP5FQ6RMFZW715 | 2 / 14 / 0 | 5 | 4 |
| Samara Bureau multi-familial Inc. | Canada | 98450061A51D02AH0441 | 6 / 23 / 0 | 1 | 6 |
| Sigma2 Bureau Familial Inc. | Canada — Québec | 984500684OWB067B6177 | 0 / 15 / 0 | 4 | 4 |
| Access Family Office Corp. | Canada | 984500D1CC96B85F6F54 | 5 / 20 / 0 | 2 | 6 |
Each row links to the record as the node door serves it. Gaps are declared with the URL tried; a register that refuses machines is a gap, not a guess.
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.1.0 · first node ca-fo-kg · as of 2026-09-13