MCP Six Months After GA: What's Actually Working in Production

Model Context Protocol went GA at Microsoft Build in May. Six months in, I have enough production experience with it to give you a more honest take than the launch-day excitement warranted.
The short version: MCP is the right abstraction and the ecosystem is growing fast, but there are friction points in the production deployment story that nobody talks about at conferences.
What's Working Well
Tool portability is exactly as advertised. An MCP server I wrote to expose Unity Catalog table metadata works with Claude.ai, LangGraph, Copilot Studio, and the OpenAI Agents SDK without any modification. Write the server once, connect it to any client. That's a genuine win for teams that don't want to maintain multiple tool integration implementations.

The inspector tooling for debugging MCP servers is solid. You can run an MCP server locally, point the MCP inspector at it, and interactively test tool calls without a full agent workflow. That's a much faster development loop than "spin up an agent, run it, check the logs."
The Friction Points
Authentication is underspecified in the current protocol. Each MCP client implements auth differently, which means your server needs to handle the lowest common denominator or maintain client-specific auth logic. For internal tools where everything is in the same network this is fine; for external-facing MCP servers it's a real problem.
Error handling semantics are inconsistent across clients. When a tool call fails, different clients treat the error differently — some retry, some surface to the model, some raise an exception. Design your error responses defensively.
The production deployment story (running an MCP server in a container, managing lifecycle, handling restarts) is still mostly DIY. The ecosystem around this is immature compared to typical API service deployment. Worth it for the portability; just go in with realistic expectations about the ops overhead. I'm here to help work through the implementation.