Skip to main content
Midplane puts a safety layer between your agent and your Postgres database. Three ways to stand it up: Cloud (hosted, and the fastest way to a working setup — recommended), local (the MIT engine on your own machine, no account), or self-host (the whole app on your infrastructure). Whichever you pick, by the end you’ll have a protected MCP endpoint and a denied query to prove it.

Try it

Ask your agent to list the tables in your database — an allowed read that goes straight through. Now ask it to change a single row in one of those tables. The agent issues a bounded UPDATE … WHERE, and Midplane denies it before it runs: under the table_access rule, writes deny by default — even a one-row, surgical change — until you grant read_write on that table. Nothing is modified, and the attempt is audited. Then read both events back — the allowed read and the denied write, each tagged with the rule that decided it, and the denial recorded before the query would have run. On Cloud and self-host, open the audit log in the dashboard. Running locally, read it from the CLI:
Either way it’s the same record. See the audit trail.

Next steps

Connect your agent

Verified MCP configs for Cursor, Claude Code, and Claude Desktop.

Write a policy

Grant the reads and writes your agent actually needs.

Cloud vs self-host

Which to run, and how they compare.