Provisa / Interfaces

Three languages. Nine protocols. One schema.

The query language and the wire protocol are independent choices. Every entry point resolves against the same federated schema and passes through the same governance — there is no path in that skips it.

Query languages

GraphQL

Per-role schemas with field-level visibility, cursor pagination, and aggregates. The schema is constrained to registered relationships, so a query that traverses an unapproved path cannot be expressed — it is valid by construction rather than rejected at runtime. Apollo Automatic Persisted Queries are included.

SQL

Full SQL over federated data, correlated subqueries and all. Cross-source joins fan out through the federation engine; single-source queries bypass federation entirely and route direct to the driver, transactional and sub-100ms.

Cypher

Graph queries over the same federated schema. Traverse relationships as edges, union sources into a single node label, and walk variable-length paths — under identical governance to the SQL and GraphQL paths.

Wire protocols

pgwire — port 5439

Any Postgres client connects: psql, DBeaver, DataGrip, pandas read_sql, or anything else speaking the frontend/backend protocol. pg_catalog is answered in-memory, so schema browsers, foreign-key arrows, and autocomplete work without a real Postgres behind them.

Bolt (Neo4j)

Neo4j Browser, Bloom, and the official drivers run Cypher over Bolt against the federated graph. Each role surfaces as a provisa_<role> database, so the client's database picker is the governance boundary.

Arrow Flight

Arrow record batches streamed over gRPC — columnar all the way out, with no row-by-row serialization between the engine and the client. Accepts GraphQL or SQL. Result sets are unbounded: nothing is materialized server-side while the client reads.

gRPC model API

A .proto is generated from the registered schema: typed query and insert RPCs per table, with streamed responses. Regenerating is a consequence of changing the model, not a separate build step.

JDBC and REST

BI tools — Tableau, Power BI, DBeaver — connect over JDBC. Applications get JSON:API 1.1 at /data/jsonapi/{table}, with sparse fieldsets and filter expressions.

Airport (DuckDB)

Any DuckDB client attaches Provisa as a database — ATTACH 'grpc://host' AS p (TYPE AIRPORT) — and queries the governed federated schema from local DuckDB. Filters and projections push down; writes update by primary key.

WebSocket and SSE

Subscriptions stream near-real-time change events. The backend is your choice: Postgres native notification, MongoDB change streams, CDC, or polling — and events can fan out over Kafka.

For AI agents

MCP server

A Model Context Protocol server — stdio and remote Streamable HTTP — exposes your governed, federated data to agents like Claude as tools. The OAuth token maps to a role, so every agent call is governed by the same six layers as a human query. Agents get no bypass, and no separate policy to keep in sync.

Natural language

NL→SQL, Cypher, or GraphQL powered by Claude, with an interactive validation loop so a generated query is reviewed before anything executes.