This page documents MCP runtime protection controls and error patterns.
Scope Enforcement
- Each tool has required scopes resolved at execution time.
- Read defaults to
revspire.agentforce.tools.read. - Mutation defaults to
revspire.agentforce.tools.write. - Equivalent MCP scopes are accepted.
Rate Limiting
Rate limit key is per tool and per viewer in a rolling 60-second window.
Default: 60 requests/min per tool per viewer Overrides: - search.query_content: 80/min - dealroom.create_from_playbook: 20/min - analytics.chat_grounded: 20/min
Idempotency (Mutation Tools)
- Supported on all mutation tools.
- Uses explicit
idempotency_keywhen provided. - Falls back to deterministic payload hash if key is absent.
- Successful results are replayed for ~10 minutes.
Timeouts
Default timeout: 30s Overrides: - search.query_content: 45s - pitch.get_buyer_journey: 45s - pitch.create_email_draft: 45s - analytics.fetch_pitch: 45s - analytics.chat_grounded: 90s - dealroom.create_from_playbook: 120s
Error Model
MCP returns normalized errors with:
codemessagestatusretryabledetails
Common Errors
| Error Code | HTTP | Meaning | Action |
|---|---|---|---|
TOOL_NOT_FOUND |
404 | Unknown tool name | Check exact tool identifier |
INVALID_ARGUMENTS |
400 | Schema validation failed | Fix input payload and retry |
INSUFFICIENT_SCOPE |
403 | Token missing required scope | Reauthorize with required scopes |
IDENTITY_MISMATCH |
403 | Payload identity conflicts with token | Remove/align viewer and org IDs |
RATE_LIMITED |
429 | Tool rate limit exceeded | Backoff and retry after delay |
TOOL_TIMEOUT |
504 | Tool exceeded execution timeout | Retry with narrower query/payload |
BACKEND_ROUTE_ERROR |
4xx/5xx | Underlying route call failed | Inspect details and source route |
Retry Guidance
- Retryable classes: 408, 425, 429, 500, 502, 503, 504.
- Use exponential backoff with jitter.
- For mutation calls, reuse the same
idempotency_key.