feat(mcp): cap read volume per caller identity

A scope authorises a read and says nothing about volume. An agent reads a
thousand records in seconds where a person clicks ten, and until now nothing
noticed: the token is valid, the tool is permitted, the ACL passes. That gap
stopped being theoretical the day an autonomous run started reading the whole
catalog on a schedule.

identifier: credential keys the counter on the sub claim — the end user,
whoever is asking on their behalf — so an agent looping under one person's
identity spends that person's budget and cannot spend everyone's. Verified on
catalog: pm-user and ro-user hold separate counters.

Per-route namespace, so a busy domain cannot exhaust another's.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Stéphane Tailland
2026-08-29 18:05:45 +02:00
parent 2143c5f0bb
commit 37770f39d4
+1 -1
View File
@@ -18,7 +18,7 @@ plugin: rate-limiting-advanced
config: config:
identifier: credential identifier: credential
# Per-route counters. Sharing a namespace across domains would let a busy # Per-route counters. Sharing a namespace across domains would let a busy
# catalog exhaust the budget for payments. # domain exhaust the budget for another.
namespace: ${NAME}-catalog-mcp namespace: ${NAME}-catalog-mcp
strategy: local strategy: local
sync_rate: -1 sync_rate: -1