What the maidr MCP server does
The maidr MCP server brings accessible charts into ChatGPT and Claude conversations through MCP Apps. A model supplies chart data to show_chart, and the resulting view exposes the chart to readers who use keyboard navigation, screen readers, sound, or braille. The model can also update an existing view without creating another one.
The server is intended for conversations where a reader needs more than a static image. It can identify layers and point counts, inspect paged layer data, move the reader to navigable points, and operate chart commands such as changing braille mode, starting autoplay, or moving to a maximum value.
How it works
show_chart renders the supplied data on the server with matplotlib and py-maidr. The chart view receives SVG through the tool result metadata, keeping that SVG out of the model’s context. The view loads pinned versions of maidr.js and the MCP Apps SDK from jsDelivr, then relays model requests to the chart’s own maidr tools.
As the reader moves through a chart, the view sends its current position back with ui/update-model-context. The model can therefore answer questions about the reader’s location without always making another tool call. A long-poll relay normally delivers requests immediately; fallback short polling is used when a host does not keep the long request open.
When update_chart replaces a chart, the reader remains in the chart if they were already there, while other focus remains unchanged. Pending navigation or command requests are preserved as waiting status where appropriate, and a remounted view can retrieve the latest chart.
Tools and capabilities
The model-facing tools include:
show_chart to create a chart and return its viewId.
update_chart to replace the chart associated with a view.
maidr_list_charts to inspect layers, point counts, and live reader position.
maidr_get_layer_data to retrieve pages of points and navigation targets.
maidr_navigate to move to a point and announce it, optionally requesting focus.
maidr_list_commands to inspect available commands, keys, and reader modes.
maidr_run_command to execute a supported command and announce its result.
Supported chart inputs include bar, line, step, scatter, histogram, box, violin, heatmap, pie, and candlestick charts. Navigation is available for bar, line, step, scatter points, histogram, and heatmap layers; box, violin, pie, and candlestick layers do not provide navigation targets according to the supplied support table.
Limitations and notes
The project is marked experimental. Its end-to-end flow has been checked in the MCP Apps SDK reference host, but not yet in claude.ai or ChatGPT. The chart view depends on loading maidr.js and the MCP Apps SDK from jsDelivr.
Focus handling is deliberate: the view does not move keyboard focus merely because the reader left the chart. A model should request focus when the reader explicitly asks to be taken somewhere or have an action performed immediately. Otherwise, navigation and commands can wait until the reader enters the chart. Commands that open dialogs or text fields remain the reader’s responsibility.