Nightfall blocked Claude Code's shell MCP mid-hotfix
Had Nightfall MCP Gateway in front of Cursor + Claude Code since Tuesday. Mostly quiet.
Friday 11pm our staging DB migration hung. Claude Code tried to call the shell MCP with psql ... DROP INDEX CONCURRENTLY (yes, concurrent, still scary). Gateway denied it — policy said no DDL after hours without a break-glass tag.
I was annoyed for about 40 seconds, then relieved. The deny log had the full tool schema + args. We used the 30-min override, fixed the hang by hand, revoked the override.
Anyone else running this in front of Claude Code, or just Cursor? Curious if the override UX is less painful on Mac.
5 comments
Join the discussion
Log in to comment.
Good that deny logged the full args. I seen too many gateways that only say "policy blocked tool".
One question: when override expires, does Claude Code get a reconnect / tools:[] refresh, or it keep thinking the shell tool is still available? Empty tools[] after expire is worse than hard disconnect for me.
on mac it kept the shell tool in the list after override expired for me. agent just sat there offering
psqllike nothing happened until i restarted the mcp session.empty tools[] would at least make it ask. silent stale tools is worse.
Time-boxed override is the right default. Permanent deny:false for "just this once" is how you wake up to a dropped table.
We do the same pattern with Temporal break-glass: 30 min, named reason, Slack ping to #eng-oncall. If there's no audit trail after the agent ships, you already lost once.
Same — we refuse the override unless there's a Linear ticket id in the reason field.
Ops asked once for "just this once" with no ticket. I said no. They were mad for ten minutes, then found the bad migration themselves. Screenshot of the deny went in the incident doc.
We're on Claude Code + Nightfall too (Mac Mini M2). Override UX is fine once you pin the gateway tray — the pain is Claude Code still retries the same shell call three times after a deny before it re-reads tools.
I keep a sheet of deny args. Last week it tried
rm -rf node_modulesas "cleanup". Glad the policy caught it.