Kortex serves AI agents as first-class clients: an MCP server over the full platform (not just the graph), the cost of every call returned on every result, receipts an agent can cite and replay, machine-readable grounding documents, and a developed error contract. Deterministic underneath; the agent gets the same governed, source-traceable answers a human analyst gets.
Evaluation key (instant, 14 days, no approval):
POST https://kortex.orkora.com/v2/keys/evaluation {"email":"you@example.com"}
MCP (streamable HTTP): POST https://kortex.orkora.com/v2/mcp X-API-Key on every request
Discovery manifest: GET https://kortex.orkora.com/.well-known/kortex.json
Agent map: GET https://kortex.orkora.com/llms.txt
Errors: GET https://kortex.orkora.com/v2/errors · OpenAPI: /openapi.json
| tool | what it does | floor |
|---|---|---|
| kortex_cost_preview | FREE: estimate what any tool call will cost before running it (floor, per-unit billing, settlement rule). | 1,000 |
| kortex_get_investigation | One saved investigation with its items, scoped to the calling organisation. | 1,000 |
| kortex_get_receipt | Replay a frozen answer: fetch the archived receipt by id — the canonical response, graph snapshot, software build and sources as they were when the an | 1,000 |
| kortex_get_schema | Graph schema overview: node labels, edge types, live totals. | 1,000 |
| kortex_list_investigations | The caller's own saved investigations (status: active|archived|all). Scoped to the calling organisation; never cross-tenant. | 1,000 |
| kortex_search_pursuit | Your organisation's own commercial pursuit: `view=queue` returns the lanes that need attention (tender deadlines already being pursued, live deadlines | 1,000 |
| kortex_get_asset_profile | Asset intelligence: no `asset_id` lists the section catalogue; with `asset_id` returns the sectioned profile (hazard, water, carbon, stranding, observ | 2,000 |
| kortex_get_country | Country intelligence: no `iso3` lists the 18-indicator catalogue; with `iso3` returns the full profile. Absence is disclosed per indicator (present=fa | 2,000 |
| kortex_get_entity | Entity intelligence keyed on the LEI: view='profile' (default) returns the sectioned corporate profile; view='ownership_map' returns the control map ( | 2,000 |
| kortex_get_node | Fetch any graph node as a faceted view (core + facets + per-domain provenance). | 2,000 |
| kortex_get_series | Time-series surface: no `key` lists the catalogue (grain, dimensions, rights per family); with `key` fetches rows newest first (`start`/`end` bounds, | 2,000 |
| kortex_search_generators | Search power generators by fuel, grid zone, operator and minimum MW; revenue-ranked. | 2,000 |
| kortex_search_origination | Ranked site opportunities from the site originator: no `view` lists the available views; `view=opportunities` returns the ranked shortlist (filter by | 2,000 |
| kortex_search_spatial | Spatial layers: no `layer` lists every available layer; with `layer` returns features, filtered by `bbox` (minLon,minLat,maxLon,maxLat) and `limit`. T | 2,000 |
| kortex_run_insight | Pre-built cross-domain screens: no `key` lists them; with `key` runs one (params documented at /redoc). Results carry a provenance receipt. | 5,000 |
| kortex_run_siting_screen | The flagship in one call: rank grid zones for a large new load. Returns ranked candidates AND rejected zones with the dominant constraint each, demand | 5,000 |
| kortex_traverse | Traverse the graph from a node: connected nodes within N hops (edge type + direction). | 5,000 |
| kortex_run_cypher | Read-only Cypher against the full graph. Must include LIMIT; writes are blocked. Billed on delivered output at field weights (floor applies). | 20,000 |
| kortex_query_tables | Governed tables surface: no `name` lists every servable dataset with live rights; with `name` fetches rows (equality filters via `filters`, sortable). | 50,000 |
Every tool result is JSON with a cost block: what was billed, the category floor, the delivered-output value and the basis. Settlement is max(floor, delivered-output value) at the same field weights as REST, on every channel, so no path through the platform is a cheaper pipe for the same data. Provenance metadata is never billed. A hard 402 gate re-checks the actual cost before the payload is delivered; a blocked response bills nothing, and tool errors bill nothing.
{"data": {…}, "cost": {"billed_credits": 51000, "floor_credits": 50000,
"delivered_value_credits": 51000, "basis": "max(category floor, delivered-output value)"},
"receipt_id": "…"} // when the payload carries a retrievable provenance receipt
A server-side billing-integrity watchdog audits value density on every response (payload size vs credits billed) and flags any route serving materially more than it charges; flagged routes are reviewed and repriced at source.
| uri | contents |
|---|---|
| kortex://pricing | live cost weights and the settlement rule |
| kortex://errors | stable error codes with meaning and resolving action |
| kortex://schema | node labels, edge types, live totals |
| kortex://sources | registered sources with licence and rights status |
| kortex://rights | rights modes, fail-closed semantics, evidence-class principles |
| kortex://corrections | the corrections register: every governance-driven change to a served number, before/after and reason (also RSS at /v2/corrections.rss, deltas via ?since=) |
These exist so an agent grounds itself in Kortex's actual governance instead of guessing: what things cost, what errors mean, what the rights position is, where every number comes from.
Envelope-bearing results carry a receipt: the frozen canonical answer, graph snapshot id, software build and resolved sources, retrievable forever at GET /v2/receipts/{id} or via the kortex_get_receipt tool. An agent that cites a Kortex receipt is citing an artifact its principal can independently replay. Absence is disclosed (present=false), contradicted data is quarantined and documented, and there is no LLM in the stack: the same call returns the same answer.