Error Reference
MCP error codes, what they mean, and how to fix them
When an MCP tool call fails, the response includes isError: true and a structured error object. Your AI tool will typically explain the error and suggest a fix.
Error response format
{
"error": {
"code": "rate_limited",
"message": "Per-minute unit cap exceeded. Slow down.",
"retryable": true,
"retry_after": 12,
"docs_url": "https://www.atribu.app/docs/mcp/errors#rate_limited",
"request_id": "01968a3b-..."
}
}Every error carries docs_url -- a deep link back to this page, to the exact code you got. Some errors include additional fields:
docs_url-- a deep link to the section on this page for this exactcoderequired_scopes-- present oninsufficient_scopewhen the missing token scope is known by nameaction_url-- a link to the Atribu dashboard page where you can fix the issueworkspaces-- a list of available workspaces (forworkspace_required)profiles-- a list of available profiles (forprofile_required)support_hint-- a suggestion to contact support with therequest_id
Error codes
Authentication failures
Authentication failures do not return a structured tool error. A missing, malformed, revoked, or expired token gets an HTTP 401 response with a JSON-RPC error (code: -32001, message "Unauthorized: invalid or missing token") and a WWW-Authenticate header. There is no distinct expired-vs-revoked signal.
Fix: check that the request carries Authorization: Bearer atb_user_.... If the token was revoked (or rotated more than 48 hours ago), create a new one from Developer > MCP Tokens.
Scope errors
Single-resource inference
If you have exactly one workspace or one profile, it's selected automatically. These errors only occur when there are multiple options.
Rate limit errors
| Code | Retryable | Cause | Fix |
|---|---|---|---|
rate_limited | Yes | Per-minute or per-period unit cap exceeded | Wait retry_after seconds, then retry |
The retry_after field tells you how many seconds to wait. AI tools that support retry will handle this automatically.
Connector errors
These errors include an action_url that links directly to the integrations page in your Atribu dashboard.
Write-back errors
Idempotency replay is not an error
Repeating a confirm with an idempotency key that was already processed returns a success response carrying replayed: true and the prior result — no duplicate send, no error.
Input errors
Server errors
| Code | Retryable | Cause | Fix |
|---|---|---|---|
internal_error | Yes | Unexpected server error | Retry once. If persistent, contact support with the request_id |
Troubleshooting
"I get workspace_required but I only have one workspace"
This can happen if your token was created before a workspace was deleted. Try calling list_workspaces to see which workspaces your token can access, and pass the workspace_id explicitly.
"Data seems stale or empty"
Check the meta.data_as_of field in successful responses. If it's more than a few hours old, your integration may need re-syncing. Go to Settings > Integrations and check the sync status.
"I can't see customer emails"
PII is masked by default. You need all three: mcp:read_pii token scope, include_sensitive: true in the tool call, and workspace PII mode set to full_default. See Privacy & PII.
"send_meta_conversions returns insufficient_scope"
This tool requires the mcp:write token scope, workspace write-back enabled, and workspace admin role. Check all three conditions.
"An onboarding write is refused and I do not know which of the three is missing"
The three gates answer with three different codes, on purpose — each has a remedy the other two cannot supply:
| Code | What is missing | Who fixes it |
|---|---|---|
insufficient_scope | the token's mcp:write grant | you, by re-consenting |
writeback_disabled | the workspace's MCP write-back setting | a workspace owner/admin, once |
insufficient_role | your owner/admin role | a workspace owner/admin |
Why an approval hand-off does not rescue the third one. apply_recommendation and send_meta_conversions let a non-admin propose a write for a human to approve, because the approved write runs later, server-side, through a function Atribu already owns. An onboarding tool's write exists only as a REST call carrying your token — there is nothing to run later without either storing your credential or re-implementing the write with different authorization. So for the setup tools the answer is the honest one: someone who holds the role has to run it.
Every one of them carries an action_url pointing at the exact page. Run the tool with mode: "preview" to see what the call WOULD do — preview clears none of these gates, deliberately, so you can show a user the plan before asking them to change anything.