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
How do you turn a REST or GraphQL API into an MCP server? What 220 generated tools taught me
The direct answer, then the parts the mapping doesn't tell you: OpenAPI and GraphQL to MCP tool code, the non-null relation that zeroed out a whole query, GraphQL's HTTP 200 failures, and a description pipeline that failed silently for weeks.
Sep 21, 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
Slack's MCP server is live. Your users still can't connect their own workspace.
Slack's MCP server uses user tokens, supports PKCE and returns a spec-correct 401. It also has no registration endpoint, and Slack permits MCP only for Marketplace-listed and internal apps. What that means if you embed an assistant in someone else's product.
Sep 15, 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
MCP error handling patterns that hosts can actually use
Three error categories every MCP server should return — retryable, user_action_required, permanent — plus the shape, the audit story, and why you should never leak a stack trace.
Jul 13, 2026 · 4 min - MCP education
MCP server pricing: what hosting costs, and the limits that keep it predictable
Hosted MCP pricing models compared (per-endpoint vs usage vs platform bundles), and the protection stack — rate limits with burst, monthly stop-loss caps, per-customer allowances — that makes agent traffic budgetable.
Jul 11, 2026 · 5 min - MCP education
MCP distribution: how customers actually find and connect your server
Shipping an MCP endpoint is step one — distribution is the channel: your own /use-from-AI page, directory listings, one-click install links, and the generative-engine surface that makes assistants recommend you.
Jul 11, 2026 · 4 min - MCP education
The MCP connect page is your new signup form — design it like one
How MCP clients discover auth (the four-RFC handshake: 9728, 8414, 7591, PKCE) and what belongs on the hosted connect screen your customers see: branding, minimal credential ask, live validation, privacy copy.
Jul 11, 2026 · 5 min - MCP education
MCP server analytics: what to measure when your customers' agents are the users
The four metric layers for production MCP servers — per-customer adoption, outcome-based reliability, per-tool health, protection headroom — plus the log schema and the two pitfalls that poison MCP dashboards.
Jul 11, 2026 · 5 min - MCP education
AI agents need different docs: writing MCP tool descriptions that don't hallucinate
Agents can't ask follow-ups — your MCP tool descriptions are their entire world. Seven rules (verb accuracy, enums verbatim, ID provenance, concrete return shapes) and the AI pipeline that scales them to 84 tools.
Jul 11, 2026 · 5 min - MCP education
Make your SaaS usable from Claude, Cursor and ChatGPT — with one MCP URL
The per-client playbook for shipping your product into AI assistants: Claude custom connectors, Cursor deep links and mcp.json, ChatGPT connectors — all from one spec-compliant MCP endpoint.
Jul 11, 2026 · 5 min - MCP education
Per-customer identity for MCP servers: the end of the shared API key
Shared API keys turn MCP servers into liability: no attribution, no selective revocation, silent authz bypass. The gateway pattern gives every customer their own credential — encrypted, forwarded per call, revocable.
Jul 11, 2026 · 5 min - MCP education
GraphQL to MCP: introspection, nullability landmines, and lean selection sets
Turning a GraphQL API into MCP tools: query/mutation→tool mapping, why greedy selection sets explode on non-nullable fields, per-customer credential forwarding, and verb-accurate descriptions.
Jul 11, 2026 · 6 min - MCP education
OpenAPI to MCP: the practical conversion guide
How to convert an OpenAPI spec into MCP tools that agents actually use well: operation→tool mapping, curation, read/write flags, agent-grade descriptions, and the gotchas that survive spec review.
Jul 11, 2026 · 6 min - MCP education
Why you shouldn't build your MCP server in-house (the 80/20 nobody scaffolds)
AI can scaffold an MCP server in an afternoon — but per-customer auth, OAuth 2.1, quotas, logs and real-client compatibility are the 80% you'd still be building months later. The honest build-vs-buy analysis.
Jul 11, 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 - MCP education
Case study: AnnounceKit turned its GraphQL API into an 84-tool MCP in one afternoon
How AnnounceKit converted its GraphQL API into a hosted MCP server with 84 typed tools, per-customer authentication and usage analytics — live for Claude, Cursor and ChatGPT the same day.
Jul 11, 2026 · 7 min - MCP education
MCP vs REST APIs: when to wrap and when to skip
MCP and REST solve different problems for different consumers. The diffs that matter — discovery, auth, errors, pagination, bounded output — and why most MCP servers are just glue over REST.
Jul 9, 2026 · 4 min - MCP education
MCP rate limiting and quotas: a practical guide
Why MCP servers need stricter limits than REST APIs, and how to layer per-tool, per-user, per-workspace, and cost caps without breaking agent UX.
Jul 5, 2026 · 4 min - MCP education
The production MCP server checklist
Ten things every MCP server needs before it ships to enterprise customers — auth, scopes, quotas, observability, audit, versioning, dry-run, rollback, health, docs.
Jul 4, 2026 · 5 min - MCP education
MCP audit logs that actually matter at security review
Audit logs are a compliance artifact, not a debug stream. Here's the minimum field set, retention policy, and tamper-evidence pattern that survives enterprise procurement.
Jul 1, 2026 · 5 min - MCP education
MCP Tools vs Resources vs Prompts: which primitive when
MCP exposes three primitives because hosts render each as a different UI. Here's the decision rule for picking Tools, Resources, or Prompts — with examples.
Jun 27, 2026 · 4 min - MCP education
What is an MCP server? A plain-English guide for 2026
Plain-English guide to MCP servers: what the Model Context Protocol is, how an MCP server differs from a REST API, the anatomy of tools and resources, and a production checklist.
Jun 25, 2026 · 6 min - MCP education
OAuth for MCP servers: the 2025-06 spec, explained
OAuth 2.1 with PKCE is how the MCP spec authorizes remote servers. Here's the flow, the spec requirements, and the pitfalls to avoid when shipping a hosted MCP server.
Jun 23, 2026 · 5 min - MCP education
MCP vs function calling: what's actually different
MCP and function calling solve different problems. Function calling is a per-model capability; MCP is the cross-model protocol that makes your tools portable. Here's how they fit together in production.
Jun 22, 2026 · 5 min - MCP education
MCP server security: a production checklist
Production security checklist for MCP servers: short-lived per-user JWTs, tool-level authorization, gateway rate limits and cost caps, confirmation for destructive writes, prompt-injection handling, and append-only audit logs.
Jun 21, 2026 · 7 min