Safeguard
AI Security•

Should an MCP server show different tools to different users?

Yes, if the difference follows per request authorization. The MCP spec lets tool lists vary by granted scopes but not by connection. Why that is safer.

Safeguard Security Team
3 min read

Yes, in one specific way. The current MCP draft says a tool list may vary by the authorization on each request, such as only tools the caller's scopes allow, but not per connection or as a side effect of other requests. Hiding tools by identity helps if the server still enforces access on every call.

What the spec allows

The draft says a server that declares tools must respond to a tools list request with the tools currently available to the requesting client. The set may be empty and may change over time. It must not vary per connection or as a side effect of other requests. It may vary by the authorization presented on the request, because credentials are per request input, not connection state.

Why filter the list at all

A model that never sees a tool cannot be talked into calling it. Filtering the list reduces the attack surface, shortens the prompt and avoids confusing the model with options it cannot use. It matches the OWASP advice to give the model only the extensions it needs.

Filtering is not enforcement

LayerPurposeCan it stand alone
Filtered tool listReduce what the model seesNo
Per call authorizationBlock calls the caller may not makeYes
Scope step upAsk for more access when neededNo, it depends on the above

A hidden tool can still be called by a client that knows its name. The spec requires servers to implement access controls, so check authorization on every call and return 403 with the scope challenge when the token is not enough.

A design that works

  1. Define scopes by action, such as read, write and admin, not by product area.
  2. Issue the smallest set at first sign in.
  3. Build the tool list from the scopes on the current token.
  4. Check the same scopes again on every tool call.
  5. On a denied call, return an insufficient scope response naming the missing scope so the client can ask for it.
  6. Log the elevation request and the result.

What to avoid

Do not vary tools by an unauthenticated header, a session the client sets itself or the order of earlier calls. That breaks the rule that the list must not change as a side effect, and it makes behaviour hard to test.

Safeguard includes agent identity and policies, gates and guardrails for per agent access. A free scan is at https://gold.safeguard.sh/scan.

Try it yourself

See which Safeguard tools the assistant has available in the demo, and compare that list with what a different account might be allowed to see.

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

Quick check

Does hiding a tool prevent calls to it?

No. Servers must still check access on each call. The list is a convenience for the model, not a security boundary.

Can the tool list change during a session?

It may change over time, but not as a side effect of other requests on the connection. Clients should expect list changes and re-check approvals.

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.