The honest accounting for a reference MCP gateway: the deliberate simplifications, what the newer protocol revision changes, and everything still missing before production.

MCP Gateway 3/3: What it takes to run one

The honest accounting for a reference MCP gateway: the deliberate simplifications, what the newer protocol revision changes, and everything still missing before production.

August 18, 2026 · 15 min
Splitting MCP authorization across three Rego layers with three owners — platform, domain team, tool owner — so that no team can widen another team's grant.

MCP Gateway 2/3: Three layers of policy

Splitting MCP authorization across three Rego layers with three owners — platform, domain team, tool owner — so that no team can widen another team’s grant.

August 18, 2026 · 11 min
A walk-through of an open, MIT-licensed reference MCP gateway built on FastMCP, OPA and Microsoft Entra ID — why an enterprise MCP rollout needs a single control point, and what that control point has to do.

MCP Gateway 1/3: Why every enterprise rolling out MCP needs a gateway

A walk-through of an open, MIT-licensed reference MCP gateway built on FastMCP, OPA and Microsoft Entra ID — why an enterprise MCP rollout needs a single control point, and what that control point has to do.

August 18, 2026 · 13 min
Diagram comparing Temporal (two separate commits with a crash window) and DBOS (one atomic commit in the same database) as durable execution engines for regulated AI workflows

Audit Log Is the Product

The Audit Log Is the Product Where your workflow engine keeps its history decides whether your AI system survives an audit. Most teams make that decision by accident. There’s a question that reshapes how you architect AI systems in a bank, and it doesn’t come from your users. It comes from an auditor, eighteen months after go-live: “Show me what the system did in this case — and prove that what it recorded is what actually happened.” ...

June 24, 2026 · 12 min
I taught an AI to give up — a state machine with a DEFERRED state

I taught an AI to give up. It's the best feature I built.

Quick context: I built a system that runs structured interviews. A user has a conversation with an LLM about a topic — an internal intake, a due-diligence questionnaire, a structured assessment — and on the other side comes a structured record. Every required field is filled, partially filled, or explicitly marked as “we couldn’t determine this.” Conversational on top, schema-driven underneath. I inherited an agent. Hundreds of lines of prompt, written by hands that had since moved on. Rules referencing bugs I’d never heard of. Three different definitions of “done,” each one valid depending on which paragraph you stopped at. I tuned it the way you tune any prompt you didn’t write — adding clauses on top, hoping, never sure which one was load-bearing. ...

June 8, 2026 · 9 min