CleanChart MCP
An official MCP server that allows AI assistants to upload messy tabular data, automatically clean it, and render publication-ready PNG charts directly within the conversation interface.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://www.cleanchart.app/api/mcpWhat you can do with it
- List available chart types and default configurations
- Detect and fix data issues like missing values or mixed date formats
- Generate and render publication-ready PNG charts in chat
- Manage entitlements and purchase single-chart passes
Source and maintenance
Protocol and capabilities
- Server
- cleanchart 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 8 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
},
"resources": {
"listChanged": false
}
}Tools
8 advertised
list_chart_types — 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}validate_chart_config — Validate chart 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.
{
"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"
}
}
}detect_data_issues — Detect data issues
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.
{
"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)."
}
}
}apply_data_fixes — Apply data fixes
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[]).
{
"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": {}
}
}
}generate_chart — Generate chart
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.
{
"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."
}
}
}get_entitlements — 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}create_checkout — Create checkout
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.
{
"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"
}
}
}claim_chart — Claim purchased chart
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.
{
"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}$"
}
}
}Prompts
Not advertised
Resources
1 advertised
CleanChart chart view
ui://cleanchart/chart-view.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 915 ms
- 95th percentile latency
- 915 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 915 ms · metadata changed · 8 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http cleanchart-mcp https://www.cleanchart.app/api/mcpCodex
codex mcp add cleanchart-mcp --url https://www.cleanchart.app/api/mcpCursor
{
"mcpServers": {
"cleanchart-mcp": {
"url": "https://www.cleanchart.app/api/mcp"
}
}
}Cline
{
"mcpServers": {
"cleanchart-mcp": {
"type": "streamableHttp",
"url": "https://www.cleanchart.app/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"cleanchart-mcp": {
"type": "http",
"url": "https://www.cleanchart.app/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http cleanchart-mcp https://www.cleanchart.app/api/mcpClaude Desktop
{
"mcpServers": {
"cleanchart-mcp": {
"url": "https://www.cleanchart.app/api/mcp"
}
}
}Windsurf
{
"mcpServers": {
"cleanchart-mcp": {
"serverUrl": "https://www.cleanchart.app/api/mcp"
}
}
}Let your agent find its tools
Find servers like CleanChart MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run CleanChart MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.