Clean messy tabular data and render publication-ready PNG charts from your AI assistant.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. "Bearer cc_..." API key from https://www.cleanchart.app/dashboard. Watermark-free output needs an active 24h pass or subscription. Omit for the free tier.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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[]).
Tabular data as an array of row objects, e.g. [{"Month":"2026-01","Sales":120}, ...]. All rows should share the same keys (column names).
Fix options object, e.g. {"remove_duplicates":true,"date_standardization":true,"date_columns":["Date"]}
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
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[]).
| Argument | Type | Description |
|---|---|---|
| data* | array | Tabular data as an array of row objects, e.g. [{"Month":"2026-01","Sales":120}, ...]. All rows should share the same keys (column names). |
| fixOptions* | object | Fix options object, e.g. {"remove_duplicates":true,"date_standardization":true,"date_columns":["Date"]} |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"data",
"fixOptions"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"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)."
},
"fixOptions": {
"type": "object",
"description": "Fix options object, e.g. {\"remove_duplicates\":true,\"date_standardization\":true,\"date_columns\":[\"Date\"]}",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| returnUrl | boolean | 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. |
| checkoutId* | string | |
| purchaseId* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"purchaseId",
"checkoutId"
],
"properties": {
"returnUrl": {
"type": "boolean",
"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."
},
"checkoutId": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{8,64}$"
},
"purchaseId": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{10,64}$"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| data | array | single_chart only: the rows to render after payment |
| kind* | string | |
| config | object | single_chart only: validated chart config |
| chartType | string | single_chart only |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"kind"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"description": "single_chart only: the rows to render after payment"
},
"kind": {
"enum": [
"single_chart",
"day_pass",
"subscription"
],
"type": "string"
},
"config": {
"type": "object",
"description": "single_chart only: validated chart config",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"chartType": {
"type": "string",
"description": "single_chart only"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| data* | array | 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": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"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)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| data* | array | Tabular data as an array of row objects, e.g. [{"Month":"2026-01","Sales":120}, ...]. All rows should share the same keys (column names). |
| config* | object | Validated chart config |
| chartType* | string | Chart type id from list_chart_types |
| returnUrl | boolean | 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": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"data",
"chartType",
"config"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"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)."
},
"config": {
"type": "object",
"description": "Validated chart config",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"chartType": {
"type": "string",
"description": "Chart type id from list_chart_types"
},
"returnUrl": {
"type": "boolean",
"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."
}
}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| config* | object | Chart config object (start from the type's defaultConfig) |
| chartType* | string | Chart type id from list_chart_types |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chartType",
"config"
],
"properties": {
"config": {
"type": "object",
"description": "Chart config object (start from the type's defaultConfig)",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"chartType": {
"type": "string",
"description": "Chart type id from list_chart_types"
}
}
}