Errors and limits
HTTP status codes, JSON-RPC errors, tool error results and how to fix them.
A request can fail at three levels. Check them in this order.
| Level | How you see it | Typical cause |
|---|---|---|
| HTTP | A status other than 200 or 202 | Missing or revoked token, a GET instead of a POST, a body that is not JSON |
| JSON-RPC | An error object instead of result | Input that does not validate, an unknown tool, method or chart id |
| Tool | result.isError is true | The tool ran but could not finish: no plan or licence, no open deck, an unknown chart in update_chart |
HTTP status codes
| Status | Meaning |
|---|---|
200 | The body holds the JSON-RPC response, which may itself be an error. |
202 | The request held only notifications, which get no reply. |
400 | The body is not valid JSON. The reply is JSON-RPC error -32700. |
401 | No token, or a token the server does not accept: unknown, revoked, expired or malformed. See authentication. |
405 | A method other than POST with a valid token. The server opens no event stream, so a GET gets JSON-RPC error -32000. |
5xx | A server or network problem. Retry with backoff. |
https://getchartkit.app/mcp answers with a redirect to https://www.getchartkit.app/mcp. Clients do not follow redirects for a POST, so the call fails. Use the www URL.
JSON-RPC errors
The HTTP status is 200 and the reply has an error with a code and a message. The message names the problem, often with the expected shape, so log it in full.
| Code | Message | When |
|---|---|---|
-32700 | Parse error | The request body is not JSON. |
-32000 | Method not allowed. | The HTTP method is not POST. |
-32601 | Method not found: … | The JSON-RPC method is not one the server answers. |
-32602 | Unknown tool, Unknown chart id, chart_id must be a non-empty string, … | An unknown tool name; a missing or unknown chart_id in get_chart_svg or get_live_chart_embed; update_chart with nothing to change; get_live_chart_embed with both or neither of chart_id and chart data; an invalid slide_number or mode. |
-32603 | The validation message, or Failed to save chart (status …) | The chart input for create_chart, visualize_data or get_live_chart_embed did not validate, or storing the chart failed. A failed save is safe to retry. |
-32002 | Resource not found: … | resources/read with an unknown uri. |
With the MCP Python SDK, these raise mcp.MCPError, with the code in error.code and the text in error.message.
Tool error results
The call reached the tool, and the tool returned a normal result with isError: true. The reason is in content[0].text, and deck tools also put a short message in structuredContent.
Plan and licence
| Signed in with | Result text | Fix |
|---|---|---|
| OAuth | ChartKit in Claude and ChatGPT is part of Pro. Start a free Pro trial at https://www.getchartkit.app/dashboard | Upgrade the account, start a trial, or join a team. |
| Team API key | Says the team's licence is not active. | Renew the Enterprise licence. The key works again without changes. |
These checks run on every tool call. initialize and tools/list work without a plan.
By tool
| Tool | Returns isError when |
|---|---|
update_chart | The chart id is unknown, the new input does not validate, or the change would turn a chart into or out of gantt or custom. |
insert_chart_into_slides | The chart id is unknown, no deck is open, deck matches no open deck, the deck did not answer, or the extension could not insert. |
list_charts_in_deck | The deck did not answer, or the extension could not list its charts. |
save_chart_model | The chart id is unknown, the chart belongs to another user, or the save failed. |
With a team API key, insert_chart_into_slides, list_open_decks and list_charts_in_deck are not available. Insert charts with the Google Slides API instead.
Limits
| Limit | Value |
|---|---|
| Stored chart model | 512 KB of JSON |
| Active API keys per team | 20 |
| Charts listed by list_charts_in_deck | 60 |
text_scale in get_chart_svg | 1 to 2 |
| Axis breaks per chart | 1 |
imageUrl and svgUrl | Valid for the chart's current version. After update_chart they return 404; use the new URLs. |
Retries
- Retry HTTP 5xx, timeouts and connection errors with exponential backoff.
- Do not retry 401, 400, or a JSON-RPC error other than a failed save. The same request fails the same way.
- Each successful
create_chartcall stores a new chart with a new id. If a retry might repeat a call that already succeeded, the extra chart is harmless but unused.update_chartwith the same input gives the same chart.
Troubleshooting
Check that the header reads Authorization: Bearer ck_team_… with one space and no quotes or trailing newline, that the key has not been revoked on the team page, and that the URL is https://www.getchartkit.app/mcp.
The URL is missing www., or the client sent a GET. The endpoint only answers POST requests with JSON-RPC bodies.
That message is a validation error. It names the field and shows the expected shape. The most common cause is a values row whose length differs from categories, or one row of values per category instead of per series.
The chart was updated after you got the URL, so that version no longer exists. Use the imageUrl from the latest response.
With an API key, charts use the palette saved on the team page. Ask a team admin to set it there. With OAuth, the person's team palette or their own saved palette applies.