The “adopt MCP when you’d otherwise write the same adapter twice” rule is probably the most practical takeaway here.
One thing I’d add from a production architecture perspective: MCP also creates a new boundary that needs to be treated like an API contract, not just a tool interface. Tool schemas, permissions, timeouts, idempotency, and result validation all become part of that contract.
The standard can remove a lot of integration glue, but it doesn’t remove the engineering responsibility around that boundary. That’s where the real production complexity starts.