Renders MatPlotLibNet charts to PNG, SVG or PDF from a JSON spec an AI agent writes.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
MatPlotLibNet is a charting library for C#, .NET 10 and .NET 8, inspired by matplotlib. It draws 83 chart types and saves them as SVG, PNG, PDF or an animated GIF, straight from your server code. It does not need a JavaScript framework, a WebView or a hosted service.
It has a fluent API and it works with dependency injection. It ships with 148 colormaps, 30 themes, 13 map
projections with embedded Natural Earth data, LaTeX-style MathText, text in any script, O(1) streaming with 53
technical indicators, a control room (Plt.OpsDashboard() β KPI tiles, state timelines, one shared trend window),
and an MCP server so an AI agent can draw with it. Charts render natively in Blazor, WPF, MAUI, Avalonia, Uno and
ASP.NET Core, inside a Verso notebook cell, and TypeScript clients are there for Angular, React and Vue.
1.18 draws charts inside a Verso notebook. Verso is the open-source
notebook built to replace Polyglot Notebooks, and MatPlotLibNet.Verso is an extension you install from its
Extensions panel. After that a cell that ends on a figure β or on the builder that makes one, without
.Build() β shows the chart instead of a line of type names. The chart fills the width of the cell, and one
taller than the cell can show gets a scroll box rather than being squeezed into a size nobody chose. The package
carries the extension and nothing else on purpose: a notebook loads an extension in its own context, so a second
copy of the charting library shipped alongside would be a different Figure from the one the cell made.
MatPlotLibNet.Notebooks stands still at the version it reached; the runtime under Polyglot Notebooks has ended,
and notebook work belongs in Verso now.
1.17.1 is a patch on top of it. A clicked data point now reaches your own code β the desktop controls and
the SignalR route both hand it over with its series, its value and where it was. The control room gained a
service-topology panel, GroupedBar draws several bars per category in one call, DensityScatter colours a
scatter by how crowded it is, and three accessible colour sequences arrived (petroff6, petroff8,
petroff10). All fourteen packages carry an icon and release notes now, and the documentation site has a page
that translates matplotlib into C#, call by call.
1.17 draws text in any script. Arabic letters join, Hebrew reads right to left, and a number or a Latin word
inside Arabic or Hebrew text is placed in the correct position, using the font that ships in the package. The
Unicode bidi algorithm is implemented in full and checked against Unicode's own 861,948 test cases; HarfBuzz shapes
each run. Other scripts need a font file: SkiaFonts.Register(path) registers one, and the MCP server reads font
files from the MATPLOTLIBNET_FONTS variable. Latin text is now kerned too, so text widths changed by up to 2 px
per letter pair.
1.16 adds a data table beside every chart, for a reader who cannot see the picture.
figure.ToDataTables() returns the figure's data as tables with typed columns, and you can write each table
as HTML, Markdown or CSV. Every host serves the table: an ASP.NET Core endpoint next to the SVG endpoint, a
ShowDataTable option on the Blazor component, a chartDataTable field in the GraphQL schema, and a fifth MCP
tool. The same release fixed the streaming series. A point and a candle are now stored as one value, so a snapshot
can no longer show a point or a bar that never existed. The buffer behind them is now the generic RingBuffer<T>.
1.15 added support for AI agents. MatPlotLibNet.Mcp is a Model Context Protocol server. A model can render
any of these chart types from a JSON spec and look at the result. When the spec is wrong, the server reports which
field is wrong instead of returning a blank picture.
1.14 added the control room: Plt.OpsDashboard() and the tile anatomy arrived with it. The releases since
then contain the fixes and extensions that real control-room use required: a secondary Y axis with the same
capabilities as the primary axis, streaming that draws in SVG, 3-D axis titles that do not overlap their own
labels, tile captions that wrap and stay inside their tile, and an ops window whose ticks are formatted as time.
After that, releases follow what the community needs: bug fixes, documentation, and whatever comes up in real use. Open a Discussion or an Issue; that is what decides the next release. Every release, with its migration notes, is listed in the CHANGELOG.
Quality bar: every class must pass a strict coverage gate of β₯90 % line and branch coverage (706 classes, at 99.6 % line / 97.5 % branch) across 11,757 tests. The test suite verifies rendering against matplotlib pixel-fidelity fixtures.
| Package | Install | What it does |
|---|---|---|
| MatPlotLibNet | dotnet add package MatPlotLibNet | Core: models, fluent API, SVG rendering, JSON, transforms |
| MatPlotLibNet.DataFrame | dotnet add package MatPlotLibNet.DataFrame | Microsoft.Data.Analysis.DataFrame extension methods β plot, indicators (SMA/EMA/RSI/MACD/β¦), and polynomial regression from named columns |
| MatPlotLibNet.Skia | dotnet add package MatPlotLibNet.Skia | PNG, PDF, and animated GIF export via SkiaSharp |
| MatPlotLibNet.Blazor | dotnet add package MatPlotLibNet.Blazor | MplChart + MplLiveChart Razor components with SignalR |
| MatPlotLibNet.AspNetCore | dotnet add package MatPlotLibNet.AspNetCore | REST endpoints, SignalR hub, IChartPublisher |
| MatPlotLibNet.Interactive | dotnet add package MatPlotLibNet.Interactive | figure.ShowAsync() β browser popup, no server needed |
| MatPlotLibNet.GraphQL | dotnet add package MatPlotLibNet.GraphQL | GraphQL queries + subscriptions via HotChocolate |
| MatPlotLibNet.Maui | dotnet add package MatPlotLibNet.Maui | Native MplChartView via Microsoft.Maui.Graphics |
| MatPlotLibNet.Avalonia | dotnet add package MatPlotLibNet.Avalonia | Native MplChartControl for Avalonia 12 β Skia backend, optional local interaction |
| MatPlotLibNet.Uno | dotnet add package MatPlotLibNet.Uno | Native MplChartElement for Uno Platform (WinUI 3 / Android / iOS / macCatalyst) |
| MatPlotLibNet.Wpf | dotnet add package MatPlotLibNet.Wpf | Native WPF MplChartControl via SkiaSharp β all 9 interaction modifiers |
| MatPlotLibNet.Geo | dotnet add package MatPlotLibNet.Geo | 13 map projections, GeoJSON parser, Natural Earth 110m data, geographic polygons |
| MatPlotLibNet.Verso | Verso β Extensions panel | A chart inside a Verso notebook cell, drawn as SVG (cookbook) |
| MatPlotLibNet.Notebooks | #r "nuget: MatPlotLibNet.Notebooks" | Inline SVG in Polyglot / Jupyter notebooks. Microsoft has ended Polyglot Notebooks and .NET Interactive, which this package builds on, so existing notebooks keep working but nothing new is coming β for new work use MatPlotLibNet.Verso |
| MatPlotLibNet.Mcp | dnx MatPlotLibNet.Mcp | MCP server β an AI agent renders charts over stdio (cookbook) |
| @matplotlibnet/angular | npm install @matplotlibnet/angular | Angular components + TypeScript SignalR client |
| @matplotlibnet/react | npm install @matplotlibnet/react | React hooks + components + TypeScript SignalR client |
| @matplotlibnet/vue | npm install @matplotlibnet/vue | Vue 3 composables + TypeScript SignalR client |
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/matplotlibnet)<a href="https://allmcps.com/mcp/matplotlibnet"><img src="https://allmcps.com/api/badge/matplotlibnet?style=directory" alt="Matplotlibnet on AllMCPs" /></a>