Not a chatbot on top of a database. A substrate where every data object carries its own context, every computation explains itself, and every module is discoverable by agents without documentation.
Every module exposes its capabilities as typed, discoverable tools via Model Context Protocol. Agents call the same interfaces the system calls itself — no translation layer, no API shim.
Every MCP tool is a Pydantic model pair. Agents know the exact shape of their input and output. No stringly-typed APIs, no guessing at field names.
MCP is the query path. All mutations go through the event bus — a single, auditable write path. An agent cannot accidentally modify state through a query.
Every module server exposes introspect_tools() and introspect_events(). Agents discover what a module can do without external docs.
Every function that transforms data takes a LineageContext and returns an updated one. The provenance chain is visible in every function signature, impossible to accidentally omit.
Lineage isn't logging you add later. It's a required function parameter — code that doesn't propagate it won't compile.
Module, operation, timestamp, computation type, confidence score, inputs hash, config version. The chain is a complete audit trail.
One input can produce multiple outputs, each extending the lineage independently. Fan-out computations like batch valuation preserve full traceability per trade.
Three computation types. Every value in the system carries one. Downstream consumers make fitness-for-purpose decisions based on the tag — not guesswork.
Mathematically exact. Same inputs always produce the same output. NPV calculations, day count fractions, payment schedule generation.
confidence: 1.0Rules-based with judgment. Pattern matching, threshold detection, counterparty name fuzzy matching. Reliable but not mathematical.
confidence: 0.7 – 0.95LLM in the processing loop. Intent resolution from natural language, unstructured document parsing, trade entry from plain English.
confidence: 0.5 – 0.9Semantic types encode business rules at construction time. You don't detect a currency mismatch downstream — you can't construct one. Agents reason about types structurally, not by reading docs.
The ExplanationRenderer traverses the lineage chain and produces a structured response — no LLM call required. Explanations are deterministic, auditable, and instant.
Explanations are derived from the lineage chain itself. No LLM interprets the result — the computation steps are the explanation.
Recursive tree of factors: name, value, weight, children. An agent can ask "why this NPV?" and drill into each contributing factor.
Any computation result that implements Explainable exposes a structured explain() method. Standard interface, no special cases.
Natural language, structured API, or direct MCP tool call. All three paths flow through the same type system, lineage propagation, and computation tagging.
Ask "show me all live EUR swaps" and get a structured grid response. The AI service parses intent, dispatches to MCP tools, and returns typed results.
POST /api/ai/query"Book a 5y pay-fixed IRS, 50M USD against Goldman at 4.2%". Gemini extracts structured fields, validates against live reference data, and pre-fills the form.
POST /api/ai/assist"Why did this trade's NPV change?" The explainability engine traces the lineage chain and returns the computation steps, data sources, and confidence level.
POST /api/ai/explainGemini for structured extraction. Claude for full tool-use reasoning. Keyword fallback when no API key is configured. The system works at every level of AI capability — LLMs enhance, they don't enable.
The single unified materialised view of a trade's complete state. Agents query the hub once instead of stitching from five modules. Identity, parties, legs, risk data, exercise terms — one query.
Every piece of data in Scion can answer three questions: where did you come from? (lineage), how were you computed? (computation type), and why this answer? (explainability). The LLM integration layers on top as an interaction surface — not a dependency.
See it live