Rate Limits - bishoku/vmcp GitHub Wiki
Rate limits
rateLimitPerMinute on an agent key and on a virtual server
caps protected tool/resource/prompt calls per minute. Both are checked; either can reject.
- Algorithm: token bucket (bursts up to the limit, refilling evenly).
- Over the limit: HTTP
429with aRetry-Afterheader, JSON-RPC error code-32029, and an audit event with statusdeniedand reasonrate limit. null/unset means unlimited.PATCHwithnullclears a limit.
Per node vs global
Without Redis each data-plane node counts on its own, so with N nodes the effective limit is up to N times the
configured value. To share counters, set VMCP_REDIS_URL on the data plane (for example redis://redis:6379/0).
- Redis is optional and used for nothing else. Sessions, config and everything essential stay in PostgreSQL.
VMCP_REDIS_FAILURE_POLICY=local(default) falls back to per-node counting on Redis failure and reports degradation.VMCP_REDIS_FAILURE_POLICY=strictdenies quota checks during Redis failure and makes readiness fail. Use this when a global quota is a security boundary; the manual demo enables strict mode.- A call rejected by the virtual-server limit may already have consumed one token of the key's limit.