ApexCharts
Generates and validates configs for ApexCharts charts, grid, gantt, tree, sankey, stock and maps.
Should I use this
Quality & Safety
Findings (14)
- HIGH
- MEDIUMin apexcharts_generate_config
- MEDIUMin apexgantt_generate_config
- MEDIUMin apextree_generate_config
- MEDIUMin apexsankey_generate_config
- MEDIUMin apexstock_generate_config
- MEDIUMin apexmaps_generate_config
- MEDIUMin apexcharts_list_types
- INFOin apexcharts_generate_config
- INFOin apexgantt_generate_config
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"apexcharts-mcp"
]
}
}
}Runnable packages
0.9.5stdioRemote endpoints
https://mcp.apexcharts.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (23)
🟢apexcharts_list_products
Return every product (charts, gantt, tree, sankey, grid, stock, maps) currently exposed by this MCP server, with a "when to pick this" hint and the tool names it registers. Use this once at the start of a session to decide which product matches the user's task; then call that product's tools directly. Each product also reports `compatibility`: the bundled skill version and the upstream library version its guidance was verified against — use it to tell the user which library version this server targets. Results respect the APEXCHARTS_MCP_PRODUCTS env-var gating.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexcharts_generate_config(type, series, categories, title, height, ...)
Build a minimal valid ApexCharts options object for a given chart type. Picks the correct series data format (axis vs non-axis) and supplies placeholder data when none is given. Use this as the starting point for a chart.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"line",
"area",
"bar",
"scatter",
"bubble",
"rangeArea",
"rangeBar",
"funnel",
"pyramid",
"waterfall",
"dumbbell",
"streamgraph",
"raincloud",
"histogram",
"candlestick",
"boxPlot",
"violin",
"heatmap",
"treemap",
"icicle",
"radar",
"pie",
"donut",
"polarArea",
"radialBar",
"gauge",
"sunburst",
"unit",
"waffle"
],
"description": "ApexCharts chart.type value (e.g. \"line\", \"bar\", \"pie\")."
},
"series": {
"type": "array",
"items": {},
"description": "Optional series data in the format required by the chart type."
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"description": "xaxis categories (axis charts) or labels (pie/donut/etc)."
},
"title": {
"type": "string",
"description": "Optional chart title."
},
"height": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Chart height in px (default 350)."
},
"stacked": {
"type": "boolean",
"description": "Stack series. Honored only for bar, area and line chart types."
},
"horizontal": {
"type": "boolean",
"description": "Render bars horizontally. Honored only for bar chart type."
}
},
"required": [
"type"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexcharts_validate_config(config)
Check an ApexCharts options object against the data-format rules and known pitfalls (wrong series shape for chart type, radialBar values outside the min/max domain, undefined data points, conflicting tooltip flags, hex colors missing #, etc.). Returns structured issues so the caller can fix them. Returns ok: true when there are no errors (warnings still allowed).
Input Schema
{
"type": "object",
"properties": {
"config": {
"type": "object",
"additionalProperties": {},
"description": "The ApexCharts options object to validate."
}
},
"required": [
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexcharts_list_types(family)
Return every ApexCharts chart type this server supports, with name, description, family (cartesian/bar/financial/circular/grid/radar/unit), series format (axis vs non-axis), expected data shape, and the reference doc filename for deeper detail. Optionally filter by family.
Input Schema
{
"type": "object",
"properties": {
"family": {
"type": "string",
"enum": [
"cartesian",
"bar",
"financial",
"circular",
"grid",
"radar",
"unit"
],
"description": "Optional family filter. Omit to return all supported types."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexcharts_get_reference(file)
Read authoritative ApexCharts documentation from the bundled apexcharts-skill knowledge base. Call with no arguments to list all available files (SKILL.md plus per-family reference docs). Call with `file` to return that file as markdown. Use this when you need to look up an option, formatter signature, plotOptions detail, or a fully worked example for a specific chart family.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Filename to read (e.g. \"SKILL.md\", \"circular-charts.md\"). Omit to list available files."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexgantt_generate_config(tasks, title, height, inputDateFormat, enableCriticalPath, ...)
Build a minimal valid ApexGantt options object. Generates a placeholder schedule (phases, dependencies, a milestone) when `tasks` is omitted, so the result can be rendered as-is. The placeholder dates are emitted in whatever `inputDateFormat` is chosen, so they parse without further work.
Input Schema
{
"type": "object",
"properties": {
"tasks": {
"type": "array",
"items": {},
"description": "Task array (`series`). Each task: { id, name, startTime, endTime?, progress?, type?, parentId?, dependency? }."
},
"title": {
"type": "string",
"description": "Optional chart title."
},
"height": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Chart height in px (default 600)."
},
"inputDateFormat": {
"type": "string",
"description": "dayjs format for parsing date strings. Default is ApexGantt's own default \"MM-DD-YYYY\". Common alternatives: \"YYYY-MM-DD\", \"DD/MM/YYYY\"."
},
"enableCriticalPath": {
"type": "boolean",
"description": "Highlight the longest dependency chain on render."
},
"baseline": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "object",
"properties": {
"color": {
"type": "string"
}
},
"additionalProperties": true
}
],
"description": "Enable planned-vs-actual baseline track. Tasks must supply a per-task `baseline: { start, end }`."
},
"enableSelection": {
"type": "boolean",
"description": "Enable `getSelectedTasks()` / `setSelectedTasks()` / `selectionChange` event."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexgantt_validate_config(config)
Check an ApexGantt options object against what the library does with it (missing id/name, tasks missing the dates the library requires, an incomplete `parsing` map, duplicate ids, orphan parentId, progress out of 0 to 100, ISO dates with the default MM-DD-YYYY format, dependency object using `id` instead of `taskId`, unknown dependency target, self-dependency, invalid dependency type, cycles, baseline missing start/end). Returns structured issues with stable rule ids.
Input Schema
{
"type": "object",
"properties": {
"config": {
"type": "object",
"additionalProperties": {},
"description": "The ApexGantt options object to validate."
}
},
"required": [
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexgantt_get_reference(file)
Read authoritative ApexGantt documentation from the bundled apexgantt-skill knowledge base. Call with no arguments to list all available files. Call with `file` to return that file as markdown. Use this to look up task data format, dependency types, view modes, the update lifecycle, or framework integration.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Filename to read (e.g. \"SKILL.md\", \"data-format.md\"). Omit to list available files."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apextree_generate_config(data, width, height, direction, contentKey, ...)
Build a minimal valid ApexTree config split into `options` (constructor) and `data` (the root NestedNode passed to `tree.render(data)`). Generates a small 3-level org chart placeholder when `data` is omitted. Every node in the output has `children: []` even for leaves (ApexTree requires it).
Input Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"additionalProperties": {},
"description": "Root NestedNode: `{ id, name, children: [...] }`. Recursive. Leaves must have `children: []`."
},
"width": {
"type": [
"number",
"string"
],
"description": "Canvas width. Default \"100%\"."
},
"height": {
"type": [
"number",
"string"
],
"description": "Canvas height. Default \"auto\"."
},
"direction": {
"type": "string",
"enum": [
"top",
"bottom",
"left",
"right",
"radial"
],
"description": "Where the root sits and which way the tree grows. Default \"top\". \"radial\" (apextree 2.0+) puts the root at the centre with one ring per depth."
},
"contentKey": {
"type": "string",
"description": "Key on each node used as the label. Default \"name\". Set to \"data\" to activate the built-in org-card template."
},
"enableSelection": {
"type": [
"string",
"boolean"
],
"enum": [
"single",
"multi",
false
],
"description": "Selection mode. Note: enableSelection: true is INVALID — use \"single\" or \"multi\"."
},
"theme": {
"type": "string",
"description": "Built-in \"light\"/\"dark\"/\"custom\", or (apextree 2.1+) the name of a theme registered on the shared family registry."
},
"edgeStyle": {
"type": "string",
"enum": [
"orthogonal",
"curved",
"straight"
]
},
"siblingSpacing": {
"type": "number",
"description": "Horizontal spacing between siblings (px)."
},
"childrenSpacing": {
"type": "number",
"description": "Vertical spacing between a node and its children (px)."
},
"nodeWidth": {
"type": "number"
},
"nodeHeight": {
"type": "number"
},
"enableToolbar": {
"type": "boolean"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apextree_validate_config(config)
Check an ApexTree config against what the library does with it: root is a NestedNode, every node has an id and a label, children (when present) is an array, ids unique across the whole tree, valid direction/edgeStyle/edgeColorMode/theme values, enableSelection is "single"|"multi"|false (NOT boolean true), and a warning when contentKey is "data" but a node has no `data` payload. Accepts both the wrapped `{ options, data }` shape and a bare root node.
Input Schema
{
"type": "object",
"properties": {
"config": {
"type": "object",
"additionalProperties": {},
"description": "The ApexTree config to validate."
}
},
"required": [
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apextree_get_reference(file)
Read authoritative ApexTree documentation from the bundled apextree-skill knowledge base. Call with no arguments to list available files; call with `file` to fetch markdown. Use this for the NestedNode data shape, grow directions, nodeTemplate, the graph API, or framework integration.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Filename to read (e.g. \"SKILL.md\", \"data-format.md\"). Omit to list available files."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexsankey_generate_config(nodes, edges, width, height, spacing, ...)
Build a minimal valid ApexSankey config split into `options` (constructor) and `data` (render payload). Generates a 5-node placeholder flow when nodes/edges are omitted so the result renders something visible. Use the result by calling `new ApexSankey(el, options)` then `sankey.render(data)`.
Input Schema
{
"type": "object",
"properties": {
"nodes": {
"type": "array",
"items": {},
"description": "Array of node objects: `{ id, title, color? }`. ids must be unique."
},
"edges": {
"type": "array",
"items": {},
"description": "Array of edge objects: `{ source, target, value, type }`. source/target reference node ids; value > 0."
},
"width": {
"type": [
"number",
"string"
],
"description": "Canvas width (px number or any CSS width). Default \"100%\"."
},
"height": {
"type": [
"number",
"string"
],
"description": "Canvas height (px number or \"auto\"). Default \"auto\" ≈ 1.6:1 from width."
},
"spacing": {
"type": "number",
"description": "Horizontal gap between node columns (px). Default 20."
},
"nodeWidth": {
"type": "number",
"description": "Node rectangle width (px). Default 20."
},
"animation": {
"type": "boolean",
"description": "Enable entrance animation. Default true."
},
"tooltipTheme": {
"type": "string",
"enum": [
"light",
"dark"
],
"description": "Tooltip preset."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexsankey_validate_config(config)
Check an ApexSankey config against what the library does with it (unique node ids, edges reference real nodes, no negative values, no self-loops, no parallel edges that collapse into one, nodes without edges). Cycles are allowed: they render as dashed loops. Accepts the wrapped `{ options, data }` shape from generate_config, the raw render payload `{ nodes, edges }`, or an ApexSankey.compare `{ before, after }` config.
Input Schema
{
"type": "object",
"properties": {
"config": {
"type": "object",
"additionalProperties": {},
"description": "The ApexSankey config object to validate."
}
},
"required": [
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexsankey_get_reference(file)
Read authoritative ApexSankey documentation from the bundled apexsankey-skill knowledge base. Call with no arguments to list available files; call with `file` to fetch markdown. Use this for the { nodes, edges, options } data shape, layer ordering, styling, or framework integration.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Filename to read (e.g. \"SKILL.md\", \"data-format.md\"). Omit to list available files."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexgrid_generate_config(columns, data, enableSortAndFilter, resizable)
Build a minimal valid `<apex-grid>` config: `{ columns, data }`. When both are omitted, a small users table is generated. When only `columns` is omitted, they are inferred from the keys of the first data row with `type` inferred per column. Pass `enableSortAndFilter: true` to opt every generated column in.
Input Schema
{
"type": "object",
"properties": {
"columns": {
"type": "array",
"items": {},
"description": "Array of ColumnConfiguration. Each column needs `{ key, type? }` where key is a real key of each data row."
},
"data": {
"type": "array",
"items": {},
"description": "Array of row objects. Keys referenced by `column.key` must exist on each row."
},
"enableSortAndFilter": {
"type": "boolean",
"description": "Convenience: add `sort: true` and `filter: true` to every generated column."
},
"resizable": {
"type": "boolean",
"description": "Convenience: add `resizable: true` to every generated column."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexgrid_validate_config(config)
Check an apex-grid `{ columns, data }` config against apexgrid-skill rules: columns/data required and array-shaped, every column.key must be a real key of the data rows, column.key unique, type is one of apex-grid's column types (string, number, boolean, date, currency, select and the other presentation types), sort/filter is boolean or config object. Returns structured issues with stable rule ids.
Input Schema
{
"type": "object",
"properties": {
"config": {
"type": "object",
"additionalProperties": {},
"description": "The apex-grid config `{ columns, data }` to validate."
}
},
"required": [
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexgrid_get_reference(file)
Read authoritative apex-grid documentation from the bundled apexgrid-skill knowledge base. Call with no arguments to list available files; call with `file` to fetch markdown. Use this for ColumnConfiguration, Lit cellTemplate, sort/filter, data pipeline, or framework integration.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Filename to read (e.g. \"SKILL.md\", \"columns-and-templates.md\"). Omit to list available files."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexstock_generate_config(data, name, title, height, theme, ...)
Build a minimal valid ApexStock options object for a financial / stock chart. Generates a placeholder OHLCV candle series when `data` is omitted, so the result renders as-is. Note: at runtime ApexStock also requires `window.ApexCharts` to be set (it does not import ApexCharts) — that is a host-page concern, not part of this options object.
Input Schema
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {},
"description": "OHLC candles for series[0].data. Each point: { x, y: [open, high, low, close], v? }. Omit for a placeholder series."
},
"name": {
"type": "string",
"description": "Series name (default \"Price\")."
},
"title": {
"type": "string",
"description": "Optional chart title."
},
"height": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Chart height in px (default 600)."
},
"theme": {
"type": "string",
"enum": [
"light",
"dark"
],
"description": "Theme mode (default \"light\")."
},
"indicators": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "object",
"additionalProperties": {}
}
],
"description": "Indicators to enable: a list of keys (e.g. [\"moving average\", \"rsi\"]) or a keyed config map (e.g. { \"bollinger bands\": { period: 20, stdDev: 2 } }). Overlays and oscillators both stack; each oscillator gets its own pane."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexstock_validate_config(config)
Check an ApexStock options object against the rules in apexstock-skill (missing series/data, flat o/h/l/c keys instead of a y:[o,h,l,c] array, malformed or inconsistent OHLC tuples, missing/invalid x, non-ascending data, invalid theme.mode, and unknown indicator keys). Returns structured issues with stable rule ids.
Input Schema
{
"type": "object",
"properties": {
"config": {
"type": "object",
"additionalProperties": {},
"description": "The ApexStock options object to validate."
}
},
"required": [
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexstock_get_reference(file)
Read authoritative ApexStock documentation from the bundled apexstock-skill knowledge base. Call with no arguments to list all available files. Call with `file` to return that file as markdown. Use this to look up the OHLC data format, indicators, streaming/appendData, trading overlays, theming, or framework integration.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Filename to read (e.g. \"SKILL.md\", \"indicators.md\"). Omit to list available files."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexmaps_generate_config(type, map, seriesName, data, joinBy, ...)
Build a minimal valid ApexMaps options object for a geographic visualization. Supports the six series types: choropleth (default), bubble, marker, arc, line, hexbin. Geometry comes from the built-in registry (e.g. "world/countries", "us", "eu/nuts2"), so no GeoJSON is needed. Generates a small placeholder dataset when data is omitted. Use the result with `new ApexMaps(el, options)` then `await map.render()`.
Input Schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"choropleth",
"bubble",
"marker",
"arc",
"line",
"hexbin"
],
"description": "Series type. Default \"choropleth\". \"hexbin\" bins points into a hex lattice (density); it takes points, never region-keyed rows."
},
"map": {
"type": "string",
"description": "Geometry registry pack id or alias: \"world/countries\", \"us\", \"us/counties\", \"eu/nuts2\", \"jp/prefectures\", ... Default \"world/countries\"."
},
"seriesName": {
"type": "string",
"description": "Series display name (legend / tooltip)."
},
"data": {
"type": "array",
"items": {},
"description": "Data array in the datum shape of `type`: choropleth rows `{ <key>, value }`, bubble/marker `{ lon, lat, ... }`, arc `{ from, to }`, line `{ path: [[lon,lat],...] }`, hexbin `{ lon, lat, value? }`. Omit for a placeholder dataset."
},
"joinBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"minItems": 2,
"maxItems": 2,
"items": [
{
"type": "string"
},
{
"type": "string"
}
]
},
{
"type": "object",
"additionalProperties": {
"type": "string"
}
}
],
"description": "Join spec: \"field\", [\"geoField\", \"dataField\"], or { geo, data }. Omit to use key auto-detection (the placeholder emits [\"iso_a3\", \"code\"])."
},
"palette": {
"type": "string",
"description": "Palette name for the value scale (e.g. \"blues\", \"viridis\", \"okabeIto\")."
},
"projection": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"additionalProperties": {}
}
],
"description": "Projection name or spec object. Omit to use the pack default (recommended: packs like \"us\" already pick albersUsa)."
},
"themeMode": {
"type": "string",
"enum": [
"light",
"dark",
"auto"
],
"description": "Theme mode."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexmaps_validate_config(config)
Check an ApexMaps options object against what the library does with it: geo.map present and a built-in map id (or a URL / inline geometry), hex layouts only where one exists, a frameable geo.view.fit, known series types, arc from/to endpoints, line paths, bubble/marker coordinates or something to join on, hexbin point positions and aggregates (a hexbin has no joinBy), [lon, lat] ordering, joinBy shape, null (not undefined) for missing values, and known scale / projection / palette names. Returns structured issues with stable rule ids, severity, path, and a fix when there is a one-shot remedy.
Input Schema
{
"type": "object",
"properties": {
"config": {
"type": "object",
"additionalProperties": {},
"description": "The ApexMaps options object to validate."
}
},
"required": [
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢apexmaps_get_reference(file)
Read authoritative ApexMaps documentation from the bundled apexmaps-skill knowledge base. Call with no arguments to list available files; call with `file` to fetch markdown. Use this for series datum shapes, joins, the geometry registry, projections, scales, drilldown, theming, or framework integration.
Input Schema
{
"type": "object",
"properties": {
"file": {
"type": "string",
"description": "Filename to read (e.g. \"SKILL.md\", \"data-format.md\"). Omit to list available files."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence