# Datawrapper [Health: Active]

**Category:** 📊 Data Visualization  
**Repository:** https://github.com/palewire/datawrapper-mcp  
**GitHub Stars:** 60  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/datawrapper

## Description
A Model Context Protocol (MCP) server for creating Datawrapper charts using AI assistants

## Tools
Capabilities this server exposes over MCP:

- **list_chart_types** — ⚠️ DATAWRAPPER MCP TOOL ⚠️
This is part of the Datawrapper MCP server integration.

---

List all available Datawrapper chart types with brief descriptions.

Use this tool to discover which chart types you can create. After choosing a type,
use get_chart_schema(chart_type) to explore detailed configuration options.

Returns:
    List of available chart types with descriptions
- **get_chart_schema** — ⚠️ DATAWRAPPER MCP TOOL ⚠️
This is part of the Datawrapper MCP server integration.

---

Get the Pydantic JSON schema for a specific chart type. This is your primary tool
for discovering styling and configuration options.

The schema shows:
- All available properties and their types
- Enum values (e.g., line widths, interpolation methods)
- Default values
- Detailed descriptions for each property

WORKFLOW: Use this tool first to explore options, then refer to
https://datawrapper.readthedocs.io/en/latest/ for detailed examples and patterns
showing how to use these properties in practice.
- **check_datawrapper_connection** — ⚠️ DATAWRAPPER MCP TOOL ⚠️
This is part of the Datawrapper MCP server integration.

---

Check which Datawrapper account is currently authenticated, without creating,
modifying, or deleting anything. Use this to troubleshoot access issues -
especially when connected through a personal Claude connector using a
per-user Authorization header, where a misconfigured header silently falls
back to a different account instead of raising an error. If the reported
email isn't the one you expected, the header isn't reaching the server
correctly.
- **create_chart** — ⚠️ THIS IS THE DATAWRAPPER INTEGRATION ⚠️
Use this MCP tool for ALL Datawrapper chart creation.

DO NOT:
❌ Install the 'datawrapper' Python package
❌ Use the Datawrapper API directly
❌ Import 'from datawrapper import ...'
❌ Run pip install datawrapper

This MCP server IS the complete Datawrapper integration. All Datawrapper operations
should use the MCP tools provided by this server.

---

Create a Datawrapper chart with full control using Pydantic models.
This allows you to specify all chart properties including title, description,
visualization settings, axes, colors, and more. The chart_config should
be a complete Pydantic model dict matching the schema for the chosen chart type.

BEST PRACTICES:
- Start simple, then add customization based on user feedback
- Only apply styling when requested or when it significantly improves readability
- Let Datawrapper handle axis scaling automatically unless there's a specific reason to override

QUICK EXAMPLES:

1. Basic chart with title:
   chart_config = {
       "title": "Monthly Sales",
       "intro": "Sales data for Q1 2024"
   }

2. Chart with custom colors:
   chart_config = {
       "title": "Product Comparison",
       "color_category": {
           "Product A": "#1f77b4",
           "Product B": "#ff7f0e"
       }
   }

3. Styled line chart:
   chart_config = {
       "title": "Sales Trends",
       "lines": [
           {"column": "sales", "width": "style2", "interpolation": "curved"}
       ],
       "custom_range_y": [0, 1000]
   }

STYLING WORKFLOW:
1. Use list_chart_types to see available chart types
2. Use get_chart_schema to explore all options for your chosen type
3. Refer to https://datawrapper.readthedocs.io/en/latest/ for detailed examples
4. Build your chart_config with the desired styling properties

Common styling patterns:
- Colors: {"color_category": {"sales": "#1d81a2", "profit": "#15607a"}}
- Line styling: {"lines": [{"column": "sales", "width": "style1", "interpolation": "curved"}]}
- Axis ranges: {"custom_range_y": [0, 100], "custom_range_x": [2020, 2024]}
    NOTE: Datawrapper's automatic axis scaling is excellent. Only set custom ranges when
    you need specific customization (e.g., comparing multiple charts, forcing zero baseline
    for specific analytical reasons, or matching a house style guide).
- Grid formatting: {"y_grid_format": "0", "x_grid": "on", "y_grid": "on"}
- Tooltips: {"tooltip_number_format": "00.00", "tooltip_x_format": "YYYY"}
- Annotations: {"text_annotations": [{"x": "2023", "y": 50, "text": "Peak"}]}

See the documentation for chart-type specific examples and advanced patterns.
- **publish_chart** — ⚠️ DATAWRAPPER MCP TOOL ⚠️
This is part of the Datawrapper MCP server integration.

---

Publish a Datawrapper chart to make it publicly accessible and render a preview in chat.
IMPORTANT: Only use this tool when the user explicitly requests to publish the chart.
Do not automatically publish charts after creation unless specifically asked.
- **get_chart** — ⚠️ DATAWRAPPER MCP TOOL ⚠️
This is part of the Datawrapper MCP server integration.

---

Get information about an existing Datawrapper chart,
including its complete configuration, metadata, and URLs.

The returned configuration can be used to:
- Understand how a chart is styled and configured
- Adapt the configuration to a new dataset
- Clone a chart's styling to create similar visualizations

Returns:
- chart_id: The chart's unique identifier
- title: Chart title
- type: Simplified chart type name (bar, line, stacked_bar, etc.) - same format
        as used in list_chart_types and create_chart
- config: Complete Pydantic model configuration including all styling,
          colors, axes, tooltips, annotations, and other properties
- public_url: Public URL if published
- edit_url: Editor URL
- **update_chart** — ⚠️ DATAWRAPPER MCP TOOL ⚠️
This is part of the Datawrapper MCP server integration.

---

Update an existing Datawrapper chart's data or configuration using Pydantic models.

⚠️ IMPORTANT LIMITATION: You CANNOT change the chart type with this tool.
Chart types are immutable once created. To change from one chart type to another
(e.g., column → stacked_bar, or line → area), you must create a new chart instead.

WHAT YOU CAN UPDATE:
• Chart data (add/modify/replace data points)
• Title, intro, byline, source information
• Colors, styling, axes configuration
• Tooltips, annotations, labels
• Any other configuration options for the existing chart type

WHAT YOU CANNOT UPDATE:
✗ Chart type (bar, line, column, etc.) - this is permanent

The chart_config must use high-level Pydantic fields only (title, intro,
byline, source_name, source_url, etc.). Do NOT use low-level serialized structures
like 'metadata', 'visualize', or other internal API fields.

STYLING UPDATES:
Use get_chart_schema to see available fields, then apply styling changes:
- Colors: {"color_category": {"sales": "#ff0000"}}
- Line properties: {"lines": [{"column": "sales", "width": "style2"}]}
- Axis settings: {"custom_range_y": [0, 200], "y_grid_format": "0,0"}
- Tooltips: {"tooltip_number_format": "0.0"}

See https://datawrapper.readthedocs.io/en/latest/ for detailed examples.
The provided config will be validated through Pydantic and merged with the existing
chart configuration.
- **delete_chart** — ⚠️ DATAWRAPPER MCP TOOL ⚠️
This is part of the Datawrapper MCP server integration.

---

Delete a Datawrapper chart permanently.
- **export_chart_png** — ⚠️ DATAWRAPPER MCP TOOL ⚠️
This is part of the Datawrapper MCP server integration.

---

Export a Datawrapper chart as PNG and display it inline.
The chart must be created first using create_chart.
Supports high-resolution output via the zoom parameter.
IMPORTANT: Only use this tool when the user explicitly requests to see the chart image
or export it as PNG. Do not automatically export charts after creation unless specifically asked.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `uvx` (confidence: high):

```json
"mcpServers": {
  "datawrapper": {
    "command": "uvx",
    "args": ["datawrapper-mcp"]
  }
}
```

## Documentation & README

[![PyPI](https://img.shields.io/pypi/v/datawrapper-mcp)](https://pypi.org/project/datawrapper-mcp/)
[![MCP Registry](https://img.shields.io/badge/MCP-Registry-blue)](https://registry.modelcontextprotocol.io/?q=datawrapper)
[![Docker Hub](https://img.shields.io/docker/v/palewire/datawrapper-mcp?label=Docker%20Hub)](https://hub.docker.com/r/palewire/datawrapper-mcp)

A Model Context Protocol (MCP) server and app for creating Datawrapper charts using AI assistants. Built on the [datawrapper Python library](https://github.com/chekos/datawrapper).

<!-- mcp-name: io.github.palewire/datawrapper-mcp -->

> **Status: early and experimental.** This project — including its Claude
> Code/Desktop plugin and marketplace listing — is under active development,
> and behavior can change between releases. In particular, the
> plugin/marketplace install path has known gaps (see
> [issue #78](https://github.com/palewire/datawrapper-mcp/issues/78)) — don't
> treat it yet as a finished, zero-maintenance install path for a wider
> rollout.

## Example Usage

You can provide a data file and simply ask for the chart you want. The draft will soon appear in the panel.

![Books chat chart](https://raw.githubusercontent.com/palewire/datawrapper-mcp/HEAD/.github/books.png)

Here's a more complete example showing how to create, publish, update, and display a chart by chatting with the assistant:

```
"Create a datawrapper line chart showing temperature trends with this data:
2020, 15.5
2021, 16.0
2022, 16.5
2023, 17.0"
# The assistant creates the chart and returns the chart ID, e.g., "abc123"

"Publish it."
# The assistant publishes it and returns the public URL

"Update chart with new data for 2024: 17.2°C"
# The assistant updates the chart with the new data point

"Make the line color dodger blue."
# The assistant updates the chart configuration to set the line color

"Show me the editor URL."
# The assistant returns the Datawrapper editor URL where you can view/edit the chart

"Show me the PNG."
# The assistant embeds the PNG image of the chart in its contained response.

"Suggest five ways to improve the chart."
# See what happens!
```

## Tools

| Tool               | Description                                        |
| ------------------ | -------------------------------------------------- |
| `list_chart_types` | List available chart types with descriptions       |
| `get_chart_schema` | Get the full configuration schema for a chart type |
| `create_chart`     | Create a new chart with data and configuration     |
| `update_chart`     | Update an existing chart's data or styling         |
| `publish_chart`    | Publish a chart to make it publicly accessible     |
| `get_chart`        | Retrieve a chart's configuration and metadata      |
| `delete_chart`     | Permanently delete a chart                         |
| `export_chart_png` | Export a chart as a PNG image                      |

## Chart Types

bar, line, area, arrow, column, multiple column, scatter, stacked bar

Use `list_chart_types` to see descriptions, then `get_chart_schema` to explore configuration options for any type.

## Getting Started

### Requirements

- A Datawrapper account (sign up at https://datawrapper.de/signup/)
- An MCP client such as [Claude](https://claude.ai/) or [OpenAI Codex](https://openai.com/codex/)
- Python 3.10 or higher

### Get Your API Token

1. Go to https://app.datawrapper.de/account/api-tokens
2. Create a new API token
3. Add it to your MCP configuration as shown in the [installation guide](https://github.com/palewire/datawrapper-mcp/blob/HEAD/INSTALLATION.md)

### Quick Start (Claude Code)

```json
{
  "mcpServers": {
    "datawrapper": {
      "command": "uvx",
      "args": ["datawrapper-mcp"],
      "env": {
        "DATAWRAPPER_ACCESS_TOKEN": "your-token-here"
      }
    }
  }
}
```

For other clients (Claude Desktop, Claude.ai, Cursor, VS Code Copilot, ChatGPT, OpenAI Codex, OpenClaw) and Kubernetes deployment, see the [installation guide](https://github.com/palewire/datawrapper-mcp/blob/HEAD/INSTALLATION.md).

> **Installing via a plugin marketplace/directory (Claude Desktop's plugin
> browser, ClawHub, etc.) is still experimental.** These interactive install
> flows currently have no working way to collect required environment
> variables like `DATAWRAPPER_ACCESS_TOKEN` — see
> [issue #78](https://github.com/palewire/datawrapper-mcp/issues/78) for
> details. The manually-edited config shown above (and throughout the
> [installation guide](https://github.com/palewire/datawrapper-mcp/blob/HEAD/INSTALLATION.md)) is the reliable path today.

### Using Your Own Token (Hosted Deployments)

When connecting to a hosted instance of the server over HTTP, you can authenticate
with your own Datawrapper API token by sending it in the `Authorization` header:

```
Authorization: Bearer <your-datawrapper-api-token>
```

This ensures charts are created under your account instead of the server operator's.
The token is read from the header automatically — no need to include it in every
tool call.

You can also pass `access_token` directly as a tool argument, which takes precedence
over the header. When neither is provided, the server falls back to its
`DATAWRAPPER_ACCESS_TOKEN` environment variable.

### Custom Instructions

Set `DATAWRAPPER_MCP_INSTRUCTIONS` to have the server hand your own free-text
guidance to connecting MCP clients (many, including Claude, fold this into
the model's context). Use it for house style rules — required fields, naming
conventions, and the like — without forking the server:

```json
"env": {
  "DATAWRAPPER_ACCESS_TOKEN": "your-token-here",
  "DATAWRAPPER_MCP_INSTRUCTIONS": "Every chart needs alt text and a CMS slug in its notes field."
}
```

### Supported Clients

| Client          | Config file                  | Transport                |
| --------------- | ---------------------------- | ------------------------ |
| Claude Desktop  | `claude_desktop_config.json` | stdio or streamable-http |
| Claude.ai       | Personal or org connector    | streamable-http          |
| Claude Code     | [Plugin marketplace](https://github.com/palewire/datawrapper-mcp) or `.mcp.json` | stdio |
| VS Code Copilot | `.vscode/mcp.json`           | stdio                    |
| Cursor          | `.cursor/mcp.json`           | stdio or streamable-http |
| ChatGPT         | Dev Mode settings            | streamable-http only     |
| OpenAI Codex    | `~/.codex/config.toml`       | stdio                    |
| OpenClaw        | [ClawHub plugin](https://clawhub.ai/palewire/plugins/datawrapper-mcp) or `openclaw.json` | stdio |

