CleanChart
Clean messy tabular data and render publication-ready PNG charts from your AI assistant.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"cleanchart": {
"url": "https://www.cleanchart.app/api/mcp"
}
}
}Remote endpoints
https://www.cleanchart.app/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (8)
🟢list_chart_types
List all chart types CleanChart can render, each with its default config object. Use a default config as the starting point, override what you need (title, xColumn, yColumn, colors, ...), then call validate_chart_config before generate_chart.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢validate_chart_config(chartType, config)
Dry-run validation of a chart config for a given chart type. Returns valid:true or a list of human-readable problems to fix. Always call this before generate_chart — it is free and instant, while a failed render costs a rate-limited attempt.
Input Schema
{
"type": "object",
"properties": {
"chartType": {
"description": "Chart type id from list_chart_types",
"type": "string"
},
"config": {
"description": "Chart config object (start from the type's defaultConfig)",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"chartType",
"config"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢detect_data_issues(data)
Analyze tabular data for quality issues before charting: duplicates, missing values, whitespace, invalid tokens (N/A, -, ?), type mismatches, outliers, inconsistent date formats, and per-column inferred types. Returns a report whose findings map directly to apply_data_fixes options.
Input Schema
{
"type": "object",
"properties": {
"data": {
"description": "Tabular data as an array of row objects, e.g. [{\"Month\":\"2026-01\",\"Sales\":120}, ...]. All rows should share the same keys (column names).",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
},
"required": [
"data"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴apply_data_fixes(data, fixOptions)
Clean tabular data with CleanChart's fix engine and get the cleaned rows back plus a change log. Options (all optional booleans unless noted): remove_duplicates, remove_empty_rows, remove_empty_columns, trim_whitespace, replace_invalid_values (turn N/A/-/? into null), nullify_missing, convert_types, missing_strategy ('fill_smart' fills gaps with column mean or 'Unknown'), date_standardization with date_columns (string[], converts recognized date formats to YYYY-MM-DD), strip_numeric_formatting with format_columns (string[]), strip_coded_values with coded_columns (string[]).
Input Schema
{
"type": "object",
"properties": {
"data": {
"description": "Tabular data as an array of row objects, e.g. [{\"Month\":\"2026-01\",\"Sales\":120}, ...]. All rows should share the same keys (column names).",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"fixOptions": {
"description": "Fix options object, e.g. {\"remove_duplicates\":true,\"date_standardization\":true,\"date_columns\":[\"Date\"]}",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"data",
"fixOptions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡generate_chart(data, chartType, config, returnUrl)
Render a publication-ready chart from tabular data and return it as a PNG image. By default the image is only delivered inline and never stored — in chat UIs the user can save it straight from the conversation. If the user needs a downloadable file (e.g. your client cannot save inline images), pass returnUrl:true: the response then also includes chartUrl, a direct link to the PNG valid for 24 hours — surface it to the user. Without an API key the free tier applies: watermark and reduced resolution — mention the upgrade info from the response to the user if they want a clean export (create_checkout provides a payment link). With a CleanChart API key (Authorization: Bearer cc_...) and an active subscription or 24h day pass, output is clean and full resolution. Call validate_chart_config first; large datasets are sampled automatically.
Input Schema
{
"type": "object",
"properties": {
"data": {
"description": "Tabular data as an array of row objects, e.g. [{\"Month\":\"2026-01\",\"Sales\":120}, ...]. All rows should share the same keys (column names).",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"chartType": {
"description": "Chart type id from list_chart_types",
"type": "string"
},
"config": {
"description": "Validated chart config",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"returnUrl": {
"description": "Set true to also get chartUrl, a 24h download link to the PNG. This stores a copy of the rendered chart on CleanChart's servers for 24 hours — leave unset for the default privacy-preserving inline-only delivery.",
"type": "boolean"
}
},
"required": [
"data",
"chartType",
"config"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_entitlements
Show the caller's current CleanChart tier. Anonymous callers are free tier (watermarked, reduced resolution). With an API key (Authorization: Bearer cc_..., created in the CleanChart dashboard) this reflects the account's subscription or 24h day pass.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡create_checkout(kind, data, chartType, config)
Create a payment link the USER must open in their browser — never call this without the user explicitly asking to purchase. kind 'single_chart' (pass the exact data, chartType, and config to be rendered; after payment call claim_chart to receive the clean chart), 'day_pass' (24h unlimited clean exports), or 'subscription' (monthly unlimited). day_pass and subscription are account-based: after payment CleanChart emails a sign-in link, and an API key from the dashboard unlocks clean renders over MCP.
Input Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"single_chart",
"day_pass",
"subscription"
]
},
"data": {
"description": "single_chart only: the rows to render after payment",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"chartType": {
"description": "single_chart only",
"type": "string"
},
"config": {
"description": "single_chart only: validated chart config",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"kind"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡claim_chart(purchaseId, checkoutId, returnUrl)
Redeem a paid single-chart purchase (from create_checkout with kind 'single_chart') and receive the clean, full-resolution PNG. Call this after the user confirms payment. Returns payment_pending while the checkout is unpaid — wait for the user, do not poll in a loop. By default the image is only delivered inline and never stored; pass returnUrl:true if the user needs a downloadable file — the response then also includes chartUrl, a direct link to the PNG valid for 24 hours — surface it to the user.
Input Schema
{
"type": "object",
"properties": {
"purchaseId": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{10,64}$"
},
"checkoutId": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{8,64}$"
},
"returnUrl": {
"description": "Set true to also get chartUrl, a 24h download link to the purchased PNG. This stores a copy on CleanChart's servers for 24 hours — leave unset for inline-only delivery.",
"type": "boolean"
}
},
"required": [
"purchaseId",
"checkoutId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence