An implementer wants to build the smallest MCP implementation that still conforms to the specification. Which components MUST every implementation support?
Select an answer to reveal the explanation.
Short Explanation
Think of it as the minimum kit to get on the road: engine, steering, brakes. For MCP that's the base protocol, versioning and the message patterns — everything else you bolt on when you need it. The trap is assuming every server must expose all three primitives.
Full Explanation
The base protocol overview lists MCP's components: base protocol, versioning and compatibility, message patterns, authorization, server features, client features and utilities. It then states that all implementations MUST support the base protocol, versioning and the message patterns, and that other components MAY be implemented based on the specific needs of the application. That modularity lets a server expose only the features it needs, declared through capabilities. Requiring tools, resources and prompts together is incorrect; a server declares only the primitives it offers, and a server with just tools is fully valid. Authorization is optional rather than universal: implementations using HTTP-based transports SHOULD conform to the authorization specification, while stdio implementations SHOULD NOT and instead obtain credentials from the environment. Elicitation is an optional client feature that a client advertises in its capabilities when supported. Change notifications are opt-in through subscriptions/listen, so a server answers that request only if it supports change notifications for something. Exam caveat: servers MUST implement server/discover as part of versioning, which is why discovery appears in the mandatory core. Operational check: confirm the implementation handles JSON-RPC messages, per-request _meta, version errors and server/discover, then add only the primitives the use case requires.