MCP server for rendering infographics using @antv/infographic.
npm install
npm run build# Run directly
node dist/index.js
# Or with npx
npx .node dist/index.js --http --port 3000node dist/index.js --sse --port 3000| Option | Description | Default |
|---|---|---|
--http |
Use Streamable HTTP transport | - |
--sse |
Use SSE transport | - |
--port <number> |
Server port (for HTTP/SSE) | 3000 |
--url=<url> |
Return image URL instead of base64 | - |
--output=<dir> |
Image output directory | ./images |
--token=<token> |
API token for authentication | - |
# Images saved to ./images/, return URL like http://localhost:3000/images/uuid.png
node dist/index.js --http --port 3000 --url=http://localhost:3000/images
# Custom output directory
node dist/index.js --http --port 3000 --url=http://example.com/img --output=./public/img# Enable token authentication
node dist/index.js --http --port 3000 --token=my-secret-tokenRequest with token:
# Via Authorization header (recommended)
curl -X POST http://localhost:3000/mcp \
-H "Authorization: Bearer my-secret-token" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0",...}'
# Via query parameter
curl "http://localhost:3000/sse?token=my-secret-token"Note: Static image files (
/images/*) are served without authentication.
{
"mcpServers": {
"infographic": {
"command": "node",
"args": ["/path/to/infographic-mcp/dist/index.js"]
}
}
}{
"mcpServers": {
"infographic": {
"command": "node",
"args": [
"/path/to/infographic-mcp/dist/index.js",
"--http",
"--port", "3000",
"--url=http://localhost:3000/images"
]
}
}
}{
"mcpServers": {
"infographic": {
"command": "npx",
"args": ["infographic-mcp"]
}
}
}Renders an infographic from DSL syntax and returns a PNG image.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
syntax |
string | Yes | - | Infographic DSL syntax string |
width |
number | No | 800 | Image width in pixels |
height |
number | No | 600 | Image height in pixels |
background |
string | No | "white" |
Background color ("white", "#f5f5f5", "transparent") |
- Default: PNG image as base64 (
type: "image") - With
--url: Image URL as text (type: "text")
The DSL uses space-separated key-value format (NOT YAML colon format):
infographic <template-name>
data
title My Title
desc My Description
items
- label Item 1
desc Description 1
value 100
icon mdi/icon-name
- label Item 2
desc Description 2
theme
palette #3b82f6 #8b5cf6 #f97316
infographic list-row-horizontal-icon-arrow
data
title Product Launch Steps
items
- label Step 1
desc Planning phase
icon mdi/rocket-launch
- label Step 2
desc Development phase
icon mdi/code-tags
- label Step 3
desc Launch phase
icon mdi/flag-checkered
list-row-horizontal-icon-arrowsequence-zigzag-steps-underline-textsequence-horizontal-zigzag-underline-textsequence-circular-simplecompare-binary-horizontal-simple-foldquadrant-quarter-simple-cardlist-grid-badge-cardchart-column-simplechart-bar-plain-textchart-pie-plain-textchart-pie-donut-plain-texthierarchy-tree-curved-line-rounded-rect-node- And ~200 more templates
See AntV Infographic Gallery for all templates.
docker-compose up -ddocker build -t infographic-mcp .# Stdio mode
docker run -i --rm infographic-mcp
# HTTP mode
docker run -p 3000:3000 --rm infographic-mcp --http --port 3000
# HTTP mode with URL
docker run -p 3000:3000 --rm infographic-mcp --http --port 3000 --url=http://localhost:3000/images{
"mcpServers": {
"infographic": {
"command": "docker",
"args": ["run", "-i", "--rm", "infographic-mcp"]
}
}
}# Development mode (stdio)
npm run dev
# Development mode (HTTP)
npm run dev:http
# Development mode (SSE)
npm run dev:sse
# Run tests
npm test
# Build
npm run buildMIT


