One JSON payload names staging and production. A synthetic first-wins preview shows staging, while Python's default decoder returns production.

Your tool approval says staging. The JSON also says production.

A first-wins preview and a last-wins executor can disagree about the same tool arguments. Both decoded objects can still pass the same schema.

October 30, 2026 · 7 min · 1388 words · Thomas De Vos
Read Your tool approval says staging. The JSON also says production.
An approved Claude Code MCP call is stopped when a redirect changes the destination, then allowed only after scheme, host, port, TLS identity, and resolved network range match the transport binding

Claude Code approved one MCP server. The request went somewhere else.

An MCP approval can bind to a tool name while DNS, redirects, proxies, and service discovery send the request elsewhere. Pin the transport identity at dispatch time.

August 31, 2026 · 5 min · 918 words · Thomas De Vos
Read Claude Code approved one MCP server. The request went somewhere else.
A Claude Code call to an MCP method labelled read only fans out into a paid warehouse query, stored export, webhook, and audit-state change before an effect contract gates the call

Claude Code called a read-only MCP tool 186 times. The bill said otherwise.

An MCP method labelled read only can still start paid queries, create exports, send webhooks, and change audit state. Control the effects, not the method name.

August 30, 2026 · 5 min · 887 words · Thomas De Vos
Read Claude Code called a read-only MCP tool 186 times. The bill said otherwise.
A Claude Code MCP permission delta showing one intended staging index allowed while production access, destructive DDL, another database, and role changes remain denied

Test the permission delta before widening Claude Code MCP access

A broader MCP grant may unblock one Claude Code task while authorizing unrelated production actions. Test what became possible and what must remain forbidden.

August 9, 2026 · 5 min · 897 words · Thomas De Vos
Read Test the permission delta before widening Claude Code MCP access
A Claude Code denial-path eval blocks a plausible production database write because the run has read-only permission

Test the Claude Code tool call that must be refused

A refusal test can pass because the tool is broken. Pair denied calls with permitted controls and adapter faults before trusting an MCP permission gate.

August 7, 2026 · 8 min · 1551 words · Thomas De Vos
Read Test the Claude Code tool call that must be refused
An irreversibility gate blocks a Claude Code production feature flag deletion because recovery is untested and approval is missing

Stop Claude Code before an irreversible tool call

Claude Code can revert a patch, but Git cannot restore every MCP or production effect. Add an irreversibility gate before destructive tool calls run.

August 6, 2026 · 5 min · 980 words · Thomas De Vos
Read Stop Claude Code before an irreversible tool call