Skip to main content
Glama
liminalpepe

x402-dataviz-mcp

by liminalpepe
README.md
# x402-dataviz-mcp

A free MCP (Model Context Protocol) server that renders bar, line, and area
charts from structured data and returns clean, hand-designed SVG. No API
key, no payment, no rate limit games — just an MCP tool any MCP client can
call.

This is the **open funnel twin** of a paid, x402-gated HTTP API:

**[x402-dataviz-poc.theliminalguy.workers.dev](https://x402-dataviz-poc.theliminalguy.workers.dev)**
— `POST /chart`, $0.01 USDC on Base per call via the
[x402 payment protocol](https://x402.org), for production/high-volume or
non-MCP (plain HTTP) use. Same renderer, same output, just billed per call
instead of free-via-MCP.

## Why this exists

The [x402 Bazaar](https://x402.org) (~14,800 agent-payable APIs at time of
writing) has zero coverage in "structured data → clean chart image." This
MCP server is the free/local half of filling that gap — try it for nothing
via MCP; reach for the paid HTTP endpoint when you need it at volume or
outside an MCP client.

## What it does

One tool, `render_chart`, takes a chart type + structured data points and
returns a rendered SVG string. Rendering is hand-rolled (no headless
browser, no native binaries, no heavy charting framework) — just
string-built SVG, so it's fast with zero runtime dependency risk.

The design bar is the actual differentiator: a real categorical color
palette (validated for colorblind-safety, not eyeballed), considered
spacing, thin marks with rounded bar ends, 2px surface gaps between bars,
ringed line markers, direct end-labels, and full light/dark theme support —
not the default-blue/red/green look of a generic charting library.

## Install & run

```bash
npx x402-dataviz-mcp
```

Or add it to an MCP client config (e.g. Claude Desktop's
`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "dataviz": {
      "command": "npx",
      "args": ["-y", "x402-dataviz-mcp"]
    }
  }
}
```

## Tool: `render_chart`

Input:

```jsonc
{
  "type": "bar" | "line" | "area",
  "title": "optional string",
  "theme": "light" | "dark",       // defaults to "light"
  "data": [
    { "x": "Q1", "values": { "Revenue": 128000, "Cost": 84000 } },
    { "x": "Q2", "values": { "Revenue": 146500, "Cost": 91200 } }
  ]
}
```

`values` can hold one or more named series; series colors are assigned from
a fixed, colorblind-validated order (never generated/cycled). A legend
renders automatically for 2+ series; a single series needs no legend (the
title already names it).

Output: an SVG string (as MCP tool text content) rendering the requested
chart.

## Local development

```bash
npm install
npm run dev      # runs src/index.ts directly on stdio via tsx
npm run build    # compiles to dist/ for the published npm package
```

## When to use the paid HTTP twin instead

Use [`POST /chart`](https://x402-dataviz-poc.theliminalguy.workers.dev/chart)
on the paid Worker instead of this MCP server when:

- You're calling from outside an MCP client (plain HTTP, any language).
- You need production/high-volume use and want to pay per call rather than
  rely on a free tool being available indefinitely.
- Your agent already speaks x402 (e.g. via `x402-fetch` / `x402-axios`) and
  can pay $0.01 USDC on Base per request.

Both routes call the exact same `renderChart()` function — output is
byte-for-byte identical.

## License

MIT

TDQS

A4.2/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool in the server, there is zero possibility of confusing it with another tool. The purpose of the tool is clearly described, covering bar, line, and area charts.

Naming Consistency5/5

The single tool name 'render_chart' follows a clean verb_noun pattern. With only one tool, naming consistency is trivially achieved.

Tool Count3/5

The server contains exactly one tool, which feels thin for a typical MCP server. However, the scope is narrow (chart rendering), so the single tool is not entirely unreasonable, but it is borderline.

Completeness3/5

The tool covers the core function of rendering a chart, but lacks auxiliary operations such as data validation, chart configuration, or output handling. For a focused dataviz server, this may suffice but leaves some gaps for more complex workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues