Field notes on AI-native SaaS.
How to ship MCP servers, embed in-product AI assistants, and monetize AI usage — written by the team building the platform.
- MCP education
220,000 prompt tokens a turn: we stopped sending every MCP tool to the model
An 84-tool MCP deployment cost 220k prompt tokens per turn, because every bound tool schema is re-sent on every round. Per-turn tool retrieval cut schema tokens by ~75%, and broke three times before it worked.
Oct 9, 2026 · 7 min - MCP education
How to capture telemetry for MCP tool calls (your access log cannot)
Every MCP tool call is the same POST to the same URL, and a failed one returns HTTP 200. The instrumentation point, the row to write, caller attribution from the user agent, phase timings, and the retention job we added too late.
Oct 6, 2026 · 8 min - MCP education
A Cloudflare Worker cannot fetch its own domain
A subrequest to your own zone comes back 522, not your page. Three times it broke our knowledge ingest and our own health scorecard. The in-process fix, the recursion guard, and the two checks that start lying once the network is gone.
Oct 5, 2026 · 7 min - MCP education
Capping each tool result did nothing: an agent turn needs one budget
Seven tool results that each passed an 8,000-character cap shipped 56,000 characters at the model and produced a cut-off answer. The shared per-turn budget, why water-filling beats an equal split, and the tool list you pay for on every round.
Oct 5, 2026 · 7 min - MCP education
How does AI function calling and tool execution work?
The model never executes anything: it emits JSON, your code runs the tool, and you append the result and call the model again. The full loop in 20 lines, plus the five failure modes that only show up in production.
Sep 28, 2026 · 8 min - MCP education
isError is not an error: how an MCP tool fails and still looks successful
The MCP isError flag rides inside a successful JSON-RPC response, which is why hosts miss it. Three production bugs from our gateway: the failure a host has no name for, HTTP 200 with a GraphQL errors array, and the null result that isn't an error at all.
Sep 18, 2026 · 7 min - MCP education
Intercom's MCP server: two regions and a registration endpoint that says no
Intercom runs separate MCP hosts for US and EU workspaces, still answers on its deprecated /sse path, uses the older OAuth discovery pattern and rejects dynamic client registration. Measured against the live endpoints.
Sep 16, 2026 · 7 min - MCP education
Our Mixpanel connector said "connected" and read nothing. It was the region.
A Mixpanel MCP connector authenticated cleanly, loaded all 65 tools, and refused every data read. The cause was data residency: Mixpanel runs a separate MCP host per region, Intercom does the same, and nothing in the MCP handshake tells a client which one it belongs to.
Sep 14, 2026 · 6 min - MCP education
We tested 25 "official" MCP servers for one-click OAuth. Ten failed.
A registration_endpoint in a provider's OAuth metadata isn't proof it accepts self-registration. Real testing against Intercom, Calendly, PostHog, Freshdesk and 21 other MCP servers found a charset bug and ten false positives — here's what broke and how we fixed the marketplace around it.
Sep 13, 2026 · 6 min - MCP education
Cloudflare might be blocking your AI customers — the AI-bot trap for MCP servers
Cloudflare's AI-bot protections block legitimate Claude and ChatGPT traffic to APIs and MCP servers. How to spot edge blocking (zero server logs, OAuth passes, tool calls vanish) and fix it without disabling bot protection.
Jul 11, 2026 · 5 min - MCP education
The three bugs that break real MCP clients (found with Claude in production)
A 405-vs-401 handshake detail, a missing CORS header, and Cloudflare's AI-bot blocking: three production bugs that pass spec review but break Claude, Cursor and ChatGPT — with symptoms and fixes.
Jul 11, 2026 · 6 min