Conflicts and recovery
Recover safely from stale versions, validation failures, missing resources, and rate limits.
CONFLICT
A version conflict means the expected draft tip is stale or another write won the race. Do not retry blindly.
- Fetch the post again.
- Inspect the current version history.
- Reapply or reconcile the intended change.
- Preview the saved result.
- Request fresh approval before publishing.
A create or update conflict may also indicate a slug collision. Inspect existing posts before choosing a new slug or updating the existing post.
Other errors
| Code | Response |
|---|---|
VALIDATION_ERROR |
Correct the rejected input. Do not bypass validation. |
FORBIDDEN |
Explain the missing scope. Do not widen the token automatically. |
NOT_FOUND |
Re-list or re-fetch identifiers before retrying. |
RATE_LIMIT |
Wait until reset, then retry only the still-requested action. |
BILLING_REQUIRED |
Leave the draft intact and explain the subscription blocker. |
REST returns structured HTTP errors: a status code plus a JSON body {"error": {"code", "message", ...}}. MCP surfaces the same failures differently. A failed tool call comes back as a normal JSON-RPC result (usually HTTP 200) with result.isError: true and the machine-readable error object in result.structuredContent (also JSON-encoded in result.content[0].text). Authentication failures, malformed requests, and protocol-level problems instead use a top-level JSON-RPC error object. Handle both shapes.