MCP + FlightSQL Gateway · The agent-ready database
The database you can hand an agent the keys to.
- Scoped tokens
- The agent never holds a database credential. Tokens are minted narrower than their owner: databases, verbs, row ceilings, timeouts, budgets, expiry. Tokens mint tokens, each a strict reduction.
- ACL & masking, one path
- Table-level ACLs, row-level policies, and dynamic data masking enforced on every statement, whether it arrives over MCP or FlightSQL. No "agent mode": same code, same executor.
- Killable & audited
- Every statement is attributed to the acting token, live-killable, and audited. Revoking a token kills its live statements and every child it minted, in one call.
- Autoscaling & your IdP
- Fleets of DuckDB Quack nodes autoscale on your Kubernetes, or run as one Docker container. Sign-in through your IdP: OIDC SSO (Keycloak, Google, Azure AD, Cognito) with SCIM provisioning.

The agent-ready database
Built for the newest kind of database user.
An agent writes arbitrary SQL like an analyst, issues it at machine speed like an application - and nobody reads it before it runs. Quack On Demand is designed for exactly that caller: the policy lives on the credential, not in the prompt, because grants are the only thing an injected instruction cannot argue with.
MCP and ADBC
The agent never holds a database credential
Delegation is always a reduction
One enforcement path - no "agent mode"
Attributable, killable, audited
Budgets and structured refusals
Undo: agents write to branches
Context, so agents stop guessing
Blast radius bounded by architecture
And underneath
Everything DuckDB Quack is missing in production.
DuckDB ships Quack as a minimal HTTP endpoint on localhost with a random token, and explicitly recommends a reverse proxy in front of it. Quack On Demand is that proxy - with the multi-tenancy, identity, and observability you need to actually expose it.
Arrow FlightSQL edge
Multi-tenant pools
Pluggable authentication
Enterprise identity - SSO & SCIM
Postgres-relational RBAC
Live admin console
Self-healing on restart
Deployment
Single binary
Configuration
Every key is overridable
Runtime
Single container or Kubernetes
Query federation
One SQL surface over every source.
Quack On Demand turns DuckDB's federation into a governed, multi-tenant service. Point a query at your lake, your Iceberg warehouse, and your operational databases at once - and join them in place, without moving a byte.
- 01
Query data where it lives
Object storage, Iceberg tables, and operational databases are read in place. No copies, no nightly ETL, no second engine.
- 02
Join across sources in one statement
A single SQL query spans Parquet on S3, an Iceberg warehouse, and a Postgres table - DuckDB pushes down filters and streams results back over Arrow.
- 03
Governed like everything else
Every federated table reference passes the same per-statement RBAC and table-ref policy checks - federation never bypasses your ACLs.
Parquet & CSVApache IcebergDuckLake catalogsPostgreSQLMySQLS3 / GCS / Azure Blob
federated.sql-- One statement, three sources, zero copies
SELECT o.region,
c.segment,
SUM(o.amount) AS revenue
FROM read_parquet('s3://lake/orders/*.parquet') o
JOIN postgres_scan('crm','public','customers') c
ON c.id = o.customer_id
JOIN iceberg_scan('s3://warehouse/products') p
ON p.sku = o.sku
GROUP BY 1, 2;Bring your own pipeline
Works with any ETL, however you built your data.
QoD is a serving layer. It sits downstream of whatever produced your data. It does not care which tool wrote it, and it never routes your users anywhere.
Open source · Apache 2.0
Your agents are going to query production. Decide the terms.
The organisations that let agents in are the ones that can answer, without hedging: what can this agent see, what can it spend, what did it do, and how do I stop it. QoD answers all four - on the same enforcement path as every human caller. Start with one command: uvx qod start --demo, then point your agent at /mcp with a token and ask it something.