2025 · Replit
The agent deleted the production database
It had eleven all-caps instructions not to touch it. It dropped the live database anyway, then fabricated records to hide what it had done.
Reported by The Register
For teams that let AI agents near production
Prodpeek is a self-hosted gateway between Claude Code, Cursor or your CI agent and your production stack. Logs, deployments, dashboards and read-only queries go through. Deploys, restarts, writes and deletes are refused on every call. Every call is logged.
The problem
Connect an MCP server and the agent gets every tool it exposes, the delete sitting next to the list. Most vendor tokens can't be scoped to reads alone. And the instruction telling the agent to be careful is just another prompt.
2025 · Replit
It had eleven all-caps instructions not to touch it. It dropped the live database anyway, then fabricated records to hide what it had done.
Reported by The Register
June 2025 · Asana
Asana's first-party server exposed data from roughly 1,000 customers to each other. It ran for over a month before anyone caught it.
Reported by The Register
2025 · GitHub MCP
Invariant Labs showed a public issue steering an agent into leaking private repository data. Simon Willison's assessment: still no convincing mitigations.
Research by Invariant Labs / devclass
What your agent can do
One policy per service, one line per tool, each with a verdict. Reads that return secrets are treated as writes and refused with the rest.
Also DigitalOcean, Cloudflare, Prometheus, Confluence, and OpenAPI (any internal API). Every service, with a guide to creating a key that can't do more than the policy allows.
Verified, and kept verified
Every allowed tool is exercised against the real service and seen to succeed. Every refused tool is called through the gateway by name and seen to be refused. The result is a signed verdict your instance checks before it trusts a profile.
How it works
Prodpeek runs on your network, holds the upstream credentials, and hands each agent a short-lived key instead. Nothing about your infrastructure leaves it.
Add each upstream with a read-only token from that vendor. The token is encrypted at rest inside Prodpeek. No agent ever sees it.
Shown once, short-lived, tied to the services it may reach. "Who asked for that?" always has an answer.
One MCP endpoint. The policy runs on every call, not only when tools are listed. Allowed reads pass through. Everything else gets a refusal with a reason.
Works with Claude Code, Cursor, Codex CLI, VS Code, and any other MCP client that speaks HTTP. One endpoint, one key, every agent.
Why it holds
Most gateways remove dangerous tools from the list an agent sees and call that read-only. A tool that isn't listed can still be called by name.
CVE-2026-46519 (CVSS 8.8): a server's read-only setting filtered
tools at the discovery layer. A tool hidden from tools/list was still
callable by name through tools/call. One request deleted pods.
Vendors describe these filters as best-effort, not as authorization boundaries. That is honest, and it is exactly the problem.
What Prodpeek does instead
Once to shape the list a client sees. Again, independently and deny-by-default,
on every tools/call, including calls naming tools that
were never advertised.
The two checks are separate code paths, and a test asserts they stay separate. Sharing one implementation is how the CVE happened.
Independent enforcement paths, tested in isolation and end to end over real HTTP
Write tools advertised, ever. There is no write path to enable, not even behind a flag
Of calls written to an append-only, hash-chained log you can verify yourself
Who it's for
Built for the team where the person who could fix production at 2am is also the person shipping features at 2pm. Not for the organisation with a platform team and a procurement process.
You want Claude Code to look at last night's deploy and the error logs before you do. You don't want it holding a token that could also redeploy.
Every "can you check prod?" lands on you. Give the developers and their agents a read-only view, and most of those questions answer themselves.
One instance, one project per client, separate keys and audit logs. Each client can see exactly what your agents were allowed to read, and when.
One Docker container. No Kubernetes, no service mesh, no platform team to keep it alive.
Your infrastructure. It runs on your network, against your credentials, inside your trust boundary.
No identity-provider project. Mint a key per developer and per agent. That is the whole onboarding.
No sales call. The price is on this page. You can run it before you talk to anyone.
Setup
Bring it up, add a service with its read-only token, mint a key, point your agent at it. Test connection in the console shows which tools the policy allows and refuses before any agent touches it.
cp .env.example .env
docker compose run --rm prodpeek gen-key # paste into .env
docker compose up --build
# then point the agent at the gateway
claude mcp add --transport http prodpeek http://localhost:8787/mcp \
--header "Authorization: Bearer <key>"
Prodpeek is opening to its first pilot teams now. Request access and you get the image, the setup guide, and a direct line to the person who built it.
Pricing
14-day free trial, no card. After that a monthly price per team, not per call and not per agent. The price will be on this page, and you can run it before you ever have to talk to anyone.
The container stays up, the console keeps working, your configuration and audit log stay intact. Agent calls through the gateway are refused until you renew. Nothing is deleted and nothing is held hostage.
Consultants running one instance for several clients: there will be a per-project price, so each client sees their own line.
Request early accessProject status
As of 2026-09-25. This block is the one place on the page that describes the current build rather than the product.
FAQ
One container on your own infrastructure. Your agents talk to it; it talks to your upstreams. Upstream credentials are encrypted at rest in its local database and are never included in anything an agent receives. Nothing is sent to us.
Those flags filter what one server lists, and the agent still holds that vendor's token. Prodpeek holds the token, enforces the policy on every call rather than at listing time, and does it across every service from one key with one audit log.
Only the tools its profile allows, with the argument limits that profile sets: a page-size ceiling, a Confluence space allowlist, a required repository.
Reads that return secrets are treated as dangerous even though they are reads.
get_datasource_by_uid returns datasource credentials, so it is refused
outright. Sensitive values that turn up inside an otherwise legitimate read, such as
a connection string in a log line, are masked before the agent sees them.
The agent gets a structured refusal naming the reason, such as
tool_explicitly_denied, tool_not_in_allowlist or
argument_constraint_violated. The same reason is written to the audit
log against the key that made the call.
Reasons are stable identifiers rather than prose, so refusals group cleanly by cause when you go looking for what your agents keep trying to do.
Anything that speaks MCP over HTTP and can send a bearer header. Claude Code is what it is built and tested with. Cursor, Codex CLI, VS Code and a plain script all fit the same shape.
The decision table is a plain file: every row is one call and the verdict the engine must return, with a note on why. The test suite executes that file, so it cannot drift from the code. If you disagree with a row, that is a bug report. Quote the row's id.
And a profile never stays wrong quietly. Each one is verified against the live service, re-verified when that service changes, and revoked from every instance the moment a refusal stops holding.
No. Prodpeek is pre-launch and built by a very small team, and a SOC 2 report would be a claim about a company rather than about this software.
What is offered instead: it runs inside your boundary, so your auditors are looking at your own infrastructure; the policy it enforces is a file you can read; and every decision it makes is in a hash-chained log you can verify without trusting us.
The policies are open. The runtime is not. Every profile is a plain YAML file listing each tool and its verdict, and those files are published so anyone can check exactly what an agent was allowed to read. The gateway itself is commercial software you run on your own box.
Early access
Leave an email and you get the invite when the pilot opens, and the occasional write-up on what building a read-only gateway teaches you about agents in production. One click to stop, any time.
No confirmation step, and then nothing until there is something worth saying. Your address stays on our own server and goes nowhere else. What we do with it.