One core, two doors: the agent gets what the app gets, and no more
An agent connects to the MCP server with a key or by signing in through your identity provider. It sees only the tools its grant allows, and a dictionary of what the columns mean, with masked ones marked. Its calls run through the same checks as a REST call. Ad-hoc SQL is read-only and capped, and a write waits for a person. Every call is in its usage, by agent.
whoagent · key or OAuth 2.1doortools/call orders_by_customersame grants as REST ✓allowed tables only ✓writes wait for approval ✓datawarehouse · masked columns marked
For AI agents
Let an agent query your data, governed like an app
An agent with a database password is an agent with everything. Through the MCP server it gets saved queries as tools, ad-hoc SQL only where you allow it, descriptions of what tables mean, and writes only with a person approving.
✓Any MCP client connects to /mcp, with an API key or OAuth 2.1 through your identity provider.
✓The same grants, limits and masking as REST. An agent cannot be governed less because of its protocol.
✓Descriptions imported from the database's own comments tell the agent what ltv_90d is, so it writes the right SQL first time.
✓Per-agent usage, and an alert when one reads ten times its usual hourly volume, above a floor you set.
The example APIs ship with a generated database and one scoped key per scenario, so you can try each of these in a few minutes without connecting anything of your own.