createmcps.com

MCP-CAC-005

Authenticated or personalised results are not marked cacheScope: public

“A `cacheScope` of `"public"` indicates that the response does not contain user-specific data and can be safely shared.” — spec anchor

How to fix this

Not a spec MUST — a data-leak class where a shared intermediary caches a per-user result. Stays a warn forever; explain clearly rather than escalating.

Example: failing and passing

A tool list filtered for Alice's access token is marked "public", so a shared cache may serve it to other callers.
Violates MCP-CAC-005 · HTTP
POST /mcp HTTP/1.1
Host: mcp.example.com
Authorization: Bearer <alice-access-token>
Mcp-Method: tools/list
...

HTTP/1.1 200 OK
Content-Type: application/json

{"jsonrpc":"2.0","id":1,"result":{"resultType":"complete","tools":[{"name":"read_alice_inbox","inputSchema":{"type":"object"}}],"ttlMs":60000,"cacheScope":"public"}}
The same per-user list is marked "private", so caches must not share it across authorization contexts.
Complies with MCP-CAC-005 · HTTP
POST /mcp HTTP/1.1
Host: mcp.example.com
Authorization: Bearer <alice-access-token>
Mcp-Method: tools/list
...

HTTP/1.1 200 OK
Content-Type: application/json

{"jsonrpc":"2.0","id":1,"result":{"resultType":"complete","tools":[{"name":"read_alice_inbox","inputSchema":{"type":"object"}}],"ttlMs":60000,"cacheScope":"private"}}

How the validator checks this

Probe P2.1, against a streamable-http server on the modern protocol. What it reports:

info
… declare cacheScope "public". We probe unauthenticated and cannot tell whether these vary per user — if any does, "public" lets a shared cache serve one caller's list to another.

Quoted from the probe that runs this check, so it cannot drift from what the validator actually reports.

This rule is checked heuristically: a fail is inferred rather than certain, so it bumps the overall grade up one level instead of being treated as certain non-compliance.

Checked in the same request as MCP-HDR-008, MCP-HDR-009, MCP-RES-003, MCP-RES-006, MCP-RES-007, MCP-ERR-003, MCP-ERR-004, MCP-ERR-005, MCP-ERR-008, MCP-CAC-001, MCP-CAC-002, MCP-CAC-003, MCP-CAC-004, MCP-SCH-001, MCP-SCH-002, MCP-SCH-003, MCP-SCH-004, MCP-SCH-005, MCP-SCH-006, MCP-SCH-007, MCP-SEC-004, MCP-SEC-005, MCP-SEC-006, MCP-DEP-005.

Check your own server against MCP-CAC-005

Probe P2.1 checks MCP-CAC-005 in the same request as 24 other rules, so one run shows your server's result for this rule next to the rest. Validate a server or read how the validator works.

Background on this topic: ttlMs and cacheScope explained.

Other Caching metadata rules