Semantic Gateway demo: one data estate behind one policy gate
Seven data packs and four ontologies answer as one estate, and each caller's answers are computed only from what the policy admits.
A recording of one session with a running host, on public data. Sources become packs that link only where evidence supports it, one query is routed across them, a full read waits for a person, an agent comes in over MCP, and a model's answer appears only if it holds up against what its tools returned.
The estate holds 17,257 documents from public sources: water-quality results, monitoring locations and projects from the Water Quality Portal, USDA fertilizer tables, 40 CFR Part 141, NOAA daily weather and published method documents, with ChEBI, QUDT, WQX and Census vocabularies as ontology packs. Links are computed from declared keys, never inferred: 16,369 of them tie result rows to their locations and projects, and 4 project ids with no record are reported as defects, not dropped. Annotations map records and passages to 752 concepts, which is how one substance is followed across vocabularies.
One query ranks the packs by their own centroids and opens only the most likely ones. On 40 written questions, opening 4 packs kept 99.5% of what a search of all 12 finds in its top 10. Every hit names its pack and document, and the answer lists each pack it did not open and why.
Each request passes a versioned policy, and a caller's page is computed from what that policy admits, so a hidden pack answers exactly as one never mounted: the data steward may search 12 packs and the visitor 5. A pack embedded with a model the host does not embed queries with stands apart, refused, with the reason. Search shows passages, while a full record leaves the gate, so a read of result rows goes to a person, bound to the hash of exactly those rows.
An agent reaches the same estate over MCP, offered 33 tools, and its read waits for a person too; no tool can approve. In the chat, the model sees only the caller's tools, and its answer is withheld unless every quote is in a passage returned that turn and every number is in a tool's result. Every request leaves a line in a hash-chained ledger.
The host stays on loopback until it has real sign-in, so the public page is one recorded session played back in the browser. Its numbers are read from the session, a typed number fails the build, and a request the session did not make gets a sentence saying so, not an answer.
References
- National Water Quality Monitoring Council, U.S. Geological Survey and U.S. Environmental Protection Agency (2021). Water Quality Portal. Data portal. doi:10.5066/P9QRKUVJ
semanticgateway.caAgent ScopeDemo video: Zenodo 10.5281/zenodo.23906429