Errors
What a failed request or tool call returns from the Maple Budget MCP server, the messages you'll see most, and what to do about each.
Errors from the hosted MCP server come back in one of three ways, depending on where they happen:
| Where | What you get | Examples |
|---|---|---|
| Before MCP runs | An HTTP status with a small JSON body | Not signed in (401), too many requests (429) |
| In the MCP request | A JSON-RPC error object |
Unknown tool, unknown method |
| Inside a tool | A normal result with isError: true |
Invalid category, transaction not found, read-only connection |
Most errors an AI agent sees are tool errors. They’re written so a model can read them, fix the call and try again, or explain the problem to the person.
Tool Errors
When a tool fails, the response is still a successful JSON-RPC result, with isError set to true. The text content and structuredContent hold the same JSON: error is what went wrong and status is the HTTP status Maple Budget’s API answered with.
{
"jsonrpc": "2.0",
"id": 7,
"result": {
"isError": true,
"content": [
{ "type": "text", "text": "{\"error\": {\"errors\": \"Category must be an integer between 1 and 30.\"}, \"status\": 400}" }
],
"structuredContent": {
"error": { "errors": "Category must be an integer between 1 and 30." },
"status": 400
}
}
}
Most messages arrive as {"errors": "<message>"} inside error. A few, like the read-only message below, are a plain string with no status.
Common Errors
| Message | Status | Cause | What to do |
|---|---|---|---|
This Connection Can Only Read. Reconnect To Allow Changes. |
The connection is Read Only and the tool changes data | Tell the person. They can disconnect in AI Apps and connect again with Read And Make Changes. | |
Category must be an integer between 1 and 30. |
400 | category isn’t one of the 30 category ids |
Use an id from Categories. |
Invalid tag IDs or tags do not match transaction category. |
400 | A tag id doesn’t exist or belongs to another category | Get tag ids from get_on_launch_data and use tags from the same category. |
Month needs to be between 1 and 12 and year needs to be between 2000 and 2050. |
400 | month or year is out of range |
Send month 1 to 12 and a four-digit year. |
Month And Year Must Be Integers. |
400 | month or year isn’t a whole number |
Send numbers, like month: 10, year: 2026. |
Invalid Date Format. Use 'YYYY-MM-DD'. |
400 | A date isn’t YYYY-MM-DD |
Reformat the date, like 2026-10-31. |
Invalid amount spent. Must be a decimal number. |
400 | amount_spent isn’t a number |
Send a decimal string, like "42.50" (negative for income). |
Title Must Be Under 100 Characters. |
400 | title is over 100 characters (subtitle has the same limit) |
Shorten it. |
Transaction Not Found. |
404 | The transaction id doesn’t exist or isn’t the person’s | Look the id up again with get_transactions. |
Bad Arguments: … |
A required argument is missing or an unknown one was sent | Check the tool’s parameters in the Tool Reference. | |
Something Went Wrong Running This Tool. |
An unexpected server error | Try once more. If it keeps happening, tell the person and tell us with send_feedback. |
|
Bad Arguments: message is required: … |
send_feedback was called with an empty message |
Say what you were trying to do and what was missing or wrong. | |
That's a lot of feedback for one day. … |
429 | More than 50 send_feedback reports from this person today |
Nothing was sent. Tell the person, and try again tomorrow. |
Messages are passed through from Maple Budget’s API as written, so their capitalization varies.
Tell Us
If an error doesn’t make sense, a tool you need doesn’t exist, or a result doesn’t match the person’s accounts, tell us with send_feedback. Pick a kind (missing_tool, wrong_result, error, confusing or other), say what you were trying to do and what would have helped, and add the tool and an example if you have them. Every connection can send it, Read Only too, and it doesn’t change the person’s data. It comes back with “Sent to the Maple Budget team. Thanks.” Don’t include card numbers, passwords or other secrets.
Request Errors
These come back before any tool runs.
| Status | Body | Cause | What to do |
|---|---|---|---|
| 401 | {"error": "unauthorized", "error_description": "Sign In To Maple Budget."} |
No token, or the token expired or was revoked | MCP apps refresh or sign in again on their own. With an API key, check it hasn’t been revoked. |
| 403 | {"error": "origin_not_allowed"} |
A browser page on another site called the server | Call it from your app or server, not from a web page. |
| 429 | {"error": "rate_limited", "error_description": "Too Many Requests."} |
More than 5,000 requests this hour for this connection or key | Wait the number of seconds in Retry-After. |
| 400 | JSON-RPC error -32700 Parse Error |
The body isn’t valid JSON | Send one JSON-RPC message as JSON. |
| 400 | JSON-RPC error -32600 Batches Aren't Supported |
The body is a JSON array | Send one message per request. |
| 405 | A GET request |
Use POST. There’s no standing event stream. |
The 401 response includes WWW-Authenticate: Bearer resource_metadata="…", scope="read write", which is how MCP apps find the sign-in page. See Authentication.
JSON-RPC Errors
| Code | Message | Cause |
|---|---|---|
-32602 |
Unknown Tool: <name> |
No tool has that name. Call tools/list for the current list. |
-32602 |
arguments Must Be An Object |
arguments was sent as something other than an object |
-32601 |
Method Not Found: <method> |
The server supports initialize, ping, tools/list and tools/call |
-32600 |
Invalid Request |
The message isn’t valid JSON-RPC 2.0 |
Local Server Errors
The local server calls Maple Budget’s API with your API key. When the API answers with an error, the tool fails with the HTTP status and the address it called, for example:
Error executing tool add_transaction: 400 Client Error: Bad Request for url: https://api.maplebudget.com/api/transactions/add/
The API’s own message isn’t included, so check the arguments against the table above. A 401 Client Error: Unauthorized means the key in MAPLE_BUDGET_API_KEY is missing, mistyped or revoked: create a new one in AI Apps.
