Safeguard
AI Security•

MCP tool security: what the spec requires versus suggests

Which MCP tool controls are mandatory and which are only advice? A MUST versus SHOULD table for servers and clients, plus gaps you must cover yourself.

Safeguard Security Team
4 min read

The MCP spec requires servers to validate tool inputs, implement access controls, rate limit calls and sanitize outputs. Most client side controls are only recommended: confirmation prompts, showing inputs, validating results, timeouts and audit logging. A human in the loop is a should, not a must.

The server side: musts

The tools page of the current draft lists four things a server must do.

  1. Validate all tool inputs.
  2. Implement proper access controls.
  3. Rate limit tool invocations.
  4. Sanitize tool outputs.

These are short statements. The spec does not say how strict validation must be or what a good rate limit looks like, so a server can meet the letter and still be loose.

The client side: shoulds

For clients the draft says they should prompt for confirmation on sensitive operations, show tool inputs to the user before calling the server, validate tool results before passing them to the model, implement timeouts, and log tool usage for audit purposes. It also says clients must treat tool annotations as untrusted unless they come from trusted servers.

Side by side

ControlApplies toStrength
Validate inputsServerMust
Access controlsServerMust
Rate limitingServerMust
Sanitize outputsServerMust
Human in the loop for tool callsClientShould
Confirmation for sensitive operationsClientShould
Show inputs before sendingClientShould
Validate resultsClientShould
TimeoutsClientShould
Audit loggingClientShould
Treat annotations as untrustedClientMust

What this means for you

If you build a server, treat the four musts as a floor and write tests for each. If you choose a client, ask which of the shoulds it actually implements, because the spec lets a client skip all of them and stay compliant.

If you run agents in production, write your own policy for the gaps:

  1. Decide which tools need approval and enforce it outside the model.
  2. Log every call with the identity, tool, arguments and result status.
  3. Set per agent limits on call volume and loop length.
  4. Re-check the tool list after every server update.

Why approval cannot rest on the model

The spec also describes a user interaction model in which tools are model controlled. That is why approval and logging cannot be left to the model. They have to be enforced by the client, a proxy or the downstream system.

Safeguard includes policies, gates and guardrails for agent tool use, and a free scan at https://gold.safeguard.sh/scan.

Try it yourself

Click through the setup flow and note each point where a server asks for access, then compare those points with the controls in the table.

Click through it at your own pace, or open it full screen.

Quick check

Is human approval mandatory in MCP?

No. The draft says there should always be a human in the loop with the ability to deny tool invocations, which is a recommendation. Enforce approval in your own client or policy layer.

Who is responsible for sanitizing tool output?

The spec makes it a server duty, and clients should also validate results before passing them to the model. Doing both is safer than trusting either.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.