Capability design rather than endpoint conversion

A production MCP server should expose bounded user outcomes, not every REST operation generated one-to-one. Each tool contract specifies semantics, input and output schemas, authorization, side effects, idempotency, timeouts, result limits and stable error classes.

Resources require stable identifiers, access checks at read time and explicit freshness semantics. Prompts are user-controlled templates, not a privileged channel for silently changing system policy.

Lifecycle, transport and operations

The implementation must negotiate protocol versions and capabilities, validate every message and separate the MCP adapter from domain logic. Stdio fits local process-bound integrations; Streamable HTTP fits remote multi-user deployments but adds origin validation, OAuth metadata, session and scaling concerns.

Release evidence includes protocol conformance, contract tests, downstream failure tests, concurrency tests, telemetry, reproducible deployment and rollback. A server is not production-ready merely because an inspector can call one tool.