skip to content

What are the three key principles of MCP's security model in revision 2026-07-28?

level: middleimportance: must knowfreq 72%

answer

  1. Count them: it is three, not four
  2. One vanished with a deprecation
  3. Consent, privacy, tool execution
  4. The protocol states, the host enforces
  5. Sampling's principle went with Sampling

basics

~20 s

User Consent and Control, Data Privacy, and Tool Safety. Revision 2026-07-28 deleted the former fourth principle, LLM Sampling Controls, when Sampling was deprecated. MCP states these principles but cannot enforce any of them at the protocol level.

solid answer

~50 s

As of revision **2026-07-28** the specification names three: **User Consent and Control** (users must explicitly consent to and understand the data accessed and the operations performed on their behalf, and keep control over both), **Data Privacy** (the host must obtain explicit consent before exposing user data to a server, must not transmit resource data elsewhere without consent, and should protect it with access controls), and **Tool Safety** (a tool call is arbitrary code execution on the far side of the wire, so it needs caution and explicit consent, and a server's self-описание of its tools is a hint, not a guarantee). A fourth principle, *LLM Sampling Controls*, was deleted in 2026-07-28 when Sampling was deprecated. The spec is explicit that MCP itself cannot enforce these at the protocol level — the host application is the enforcement boundary.

go deeper

for a junior

Be able to name the three principles and say, in one sentence each, what they protect. Add that MCP describes them but does not enforce them.

for a middle

Explain why a wire protocol cannot enforce a human decision, and place the enforcement on the host. Know that the fourth principle was deleted in 2026-07-28 with Sampling's deprecation.

for a senior

Show what the protocol does contribute instead — per-request capabilities, untrusted self-reported identity, hints, audience-bound tokens — and where a real host implementation has to fill the gap.

for a principal

Own the consequence: security posture for MCP is set by host policy and server-selection policy, not by protocol conformance, so vendor claims of "MCP-compliant and secure" are close to meaningless without a description of the host's consent model.

## What the specification names MCP's security section opens with a short list of principles every implementation is expected to honour. As of revision **2026-07-28** there are exactly **three**. **User Consent and Control.** Users must explicitly consent to, and understand, the data that is accessed and the operations that are performed on their behalf. They must retain control over what is shared and what is invoked, and implementations are expected to surface that clearly rather than bury it in configuration. **Data Privacy.** A host must obtain the user's explicit consent before exposing their data to a server, and must not transmit resource data somewhere else without consent. Data should be protected with appropriate access controls. **Tool Safety.** Invoking a tool is arbitrary code execution on the other side of the connection, so it deserves caution and explicit consent. Descriptive text and behavioural hints a server supplies about its own tools describe intent, not fact, and a client must treat them as untrusted unless the server itself is trusted. ## The fourth principle that is gone Almost everything written about MCP before mid-2026 lists a fourth principle, *LLM Sampling Controls*, which said users should approve any request for the host to run a model completion on a server's behalf, and that a server should not see the whole prompt or conversation. That principle was **deleted in 2026-07-28**, in the same revision that **deprecated Sampling** (migration guidance: integrate directly with LLM provider APIs). Reciting four principles is the fastest way to reveal that you learned MCP from pre-2026 material. Sampling has not vanished — it is deprecated, still in the spec for at least twelve months, and reachable as a `CreateMessageRequest` inside a multi-round-trip input request — but the human-review concerns it carried now sit under **User Consent and Control** rather than under a principle of their own. ## Principles, not conformance requirements The spec says plainly that MCP cannot enforce these principles at the protocol level. That is a statement about what a wire protocol can do. A JSON-RPC schema can require fields, reject malformed params with `-32602`, define error codes such as `-32021` `MissingRequiredClientCapabilityError`, and mandate header/body agreement. It cannot verify that a human read a dialog, that a checkbox was ticked, or that the data placed in a tool argument was data the user meant to share. No message shape can certify a human decision. So the specification converts the principles into guidance for implementors: build robust consent and authorization flows, document the security implications of what you expose, implement appropriate access controls and data protections, and follow security best practices. Note that in **2026-07-28 the security best-practices document moved out of the specification** and into the documentation tutorials — quoting it as normative spec text is a factual error. ## Why the host, specifically The roles make the answer inevitable. The **host** is the application the user is actually using: it owns the user relationship, the interface, the model's context window, and the set of clients. A **client** is a per-server connector living inside the host, with no policy of its own. A **server** sees only what the host chose to put in the request it received — it cannot read the whole conversation and cannot see into other servers connected to the same host. Only the host is positioned to ask a human anything, and only the host knows what the request would expose. Every principle therefore lands on the host as the enforcement boundary, with the protocol supplying material for its decisions. ## Consent is not attached to a connection A second thing 2026-07-28 changed matters here. MCP is now **stateless**: every request is self-contained and carries its own protocol version and capabilities, servers MUST NOT rely on prior requests over the same connection, and an open connection such as a stdio process is explicitly "not a conversation or a session". The `initialize` handshake, `notifications/initialized`, protocol-level sessions and the `Mcp-Session-Id` header were all removed. Consequently a grant cannot be modelled as "this session is approved". It lives in the host's own state, keyed to the user and the server's identity, and is applied to each outbound request the host decides to make. ## What the protocol does contribute It contributes structure and identity rather than enforcement: per-request `io.modelcontextprotocol/protocolVersion` and `io.modelcontextprotocol/clientCapabilities` so a server never guesses what it is talking to; `clientInfo`/`serverInfo`, both explicitly self-reported and untrusted; behavioural hints on tools that clients must treat as untrusted unless the server is trusted; and, for remote servers, an OAuth 2.1 profile with audience-bound tokens and a prohibition on token passthrough. Those give the host evidence. Deciding on it is still the host's job. ## Interview traps Naming four principles; saying the protocol "requires" consent; putting enforcement in the server or in the client library; describing consent as granted at connection time; and citing the best-practices document as part of the specification.

  • Why was LLM Sampling Controls dropped rather than folded into the other three?
    It governed a feature the same revision deprecated. 2026-07-28 deprecated Sampling outright, with the migration being direct integration with LLM provider APIs, so a top-level principle about model-completion requests had no core surface left to govern. The human-review concerns it carried are still covered by User Consent and Control, which applies to any request the host would fulfil on a server's behalf.
  • Could a conformance test suite verify that an implementation honours these principles?
    No, and that is the point of the spec's own disclaimer. A test can check message shapes, required `_meta` fields, error codes and header agreement. It cannot observe whether a human approved anything, whether the consent dialog was honest, or whether the data placed in a tool argument was data the user meant to share. Those are properties of the host's implementation and UX, verified by review, not by the wire.
  • Where did MCP's security best-practices document go in 2026-07-28?
    It moved out of the specification and into the documentation tutorials. It remains useful guidance, but it is no longer normative spec text, so an answer that says "the specification requires" for material drawn from it is wrong. The specification proper keeps the three principles, the untrusted-metadata rules, and the authorization profile.

saying these in an interview costs you the question

  • Lists four principles, including LLM Sampling Controls
  • Claims MCP enforces consent at the protocol level
  • Says the server is responsible for prompting the user
  • Treats the security best-practices document as part of the spec
  • Describes consent as granted once per connection or session

context