Reference / Errors and limits
View as Markdown

Errors and limits

What each kind of failure looks like, and how to retry safely.

Connection errors#

ResponseMeaningWhat to do
HTTP 401 with WWW-AuthenticateNo token, or the token expired or was revokedLet your client refresh, or sign in again.
HTTP 401 for a member who left GravityAccess ended with their membershipNothing. The account can't be used.
HTTP 403 with error="insufficient_scope"The token doesn't include matching:manageSign in again and approve the connection.
HTTP 503 with "MCP authorization is temporarily unavailable."Gravity's sign-in service is downTry again later.

Tool errors#

What you getMeaningWhat to do
isError: true, text starting Input validation error: Invalid arguments for toolAn argument is missing, misspelled, extra, or malformed. Nothing ran.Fix the arguments.
JSON-RPC error Tool ... not foundThe tool doesn't existUse a tool from the tools overview.
null or an empty listNothing you're allowed to see matchedCheck the ID came from a tool result. Don't guess IDs.
"status": "error" with a message, and isError: trueThe tool ran but couldn't do what you askedFollow that tool's error table.
isError: true, text starting "The operation could not be completed."Something unexpected went wrongRead the goal to see whether the change happened before retrying.

Retries and request IDs#

Reads are safe to repeat.

Writes take a requestId. If a write fails before you get a result, retry it with the same requestId and identical arguments. Gravity returns the original result without repeating the change, as long as the goal hasn't changed since. Calling with a used requestId and different arguments is rejected.

After any write error, read the goal again before deciding what to do next.

Limits#

LimitValue
Goal text2,000 characters
Private details (additionalContext)4,000 characters
Groups per goal100
Running searches per goal1
Access token lifetime1 hour
Staying connected (offline_access)Until 90 days without use

Sign-in endpoints are rate limited. If you see HTTP 429 while signing in, wait a minute and try again.

Each search does real work for every network it covers. Start one only when you're asked, and never in a loop. A full search on a goal that was already searched replaces matches nobody has acted on.

Results are plain JSON. A goal with many matches makes a large get_goal result, and get_goal_matches is smaller.