Koskamo

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.

CleanChart MCP logo, by CleanChartVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by CleanChart
You need:Free tier requires no account (watermarked output)Watermark-free rendering: with an API key (dashboard) on a subscription/day pass
MCP endpoint (Streamable HTTP)
https://www.cleanchart.app/api/mcp
Vendor documentation

What 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

Vendor evidenceRegistry 1.0.0

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
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Tools

8 advertised

list_chart_types — List chart types
Advertised by the server during the last successful anonymous check.

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.

list_chart_types input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
validate_chart_config — Validate chart config
Advertised by the server during the last successful anonymous check.

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.

validate_chart_config input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

detect_data_issues input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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[]).

apply_data_fixes input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

generate_chart input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

get_entitlements input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
create_checkout — Create checkout
Advertised by the server during the last successful anonymous check.

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.

create_checkout input schema
{
  "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
Advertised by the server during the last successful anonymous check.

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.

claim_chart input schema
{
  "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

No prompt definitions available.

Resources

1 advertised

CleanChart chart view

Advertised by the server during the last successful anonymous check.

CleanChart chart view URI
ui://cleanchart/chart-view.html

MIME type: text/html;profile=mcp-app

30-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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http cleanchart-mcp https://www.cleanchart.app/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add cleanchart-mcp --url https://www.cleanchart.app/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable cleanchart-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "cleanchart-mcp": {
      "url": "https://www.cleanchart.app/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "cleanchart-mcp": {
      "type": "streamableHttp",
      "url": "https://www.cleanchart.app/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start cleanchart-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "cleanchart-mcp": {
      "type": "http",
      "url": "https://www.cleanchart.app/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http cleanchart-mcp https://www.cleanchart.app/api/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "cleanchart-mcp": {
      "url": "https://www.cleanchart.app/api/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing