Skip to main content
Glama
datawrapper-mcp

datawrapper-mcp

by palewire

PyPI MCP Registry Docker Hub

A Model Context Protocol (MCP) server and app for creating Datawrapper charts using AI assistants. Built on the datawrapper Python library.

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) — 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

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!

Related MCP server: Draw.io MCP Server

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

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

Quick Start (Claude Code)

{
  "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.

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 for details. The manually-edited config shown above (and throughout the installation guide) 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:

"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 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 or openclaw.json

stdio

Available Tools

9 tools
check_datawrapper_connectionCheck Datawrapper ConnectionA
Read-onlyIdempotent

⚠️ 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.

Inputs: access_token. Returns: result

create_chartCreate ChartB

⚠️ 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.

Inputs: data (required), chart_type (required), chart_config (required), access_token.

delete_chartDelete ChartC
DestructiveIdempotent

⚠️ DATAWRAPPER MCP TOOL ⚠️ This is part of the Datawrapper MCP server integration.


Delete a Datawrapper chart permanently.

Inputs: chart_id (required), access_token. Returns: result

export_chart_pngExport Chart PngA
Read-onlyIdempotent

⚠️ 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.

Inputs: chart_id (required), zoom, plain, width, +6 more.

get_chartGet ChartB
Read-onlyIdempotent

⚠️ 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

Inputs: chart_id (required), access_token. Returns: result

get_chart_schemaGet Chart SchemaA
Read-onlyIdempotent

⚠️ 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.

Inputs: chart_type (required). Returns: result

list_chart_typesList Chart TypesA
Read-onlyIdempotent

⚠️ 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

Inputs: no named parameters.

publish_chartPublish ChartA
Idempotent

⚠️ 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.

Inputs: chart_id (required), access_token.

update_chartUpdate ChartA
Idempotent

⚠️ 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.

Inputs: chart_id (required), data, access_token, chart_config.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 9 tools

    Disambiguation5/5

    Each tool has a distinct role in the Datawrapper lifecycle: discovery (list_chart_types, get_chart_schema), account check, create, publish, get, update, delete, and export. There is no meaningful overlap between chart creation, publishing, exporting, or schema exploration. The workflow order is made explicit in descriptions.

    Naming Consistency5/5

    All tool names use snake_case with clear verb_noun patterns such as create_chart, get_chart, update_chart, delete_chart, publish_chart, and export_chart_png. The only slight variation is check_datawrapper_connection, but it still follows snake_case and remains readable. The set is highly predictable.

    Tool Count5/5

    Nine tools is well-scoped for a chart creation and management integration. Each tool covers a necessary operation without obvious redundancy. The count stays comfortably within the ideal 3-15 range.

    Completeness4/5

    Core chart lifecycle operations are covered: creation, retrieval, update, deletion, publishing, export, schema discovery, and connection checking. The main gap is the lack of a list_charts or search tool for finding existing chart IDs, which would help agents manage prior work. This is a minor gap that can be worked around when chart IDs are known.

    Maintenance

    ActivitySlowing
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that enables AI assistants to create, update, and publish Datawrapper charts through natural language. It provides tools for data synchronization, visual configuration, and retrieving chart images or editor links.
      8
      MIT