Skip to main content
Glama
README.md
<p align="center"><img src="logo.png" width="96" alt="ChartAnt logo"></p>

<h1 align="center">ChartAnt MCP server</h1>

<p align="center">Charts, diagrams and maps of every country as image links, for Claude, Cursor, VS Code and any MCP client.<br>
Remote server · no install · no API key · EU-hosted</p>

<p align="center"><code>https://chartant.net/mcp</code></p>

---

Ask your assistant for a chart and get back a hosted PNG link that works anywhere: chat, email, Slack, docs, slides. Every result also includes a share page, alt text, and editable PowerPoint and Excel versions.

- **45+ chart types:** line, column, bar, pie, area, scatter, sankey, funnel, waterfall, heatmap, Gantt, candlestick, treemap, radar, box plot and more
- **Maps of every country:** world maps, the states, provinces or regions of any country, US counties, pin maps. Place names work in any language and as ISO codes; typos get "did you mean" hints
- **KPI cards, dashboards and reports:** several charts in one image, or a report page with PDF and PowerPoint downloads
- **Charts that stay updated:** save a chart at a fixed link, update its data later from chat, and have it posted to Slack, Teams, Discord or email whenever it changes (needs a free account)

| World map | Country map |
|---|---|
| ![World map of active users by country](examples/world-map.png) | ![Map of Germany: stores per state](examples/country-map.png) |
| **KPI cards** | **Line chart** |
| ![Three KPI cards with sparklines](examples/kpi.png) | ![Line chart of monthly revenue, two years](examples/line.png) |

## Connect

There are three endpoints. Pick one:

| URL | What you get |
|---|---|
| `https://chartant.net/mcp` | All tools, no sign-in. Images are temporary. |
| `https://chartant.net/mcp?tools=core` | The same features as 10 tools, including one generic `generate_chart`, for clients with a tool limit. |
| `https://chartant.net/mcp/account` | Sign in (OAuth) to a free account: charts are kept and can be updated, sent and scheduled. |

### Claude (claude.ai, Desktop, mobile)

Settings → Connectors → **Add custom connector** → paste `https://chartant.net/mcp`.

### Claude Code

```bash
claude mcp add --transport http chartant https://chartant.net/mcp
```

### Cursor

`~/.cursor/mcp.json`:

```json
{ "mcpServers": { "chartant": { "url": "https://chartant.net/mcp" } } }
```

### VS Code

`.vscode/mcp.json`:

```json
{ "servers": { "chartant": { "type": "http", "url": "https://chartant.net/mcp" } } }
```

### Windsurf

`~/.codeium/windsurf/mcp_config.json`:

```json
{ "mcpServers": { "chartant": { "serverUrl": "https://chartant.net/mcp" } } }
```

### Clients that only run local (stdio) servers

```json
{ "mcpServers": { "chartant": { "command": "npx", "args": ["-y", "mcp-remote", "https://chartant.net/mcp"] } } }
```

## Try it

> Draw a world map of our users by country: US 4200, India 2600, Germany 2100, UK 1800, France 1500.

> Make KPI cards for this week: revenue €48,200 (+12.4%), sign-ups 1,284 (+8.1%), churn 2.1% (−0.4, lower is better).

> Save this as a chart that stays updated and send it to our #metrics Slack channel every Monday at 8:00.

## Tools

Every tool declares MCP annotations: the drawing tools are read-only, and the tools that save or send say so.

| Tool | What it does |
|---|---|
| `generate_world_map` | Draw a world map colouring countries by a number (sales, population, users, visitors by country). |
| `generate_country_map` | Draw a map of one country with its first-level regions (states, provinces, prefectures, counties, departments) coloured by a number. |
| `generate_county_map` | Draw a map of US counties coloured by a number: all of the US, or the counties of one state. |
| `generate_kpi_card` | Draw 1 to 4 KPI cards as one image: each a big number with its label, optional change since the last period (green when good, red when bad) and an optional sparkline of recent values. |
| `generate_pin_map` | Draw a map with labelled dots at given latitude/longitude anywhere in the world (offices, stores, customers, events). |
| `create_report` | Put several charts, maps or KPI cards and some text into one report. |
| `generate_dashboard` | Combine KPI cards, charts, maps and short notes into ONE image, in rows (1-4 rows, 1-4 panels per row, at most 8 panels). |
| `generate_map_ranking` | Draw a map (regions of one country, or countries of the world) next to a bar chart of the top places, in matching colours, as one image. |
| `generate_small_multiples` | Draw the same small chart once per group (country, product, team) in a grid, all on one shared scale, so the groups can be compared at a glance. |
| `match_places` | Turn messy place names into standard names and codes: countries (ISO 3166 codes), the states/provinces/regions of one country (ISO 3166-2 codes) or US counties (FIPS codes). |
| `locate_points` | For each latitude/longitude, find the country, its state/province/region (ISO 3166-2) and, in the US, the county (FIPS). |
| `generate_area_chart` | Draw an area chart: a line chart with the area below filled, for totals or volumes over time (traffic, revenue). |
| `generate_bar_chart` | Draw a horizontal bar chart to compare categories, best for long category names or rankings (top 10). |
| `generate_boxplot_chart` | Draw a box plot: median, quartiles and outliers of the values in each category, to compare distributions. |
| `generate_column_chart` | Draw a vertical column chart to compare values across categories or periods (sales by quarter, users by plan). |
| `generate_dual_axes_chart` | Draw a combined column and line chart with two y-axes, for two measures with different units over the same categories (revenue in € as columns, margin in % as a line). |
| `generate_fishbone_diagram` | Draw a fishbone (Ishikawa, cause-and-effect) diagram: the problem as the head, groups of causes as the bones. |
| `generate_flow_diagram` | Draw a flowchart of a process: steps and decisions joined by arrows. |
| `generate_funnel_chart` | Draw a funnel chart of how many remain at each stage of a process (visitors → sign-ups → purchases), widest first. |
| `generate_histogram_chart` | Draw a histogram of how raw numbers are distributed (response times, ages, order sizes). |
| `generate_line_chart` | Draw a line chart of values over time (daily users, monthly revenue, prices). |
| `generate_liquid_chart` | Draw a liquid-fill gauge showing one percentage as a filled shape (goal progress, capacity used). |
| `generate_mind_map` | Draw a mind map: a central topic with branches of subtopics. |
| `generate_network_graph` | Draw a network graph of entities (nodes) and their relationships (edges): people, systems, dependencies. |
| `generate_organization_chart` | Draw an organization chart of who reports to whom. |
| `generate_pie_chart` | Draw a pie chart (or a donut with innerRadius, e.g. 0.6) of the parts of one whole: market share, budget split. |
| `generate_radar_chart` | Draw a radar (spider) chart comparing items on four or more measures (products scored on price, quality, support…). |
| `generate_sankey_chart` | Draw a Sankey diagram of flows between stages, with link widths proportional to amounts (budget allocation, user journeys, energy flows). |
| `generate_scatter_chart` | Draw a scatter plot of two numeric measures per item to show correlation or clusters (price vs rating). |
| `generate_treemap_chart` | Draw a treemap: nested rectangles sized by value, for parts of a whole with a hierarchy (disk usage, spend by department and team). |
| `generate_venn_chart` | Draw a Venn diagram of how sets overlap (customers of product A, B, both). |
| `generate_violin_chart` | Draw a violin plot: the shape of the distribution of values in each category. |
| `generate_waterfall_chart` | Draw a waterfall chart of how a starting value becomes a final value through gains and losses (profit bridge, budget variance). |
| `generate_word_cloud_chart` | Draw a word cloud with words sized by frequency or weight (feedback themes, keywords). |
| `generate_spreadsheet` | Draw a table as an image, or a pivot table when rows/values are given (cross-tabulation, sums by category). |
| `generate_gantt_chart` | Draw a Gantt chart (a project timeline): one bar per task from its start to its end date, optionally coloured by group or phase. |
| `generate_gauge_chart` | Draw a gauge (speedometer dial) for one value between a minimum and a maximum, e.g. a score of 72 out of 100. |
| `generate_heatmap_chart` | Draw a heatmap: a grid of cells coloured by value, with x and y categories (e.g. weekday × hour, product × region). |
| `generate_calendar_heatmap` | Draw a calendar heatmap (GitHub-style contribution grid): one cell per day coloured by value. |
| `generate_candlestick_chart` | Draw a candlestick (OHLC) chart of prices: open, high, low and close for each period. |
| `generate_bullet_chart` | Draw a bullet chart: each measure as a bar against its target marker, e.g. KPIs versus goals. |
| `generate_more_charts` | Draw one of these chart types and get an image link. |
| `create_living_chart` | Save a chart, map, dashboard or report with a fixed link that always shows its latest data. |
| `update_living_chart` | Replace the data (or the whole chart) of a chart made with create_living_chart. |
| `list_my_charts` | List the user's charts that stay updated (id, name, fixed link) and their destinations (id, type, name for Slack, Teams, Discord, email, webhook). |
| `add_destination` | Save a destination that charts can be sent to: 'slack', 'teams' or 'discord' (needs the channel's incoming webhook URL, which the user creates in that app), 'email' (the user's own confirmed address,  |
| `send_chart_on_update` | Post a living chart to a destination every time its data changes (through update_living_chart or the API), and by default once right now. |
| `manage_workspace` | Team and sharing settings of the connected workspace. |
| `list_chart_versions` | List the saved earlier versions of a living chart, newest first, as JSON (version number, date, image or page link). |
| `restore_chart_version` | Make an earlier version of a living chart the current one again (the version in between stays in the history, so this can be undone). |
| `schedule_chart` | Post a living chart to a destination at a fixed time, daily or weekly (e.g. every Monday at 08:00 UTC), with its latest data. |

## Privacy and limits

- Hosted in the EU. The chart data you send is used to draw the image. Images made without an account are deleted after a short time.
- Free to use, including commercially, within the free limits. Plans: <https://chartant.net/plans>. Privacy: <https://chartant.net/privacy>.
- The same renderer is available as a REST API: <https://chartant.net/docs>.

## Support

Open an [issue](https://github.com/simplepagesbg-web/chartant-mcp/issues) for bugs, wrong map regions or missing place names, or for a chart type you need.

## About this repository

This repository holds the public listing, configuration and examples for the hosted ChartAnt MCP server. The server itself runs at chartant.net, so there is nothing to install or build. Chart tool schemas are compatible with [AntV mcp-server-chart](https://github.com/antvis/mcp-server-chart) (MIT). ChartAnt is not affiliated with AntV. Map boundaries come from Natural Earth.