MCP server
Connect ChatGPT, Claude, Cursor, VS Code, and other AI agents to the Szum chart design system.
The Szum MCP server gives AI agents the shared chart grammar, curated themes, current examples, validation, and rendering tools they need to produce considered charts reliably.
Quick start
Connect your MCP client to:
https://szum.io/mcpAfter connecting, ask for a chart in ordinary language:
Show quarterly revenue by region as an editorial bar chart. Cite the source and save the finished chart.
The agent can discover the available marks and themes, build and validate the definition, render an interactive temporary preview in compatible clients, or save permanent image and embed links.
Connect from ChatGPT Desktop
- Open ChatGPT Settings, then Plugins.
- Select MCP and choose Add server.
- Set the server name and change its type to Streamable HTTP.
- Paste
https://szum.io/mcpand click Save. - Click Authorize and sign in to Szum.
These steps use the ChatGPT Desktop plugin flow. Plugin availability can depend on your ChatGPT plan, workspace permissions, and rollout.
Connect from Claude
Open Charts by Szum in Claude's Connectors Directory and choose Connect.
Claude may ask you to authorize Szum when you use tools that access your saved charts. Anonymous previews work without a Szum account.
Connect from Claude Code
- Choose a server name, replace
SERVER_NAMEin the command below, and run it in your terminal. - Open Claude Code and enter
/mcp. - Select the server you added and complete the browser authentication flow.
claude mcp add --transport http SERVER_NAME https://szum.io/mcpConnect from Cursor
- Open your global
~/.cursor/mcp.json, or a project's.cursor/mcp.json. - Replace
SERVER_NAMEwith your chosen server name, add the configuration below, and save the file. - Reload Cursor if needed, then complete authentication when Cursor requests it.
{
"mcpServers": {
"SERVER_NAME": {
"type": "http",
"url": "https://szum.io/mcp"
}
}
}Connect from VS Code
- Open the Command Palette and run MCP: Add Server.
- Choose HTTP, paste the endpoint, and set the server name.
- Choose whether to install it globally or in the current workspace.
- Start the server, confirm that you trust it, and complete authorization when prompted.
{
"servers": {
"SERVER_NAME": {
"type": "http",
"url": "https://szum.io/mcp"
}
}
}Work with charts
| Need | Tool | Result |
|---|---|---|
| Preview a chart | render_chart | Interactive in compatible clients, with 1 hour image URLs |
| Keep and share a chart | save_chart | Permanent image, embed, editor, and Studio URLs |
| Find saved charts | list_charts | Paginated chart metadata and URLs from your library |
| Open a saved chart | get_chart | Metadata, URLs, and inline display when published |
| Read its definition | get_chart_config | Complete published chart config for inspection or reuse |
| Replace a saved chart | update_chart | Published replacement with the same id and URLs |
| Rename a saved chart | rename_chart | Updated library title without changing the config or public URLs |
| Delete a saved chart | delete_chart | Permanent, retry-safe deletion |
| Check a definition only | validate_chart | Validation result without creating an image |
save_chart, list_charts, get_chart, get_chart_config, update_chart, rename_chart, and delete_chart require OAuth or an API key. get_chart accepts an id returned by list_charts; it does not expose the config in its model-visible result. For published charts, the server may load that config privately so clients with MCP Apps can display the chart inline. get_chart_config returns the same complete published config as the SDK's charts.getConfig(id). It does not substitute a newer editor draft, and a draft-only chart has no published config. update_chart validates and republishes a replacement config while keeping the chart id and public URLs stable. It refuses the update when unpublished editor changes exist, so it cannot silently discard a newer draft. rename_chart changes only the library title; it does not alter the rendered title inside the config. delete_chart permanently removes one chart and is retry-safe when that chart is already gone. Draft-only and unpublished charts remain available through get_chart as metadata but have no public chart to display.
save_chart returns the saved chart id. For an agent-initiated save, send one stable idempotencyKey for the intended chart and reuse it on retries; the same key and config return the same chart, while the same key with a different config returns a conflict. Saved MCP charts appear in Studio, where you can preview, edit, rename, share, or delete them. Their image and embed URLs follow the same behavior as other saved charts.
In clients that support MCP Apps, a transient preview includes PNG, SVG, and Save permanently actions. The format actions use /r/{id}.png and /r/{id}.svg URLs that remain available for 1 hour; each produced image may be cached for 1 hour. Saving reuses the exact previewed config and may ask you to connect your Szum account. In other clients, ask the agent to save the chart once you are happy with it.
Validate each generated or changed config once before its next render, save, or update. Validation applies to that exact config, so it should not be repeated while the config remains unchanged. render_chart, save_chart, and update_chart also return the complete validation result alongside success. If one returns status: "review_required", show the warnings to the user and continue with acknowledgeWarnings: true only after they approve that exact config; no render is charged and no chart is written before approval. A successful render preflights that exact config for a later save or update.
validate_chart returns each issue separately with a path array and message so clients can identify the exact field without parsing the text fallback. Fixability is independent from severity: a blocking error or non-blocking suggestion may include suggestedConfig. That field is the complete verified next definition, not an internal patch. Replace the current config with it and call validate_chart again before rendering, saving, or updating. The replacement may retain unrelated errors, and nothing is applied automatically.
Tool failures use a stable JSON text envelope with status and an error containing code, message, and retryable. Error results omit structuredContent so they cannot violate each tool's advertised success schema; validation failures and warning review responses include the full validation object in that JSON.
See Validation and Review for error, warning, and suggestion semantics across every Szum workflow.
Tools and resources
| Tool | Description |
|---|---|
render_chart | Validate and render a transient chart preview |
save_chart | Save a permanent, editable chart and return all output URLs |
list_charts | Find saved charts by source, title, or recency |
get_chart | Retrieve and display one saved chart by id |
get_chart_config | Retrieve one saved chart's complete published config |
update_chart | Replace and publish a saved config while keeping its URLs |
rename_chart | Change a saved chart's library title |
delete_chart | Permanently delete one saved chart |
validate_chart | Check structural and semantic chart validity |
list_themes | List themes and their intended uses |
list_marks | List mark types, properties, and defaults |
get_examples | Return ready-to-use chart definitions |
| Resource | Description |
|---|---|
szum://schema | Full JSON Schema for chart definitions |
szum://llms-txt | API and chart-authoring reference |
Authentication
No credentials are needed to connect, inspect the design system, validate definitions, or render interactive previews in compatible clients. OAuth-capable clients can authorize access through your Szum account when saving, listing, opening, reading, updating, renaming, or deleting charts from your library.
If a client does not support OAuth, create an API key and send it as a Bearer token:
{
"mcpServers": {
"SERVER_NAME": {
"type": "http",
"url": "https://szum.io/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}See Authentication for the complete model.
Usage and billing
An OAuth or API-key render_chart preview counts against the signed-in user’s plan limit. Each image subsequently produced from its temporary URL is another render against that account. Anonymous interactive previews are complimentary; their temporary image URLs use a separate IP-based allowance of 250 images per month, only when the URL is fetched and the image is produced.