What an MCP server actually is, and the tool-design mistakes that break it

MCP gives you a standard wire format for connecting an agent to tools — it doesn’t make the tools on the other end safe to call. Most MCP servers are thin wrappers around an existing REST API, which quietly imports every assumption that API made about having a human developer as its client. Here’s what MCP actually is, how it differs from the API you already know, and the specific tool-design mistakes that turn a working MCP server into a flaky agent.

August 30, 2026 · 11 min · 2199 words · Loop & Retry

What Idempotent Actually Means: Why Retries Are Safe (and When They Aren't)

Idempotent means doing something twice has the same effect as doing it once. This is essential for APIs, agents, and any system where retries can happen. Here’s why, and how to get it right.

August 28, 2026 · 10 min · 2044 words · Loop & Retry

Tool output is untrusted input: prompt injection is a data-flow bug

Prompt injection isn’t a prompting problem, so you can’t prompt your way out of it. It’s the same class as SQL injection: data from an untrusted source crosses into a control channel and gets executed as instructions. The web page your agent just fetched, the ticket it just read, the email in its inbox — all of it is attacker-controllable input flowing straight into the one component that can’t tell data from commands. Here’s the data-flow framing, why ‘ignore injected instructions’ can’t work, and the boundary that actually helps.

July 13, 2026 · 8 min · 1517 words · Loop & Retry