Our team runs several MCP servers in production. Two of them are remote multi-user servers. The first is an analytics gateway: a semantic layer for company data, where metrics have one standardized definition, one tested way to compute them, and role-based access. Anyone in the company can ask "which sources brought the most revenue last week" and get the same verified numbers, instead of requesting data access for the hundredth time or reinventing the calculation in a spreadsheet. The second is AI-Lens, an analytics tool for AI coding assistants.

Running these servers for real users surfaced a set of problems that, I suspect, haunt every company-wide MCP deployment: errors the model can't act on, users randomly kicked into re-login, tools silently disappearing from clients, responses blowing past size limits. None of them show up in a demo. All of them show up in week two of production.

Each time we debugged one, the fix turned into a rule. Eventually the rules became a standard: github.com/r-ms/mcp-server-standard — a normative document with a release-gate checklist, published under CC BY 4.0.

The model reads your errors, not the developer

Backend error handling usually assumes a human will read the message and fix the input. An MCP server has a different reader, and this reader makes values up. Ask the model for a table name and it will confidently produce one that almost exists. It also retries automatically, so the only question is whether your error gives it enough to retry correctly.