Blog
Notes from the bridge between docs and agents.
Short, opinionated essays on MCP, AI tooling, and the operational reality of shipping AI-native developer products.

Why better documentation won't fix AI hallucinations
Documentation was written for humans. AI agents need infrastructure. Here is the structural problem nobody is solving — and what it looks like when you fix it.

Stop pasting docs into Cursor. Let your agent borrow what others built.
The fastest engineers in 2026 don’t copy-paste API docs into their prompts. They expose a clean MCP server and let every editor pull from the same source of truth.

One MCP server, six editors. Why the registry shape matters.
Cursor, Claude Desktop, VS Code, Windsurf, Codex and Zed all speak MCP — but they consume it differently. Here’s how doc2mcp produces a single artifact that fits all of them.

Tokens, headers, and the quiet leaks AI apps keep shipping
Bearer tokens in URLs, chat IDs in console logs, Authorization headers visible to every extension on the page. A pragmatic checklist for AI app security.

Your MCP should auto-sync. Here's how doc2mcp does it.
Vendor docs change quietly. Your AI agent doesn't notice until it ships a broken API call. Content hashing + cron + diff-aware regeneration is the fix.

OpenAPI is not docs. Stop shipping it to your AI agent.
Swagger specs are necessary, not sufficient. Routes don't tell a model when to call which endpoint. Workflows do.

Observability for AI agents: what to log when the model is the bug
Latency, cold starts, token burn, error rates, traces. The five panels every team running an agent in production should be staring at by week two.

Agents are just tools and loops. Stop overthinking it.
Strip the marketing. An AI agent is a model with a set of typed tools, a planner, and a stopping rule. Treat it that way and shipping gets boring (good).

Prompting still matters. Here's the cheap stuff that works.
You don't need a 4,000-token system prompt to ship a good AI feature. You need clear roles, three examples, and a stopping condition. Here's a working template.