// tag · mcp server
Everyone is shipping MCP servers right now, and most of them break in the same three places: the transport, the auth gate, and the moment a real client (Claude, Cursor, Codex) sends a request that doesn't match the happy-path example. This hub is our field notes on Model Context Protocol servers that actually survive production — not the toy 'hello world' that works once in the inspector and falls over the first time a tool call comes in concurrently.
We build and run these for real, so the posts below are written from the debugging trenches: concrete MCP server examples you can lift, a clear-eyed take on MCP server vs API (when the protocol earns its complexity and when a plain REST endpoint is the smarter call), and the deployment details nobody puts in the quickstart — header-based auth, concurrency limits, and the gap between what the spec says and what the clients actually do.
The other thing nobody tells you: most of the work in a production MCP server isn't the protocol at all — it's the same boring rigor any backend needs. Input validation on tool arguments, sensible timeouts, structured errors the model can actually recover from, observability so you can see which tool call hung, and a deployment that doesn't cold-start on every request. The protocol is the easy 20%. The reason your server is flaky is almost always in the other 80%, and that's what we write about here.
If you're deciding whether to build an MCP server at all, scoping one, or trying to figure out why yours works locally but dies behind a proxy, the writing below is the shortcut. It's the stuff we wished someone had written before we learned it the expensive way.
Four layers every production MCP server needs — transport, JSON-RPC shape, tool definitions, and guardrails. With real code for rate limiting, circuit breakers, and structured errors.
Not a list of cool MCPs to try — the 12 I actually run in Cursor every day, with the real mcp.json config for each and notes on which transport to pick.
MCP is not a REST replacement. Decision table, real code from both, side-by-side comparison across 10 dimensions, and the hybrid pattern that ships in production.
Struggling with scattered MCP configs, agent modes, and tool workflows, I centralized everything into a versioned foundation repository with auto-updates and visibility dashboards. This transformed a fragile, six-location mess into a predictable, auto-synced system that cuts setup time from 45 minutes to zero and surfaces real tool health instead of silent failures.