Rate limits
The MCP endpoint sits behind a per-Space throttle, shared across all MCP clients connected to that Space.| Limit | Value |
|---|---|
| Requests per Space per minute | 60 |
429 Too Many Requests JSON-RPC error and a Retry-After header. MCP-aware clients (Claude Desktop, Cursor) back off automatically on 429 and retry once the window clears.
Underlying API limits
Each MCP tool delegates to a Public API V1 endpoint, and those endpoints have their own per-Space throttles:| Tool | Underlying endpoint limit |
|---|---|
list_events, get_event | 7/minute |
list_contacts, get_contact | 15/minute |
list_companies, get_company | 15/minute |
query_ad_metrics | 30/minute |
Error envelope
Every error from an MCP tool returns a structured envelope so the model can recover deterministically without parsing prose:[error_class] prefix is one of:
| Class | When it fires | What the model should do |
|---|---|---|
validation_error | Bad parameter shape, enum, or type. | Re-call with corrected args (e.g. valid date format, supported operator). |
authorization_error | Token doesn’t grant the requested scope, or user lost Space access. | Stop. Surface “I lost access to this Space” to the user. |
not_found | Record (event/contact/company by ID) doesn’t exist. | Surface “no record with that ID” to the user. Don’t retry. |
rate_limited | Per-Space or per-endpoint throttle hit. | Wait, back off, then retry. |
upstream_unavailable | SingleStore or an ad-platform API is temporarily down. | Retry once after a short wait. |
internal_error | Unhandled exception. Already logged to Sentry with the correlation_id. | Stop. Surface “something went wrong” to the user. |
unknown_tool | Tool name doesn’t exist on this server. | Drop the call; the model probably hallucinated the tool. |
Reference ID: … is the row ID in mcp_audit_log for this call. Include it in support requests so the Cometly team can trace the failure end-to-end.
Validation error detail
Validation errors include the field-by-field reasons, formatted for the model:Best practices for client builders
- Always parse the
[error_class]prefix, not the message text. Messages may evolve; the class won’t. - Honour
Retry-Afteron429. Cometly doesn’t bill for retries, but a hot loop will keep you locked out. - Surface the
Reference IDto end users when an error escapes. It’s the fastest way to get a real diagnosis from support. - Don’t cache
401responses. When OAuth tokens expire, the next call has to walk the flow.