MatPlotLibNet.Mcp 1.18.0

{
  "inputs": [
    {
      "type": "promptString",
      "id": "MATPLOTLIBNET_MCP_OUTPUT_ROOT",
      "description": "The only directory save_chart may write under. Defaults to the system temp directory."
    },
    {
      "type": "promptString",
      "id": "MATPLOTLIBNET_FONTS",
      "description": "Font files (.ttf, .otf) and directories of them, separated by ';', registered at startup so a chart can use a script the bundled font lacks (Devanagari, Thai, Chinese). Arabic and Hebrew work without it."
    }
  ],
  "servers": {
    "matplotlibnet.mcp": {
      "type": "stdio",
      "command": "dnx",
      "args": ["matplotlibnet.mcp@1.18.0", "--yes"],
      "env": {
        "MATPLOTLIBNET_MCP_OUTPUT_ROOT": "${input:MATPLOTLIBNET_MCP_OUTPUT_ROOT}",
        "MATPLOTLIBNET_FONTS": "${input:MATPLOTLIBNET_FONTS}"
      }
    }
  }
}
                    
This package contains an MCP Server. The server can be used in VS Code by copying the generated JSON to your VS Code workspace's .vscode/mcp.json settings file.
dotnet tool install --global MatPlotLibNet.Mcp --version 1.18.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local MatPlotLibNet.Mcp --version 1.18.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=MatPlotLibNet.Mcp&version=1.18.0
                    
nuke :add-package MatPlotLibNet.Mcp --version 1.18.0
                    

MatPlotLibNet.Mcp

mcp-name: io.github.xkqg/matplotlibnet

An MCP (Model Context Protocol) server for MatPlotLibNet. It gives an AI agent (Claude Code, VS Code, Claude Desktop, or any other MCP host) five tools:

tool what it does
render_chart renders a chart spec to a PNG image the model can look at
save_chart writes the chart as PNG, SVG or PDF to a file and returns the path it wrote
chart_data_table returns the chart's data as markdown tables the model can read, and the same values as structured content it can compute with
list_chart_types lists the chart types the spec accepts; the list is read from the library's own registry
describe_chart_schema describes the fields of the spec and gives a worked example for a chart type

The server communicates over stdio. It is a .NET tool: a host runs it with dnx MatPlotLibNet.Mcp (the .NET 10 SDK resolves and starts it), or with dotnet tool exec MatPlotLibNet.Mcp.

{
  "servers": {
    "MatPlotLibNet.Mcp": {
      "type": "stdio",
      "command": "dnx",
      "args": ["MatPlotLibNet.Mcp", "--yes"]
    }
  }
}

The spec

The spec is the library's own figure JSON: the same document that figure.ToJson() writes and ChartSerializer.FromJson reads. The agent can therefore ask for any chart the library can draw:

{
  "width": 800, "height": 600, "title": "Revenue",
  "subPlots": [{
    "series": [{ "type": "line", "xData": [1, 2, 3, 4, 5], "yData": [2, 4, 3, 5, 1], "label": "Q1" }]
  }]
}

The server validates the spec before it renders. It rejects an unknown field, an unknown chart type, a misspelled enum value, a colour the library does not know, or a missing size. The error message names the field that is wrong, so the model can correct the spec instead of receiving a blank picture.

What comes back

render_chart returns the PNG as an image block. Beside it, it returns a short text summary (chart types, series, axis ranges), so a model that cannot see the image still knows what it made. SVG and PDF output is large, so it goes to a file through save_chart and is never returned inline.

The SVG this server writes stores text as glyph outlines (<path>), not as <text> elements. This is because the PNG backend is loaded in the same process, and the library then embeds its own font so that the drawing is identical everywhere.

Limits

  • save_chart writes only under one directory: the system temp directory, or the one named by the MATPLOTLIBNET_MCP_OUTPUT_ROOT environment variable. It never overwrites an existing file unless asked.
  • Arabic and Hebrew text work without setup. For Devanagari, Thai, Chinese, Japanese or Korean, name font files or directories of font files in the MATPLOTLIBNET_FONTS environment variable, separated by ;; they are registered when the server starts. A bad entry is logged and skipped.
  • The server refuses a canvas larger than the documented ceiling, and the error message states the ceiling.

License

MIT — see the repository.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
1.18.0 0 9/23/2026
1.17.1 93 9/13/2026
1.17.0 135 9/12/2026
1.16.0 111 9/12/2026
1.15.1 106 9/12/2026
1.15.0 105 9/11/2026

MatPlotLibNet 1.18.0. What changed in this release, and in every release before it, is written out in the changelog: https://github.com/xkqg/MatPlotLibNet/blob/main/CHANGELOG.md#1180