Find, wire, and render microcharts β word-sized React charts β from an AI assistant.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Word-sized charts for React β zero runtime dependencies, ~2β7Β kB interactive Β· ~1β4Β kB static, accessible by default, and server-component safe.
Docs Β· Gallery Β· Quickstart Β· AI usage Β· llms.txt
microcharts is 106 tiny, handcrafted chart types built to sit inside an interface: a sentence, a table cell, a KPI card, a tab header, a streamed AI reply. The grammar is small enough for a model to emit correctly mid-sentence, and every chart describes itself in words, so a chart an LLM streams into a chat reply is one a person can read and check.
Status: tested and in production use, but not across every stack and edge yet. If you hit something, open an issue on GitHub.
data plus a generated sentence. One grammar across all 106 types β a model that has
seen one chart can write them all. β AI usage/interactive import.img with a natural-language summary built from your data; it updates
when the numbers do. β Accessibilityanimate plus one import "@microcharts/react/motion", and glide
continuous marks when data updates. Entrances respect prefers-reduced-motion and never replay over server-rendered
HTML. β MotionImport the stylesheet once at the root of your app β it carries every theming token and chart style in a low-specificity cascade layer, so your own styles always win:
Every chart renders from data alone. This works in a React Server Component with zero client JavaScript β pure
SVG, and its accessible name is generated from the data.
Each chart imports from its own subpath, so you only ship what you use. Every chart follows the same two-entry
pattern: a static default, and an /interactive twin.
Need hover, keyboard navigation, touch, or live announcements? Import the same chart from /interactive. The rendered
output and the accessible name are identical, because the interactive entry composes its static twin. It only adds
props; you opt into the client component where it matters.
Every interactive chart shares one contract, so you learn it once. Hover or arrow keys make a unit active; a click,
tap, Enter, or Space selects it and pins the readout so it survives blur; Escape or
a press outside the chart clears; Home/End jump to the ends. Read it back with onActive and
onSelect β payload { index, value, label?, formatted? }, where value is the raw number and formatted is the
chart's ready-to-display string β and control the pin with selectedIndex / defaultSelectedIndex. Set
readout={false} to hide the in-chart value chip and render datum.formatted wherever you like. Single-unit scalar
charts (Delta, Progress, StatusDot, Bullet, β¦) take onSelect alone.
Thresholds, markers, and target zones are children β the same grammar on every chart that supports them:
About two dozen --mc-* CSS custom properties are the runtime contract; presets are token bundles. Set one on a subtree
with the provider β presets are visual only and never change what the data means:
Presets: modern (default), editorial, mono, vivid, plus output-context print and eink. Dark mode is
hand-tuned, not inverted. For a whole brand theme, defineTheme (from @microcharts/react/theme) derives a matched,
color-blind-safe palette and dark twins from one accent:
Retune density with one scalar (--mc-density), give figures their own face (--mc-font-numeric), or recolor a single
categorical chart with a colors array. β Theming guide
106 stable chart types β 34 core, 26 decision, 23 expressive, 23 frontier β grouped by the question each one
answers. data alone always renders something correct, and a prop name means the same thing on every chart (domain,
color, title, summary, label, formatβ¦), so picking a chart is picking the question you need answered.
Sparklines, bars, deltas, and bullets through bump charts, funnels, honeycombs, calendar strips, and confidence bands β browse them all in the live gallery β
Not shipping, on purpose: pie, needle-gauge/speedometer, battery, waffle, violin. Each fails at micro scale or on the honest-encoding bar, and each has an in-catalog replacement (Bullet for gauges, SegmentedBar for pie, MicroBox for violin). β what to use instead
A model writes the chart; a person reads it. The docs site publishes machine surfaces alongside the human ones:
| Surface | What it is |
|---|---|
/llms.txt | Curated map of the catalog and guides |
/llms-full.txt | The complete generated docs corpus |
/catalog.json | Every chart's name, import path, props, data shapes |
The surfaces above are for reading. @microcharts/mcp lets an
assistant call the library directly: a Model Context Protocol server that runs on your machine over stdio, with three
tools backed by this library β find the chart type that answers a question, get its exact props and a
ready-to-render sample, and render it to a self-contained SVG with the generated alt text attached.
Works in Claude Desktop, Claude Code, Cursor, and VS Code; nothing is hosted and no key is involved. The same three
capabilities ship as Vercel AI SDK tools on the @microcharts/mcp/ai-sdk subpath. Full reference:
microcharts.dev/docs/mcp. Also listed in the
Glama MCP registry.
React 18 and 19. ESM-only, per-component subpath exports, types-first export conditions. Static charts render in any RSC or SSR setup with no client runtime.
sideEffects is a two-entry allowlist, never false: styles.css and the opt-in ./motion engine are both imported
for their side effects, and false would let a bundler drop them. Every other module is side-effect free and
tree-shakes normally, and since charts ship as per-component subpaths, you only pay for the ones you import.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/microcharts)<a href="https://allmcps.com/mcp/microcharts"><img src="https://allmcps.com/api/badge/microcharts?style=directory" alt="Microcharts on AllMCPs" /></a>