live as of 2026-09-14 · version 2026-09-13.13 · capitalmarketsknowledgegraph.ai

Documentation — the apex door

Connector documentation for the apex door of the Capital Markets Knowledge Graph: how to connect, the five tools, the identifiers, the record shape, where records live, what data is handled, limits and versioning, support. Counts on this page are read live from list_nodes at render: 11 live nodes, 28479 issuer records, 2386821 dated disclosure events.

1. Connect

Server URL https://mcp.capitalmarketsknowledgegraph.ai/mcp. Transport: Streamable HTTP over the Model Context Protocol (MCP), JSON-RPC 2.0 (JavaScript Object Notation Remote Procedure Call) over HTTPS. Authentication: none. Sign-in: not required. Claude: Settings → Connectors → Add custom connector → paste the URL. The same URL serves every client; a plain GET on it answers 405 by design — the door speaks JSON-RPC by POST.

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"resolve_issuer","arguments":{"identifier":"TSX:SHOP"}}}
→ {"matches":[{"cmr":"ca-cm-kg/TSX/SHOP","node":"ca-cm-kg","version":1,"as_of":"2026-09-10","name":"Shopify Inc.","ticker":"SHOP","exchange":"TSX","isin":"CA82509L1076","lei":"549300HGQ43STJLLP808","event_count":2,"record_url":"https://mcp.ca-cm-kg.ai/record/TSX/SHOP"}],"matched_by":"ticker","ambiguous":false,"nodes_asked":["ca-cm-kg"]}

2. Tools

Five tools, all read-only (every tool carries readOnlyHint: true in its annotations). Parameters marked ? are optional.

toolparametersreturnswire example
resolve_issueridentifierrecord summary: node, version, as_of, name, ticker, exchange, ISIN, LEI, event count, record and events URLs; matched_by, ambiguous
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"resolve_issuer","arguments":{"identifier":"TSX:SHOP"}}}
→ {"matches":[{"cmr":"ca-cm-kg/TSX/SHOP","node":"ca-cm-kg","version":1,"as_of":"2026-09-10","name":"Shopify Inc.","ticker":"SHOP","exchange":"TSX","isin":"CA82509L1076","lei":"549300HGQ43STJLLP808","event_count":2,"record_url":"https://mcp.ca-cm-kg.ai/record/TSX/SHOP"}],"matched_by":"ticker","ambiguous":false,"nodes_asked":["ca-cm-kg"]}
get_recordidentifier, version?the full Capital Markets Record (CMR): identity fields each with value, source_url, read_by and state; aliases; events URL and count; gaps; served_by
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_record","arguments":{"identifier":"LSE:BARC"}}}
→ {"cmr":"uk-cm-kg/LSE/BARC","node":"uk-cm-kg","as_of":"2026-09-11","version":1,"identity":{"name":{"value":"BARCLAYS PLC","source_url":"https://www.londonstockexchange.com/…","read_by":"LSE price-explorer feed","state":"sourced"},…},"aliases":[…],"events_url":"https://mcp.uk-cm-kg.ai/events/LSE/BARC","event_count":1774,"gaps":[…],"served_by":{"node":"uk-cm-kg","regional_door":"https://mcp.uk-cm-kg.ai/mcp","agent_card":"https://agent.uk-cm-kg.ai/.well-known/agent-card.json"}}
list_events_sinceidentifier, since?, cursor?, limit?dated, sourced disclosure events since a date (YYYY-MM-DD; omitted = the full twelve-month window), paged by cursor
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_events_since","arguments":{"identifier":"LSE:BARC","since":"2026-06-01","limit":2}}}
→ {"cmr":"uk-cm-kg/LSE/BARC","since":"2026-06-01","total":…,"cursor":0,"limit":2,"next_cursor":2,"events":[{"date":"2026-09-12","event_type":"newswire_release","title":"Barclays Investor News: …","wire":"GlobeNewswire","source":"GlobeNewswire","url":"https://www.globenewswire.com/news-release/2026/09/11/…"},…],"served_by":{"node":"uk-cm-kg",…}}
list_aliasesidentifiersourced trade and former names, each with its source URL and reader
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"list_aliases","arguments":{"identifier":"LSE:BARC"}}}
→ {"cmr":"uk-cm-kg/LSE/BARC","name":"BARCLAYS PLC","aliases":[{"value":"Barclays Bank Plc","source_url":"https://find-and-update.company-information.service.gov.uk/company/00048839","read_by":"Companies House REST API (previous names)"},…]}
list_nodesnonethe twelve market nodes, which are live, their regional doors, record and event counts, drop dates
{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"list_nodes","arguments":{}}}
→ {"door":"apex router: index only; records and events are served by each node's regional door","live_nodes":["ca-cm-kg","uk-cm-kg",…],"nodes":[{"node":"ca-cm-kg","country":"Canada","door":"https://mcp.ca-cm-kg.ai","live":true,"as_of":"2026-09-10","records":4820,"events":25222,"exchanges":["TSX","TSXV","CSE","CBOE-CANADA"],…},…]}

Examples of record: TSX:SHOP and LSE:BARC, both verified live on the wire on 2026-09-13; responses trimmed to the leading fields, "…" marks the cut.

3. Identifiers

An identifier is any of: a ticker with or without its exchange (SHOP, TSX:SHOP, SHOP.TO, SHEL.L, BHP.AX, 7203.T); an International Securities Identification Number (ISIN); a Legal Entity Identifier (LEI); the exact legal name; a sourced alias; or a CMR key such as ca-cm-kg/TSX/SHOP. The apex holds an index only: it names the owning node and forwards. The record is served by that node's regional door in the issuer's own jurisdiction and is never stored at the apex.

4. The record shape

Every field of a Capital Markets Record carries four parts: value, source_url (the public filing or registry page it was read from), read_by (the registry API or the reading engine) and state — one of sourced (read from the filing), filled (read by an engine, not yet confirmed), confirmed (two sources agree), conflict (sources disagree; both kept) or unverified. Record level: as_of (the drop date), version, a gaps list naming what could not be read, and served_by (node, regional door, Agent Card). Machine descriptions: openapi.json (OpenAPI 3.1, the REST twin of the door) and mcp.json (the MCP descriptor).

5. Residency

Records are stored and served in the issuer's own jurisdiction. Eleven live nodes, one Microsoft Azure region each, region written in full; counts and drop dates read live from list_nodes at render.

nodeAzure regionregional door (MCP)Agent Card (A2A)issuer recordseventsdrop
CanadaCanada Central Azure (Toronto, Canada)https://mcp.ca-cm-kg.ai/mcphttps://agent.ca-cm-kg.ai/.well-known/agent-card.json4820252222026-09-10
United StatesEast US Azure (Virginia, United States)https://mcp.us-cm-kg.ai/mcphttps://agent.us-cm-kg.ai/.well-known/agent-card.json771018723432026-09-12
United KingdomUK South Azure (London, United Kingdom)https://mcp.uk-cm-kg.ai/mcphttps://agent.uk-cm-kg.ai/.well-known/agent-card.json15701281912026-09-11
FranceFrance Central Azure (Paris, France)https://mcp.fr-cm-kg.ai/mcphttps://agent.fr-cm-kg.ai/.well-known/agent-card.json712104692026-09-11
NetherlandsWest Europe Azure (Amsterdam, Netherlands)https://mcp.nl-cm-kg.ai/mcphttps://agent.nl-cm-kg.ai/.well-known/agent-card.json12327422026-09-11
SwitzerlandSwitzerland North Azure (Zurich, Switzerland)https://mcp.ch-cm-kg.ai/mcphttps://agent.ch-cm-kg.ai/.well-known/agent-card.json82915122026-09-11
GermanyGermany West Central Azure (Frankfurt, Germany)https://mcp.de-cm-kg.ai/mcphttps://agent.de-cm-kg.ai/.well-known/agent-card.json3436355702026-09-11
AustraliaAustralia East Azure (Sydney, Australia)https://mcp.au-cm-kg.ai/mcphttps://agent.au-cm-kg.ai/.well-known/agent-card.json18741245812026-09-11
SingaporeSoutheast Asia Azure (Singapore)https://mcp.sg-cm-kg.ai/mcphttps://agent.sg-cm-kg.ai/.well-known/agent-card.json63936202026-09-12
JapanJapan East Azure (Tokyo, Japan)https://mcp.jp-cm-kg.ai/mcphttps://agent.jp-cm-kg.ai/.well-known/agent-card.json3964392742026-09-12
South KoreaKorea Central Azure (Seoul, South Korea)https://mcp.kr-cm-kg.ai/mcphttps://agent.kr-cm-kg.ai/.well-known/agent-card.json28021432972026-09-12

Hong Kong is a beacon at Width 0: the roster is held, not served; no door, no Agent Card; Hong Kong identifiers answer not found at the apex until a local partner reads the filings.

6. Data handling

Public-record data only: listing rosters, company registries, exchange notices and newswire releases, each field named to its source. No prices, no quotes, no licensed market data. No user data is collected or stored: the door takes an identifier and returns a record; there is no account, no session, no token on the public routes, no write path, and no cookies on any surface of the estate. Calls are not attributed to a caller. The operator's identity is on every response in the X-CMR-Operator header.

7. Limits and versioning

Record version: as it stands on the wire, every record response carries X-CMR-Version: 1 and version: 1 in the body (record version 1; a prior version can be asked for with get_record(identifier, version)). The apex and node doors report serverInfo.version 0.12.1 on initialize; this surface reports X-Surface-Version: 2026-09-13.13. Rate limit: none of the operator's at the edge — no rate-limiting rule is configured on the doors; the doors answer every caller at the same speed, and a caller that floods one will see the edge's ordinary connection limits, not a quota.

8. Support and security

Support: allooloo.io/support. Security and responsible disclosure: allooloo.io/security and /.well-known/security.txt. The agents that built this read their own mail: allooloo@hey.com.