# π ChartSmith MCP Server
**A high-performance chart generation MCP server** β built for speed, powered by AI, production-ready.
[](https://modelcontextprotocol.io/)
[](./benchmarks/)
[](./docs/chart-types.md)
[](./docs/engines.md)
> π **First-ever comprehensive chart generation MCP server** - Turn your SQL results into stunning visualizations with zero configuration and maximum performance.
## π― **Why ChartGenius?**
### **π‘ Inspired by Industry Leaders**
- **Hex.tech's $70M success** proves chart generation is core business infrastructure
- **Built to solve real bottlenecks** like O(nΒ²) algorithms and blocking operations
- **MCP-native design** for seamless integration with any client
### **β‘ Performance First**
- Optimized O(n) data paths
- Concurrent rendering with guardrails (timeouts, semaphores, input caps)
- Intelligent caching (memory/Redis)
### **π§ AI-Powered Intelligence**
- **Smart chart type detection** based on data patterns
- **Natural language to visualization** conversion
- **Automatic insight generation** for business intelligence
- **Accessibility optimization** for WCAG compliance
## π **Quick Start**
### **Installation**
```bash
pip install chart-genius-mcp # package name remains; server id: chartsmith
```
### **Docker Quick Start**
```bash
docker build -t chartsmith-mcp .
docker run --rm -it chartsmith-mcp # stdio
docker run --rm -it -p 8000:8000 -e RUN_HTTP=1 chartsmith-mcp # http
```
Using docker-compose:
```bash
docker compose up -d mcp-stdio
docker compose up -d mcp-http
```
## π Transports
- Stdio (MCP stdio)
- HTTP JSON (`POST /mcp`) and SSE (`POST /sse`)
- Health: `/health`, Readiness: `/ready`, Metrics: `/metrics`
## βοΈ Environment
- `CHART_MAX_CONCURRENCY` (default 8)
- `CHART_TOOL_TIMEOUT_MS` (default 60000)
- `CHART_TOOL_TIMEOUT_MS_IMAGES` (image timeouts)
- `CHART_TOOL_TIMEOUT_MS_HEAVY` (batch/dashboard)
- `CHART_MAX_ROWS` (input size guard)
- `DISABLED_TOOLS` (comma-separated)
- AI: `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`, `CHART_AI_PROVIDER`
## π§° Tools
- Per-chart: bar, line, scatter, histogram, area, box, violin, bubble, pie, heatmap, treemap, sunburst, sankey, choropleth
- Full-auto: `generate_chart_auto`
- Deprecated: `generate_chart`
- Cache: `manage_cache` (stats/clear/optimize)
- Perf: `get_performance_stats`
- Prompts/Resources: `list_prompts`/`get_prompt`, `list_resource_templates`/`read_resource`
## π¦ Resources
- Datasets: `dataset:sample/sales_small`, `.../scatter_small`, `.../heatmap_pivot`, `.../choropleth_iso3`
- Themes: `theme:modern`, `theme:corporate`, `theme:dark`, `theme:accessible`
## π§ͺ Tests & Benchmarks
- Pytest suite: tools, engines, formats, AI (mock/live), cache, guardrails, MCP stdio/HTTP
- Benchmark harness: p50/p90 latency script and smoke tests
## π Prometheus Metrics
- Endpoint: `/metrics` (Prometheus exposition format)
- Metrics include: request counts, tool call totals, tool errors, and duration histograms.
- Example scrape config:
```yaml
scrape_configs:
- job_name: chartsmith
static_configs:
- targets: ['localhost:8000']
```
## π Security & Limits
- Input size caps, timeouts, concurrency limits
- Tool filtering via env
## π§ Smithery
- Stdio: configure Smithery to invoke `python -m chart_genius_mcp` with server id `chartsmith`
- HTTP: point Smithery at the containerβs `/mcp` endpoint (port 8000)
## π¦ Docker Images (CI)
- GitHub Action builds and publishes multi-arch images to GHCR on tags `v*`.
- Image: `ghcr.io/<owner>/<repo>:<tag>` and `:latest`.
- Example pull:
```bash
docker pull ghcr.io/<owner>/<repo>:latest
```
Raw data
{
"_id": null,
"home_page": null,
"name": "chart-genius-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "ai, charts, dashboard, data-analysis, matplotlib, mcp, performance, plotly, visualization",
"author": null,
"author_email": "ChartGenius Team <team@chart-genius.com>",
"download_url": "https://files.pythonhosted.org/packages/81/cf/13d4599e46806baf34d78c82b6ca394720843b00e77edf1649fa861eef2d/chart_genius_mcp-1.0.2.tar.gz",
"platform": null,
"description": "# \ud83d\udcca ChartSmith MCP Server\n\n**A high-performance chart generation MCP server** \u2014 built for speed, powered by AI, production-ready.\n\n[](https://modelcontextprotocol.io/)\n[](./benchmarks/)\n[](./docs/chart-types.md)\n[](./docs/engines.md)\n\n> \ud83d\ude80 **First-ever comprehensive chart generation MCP server** - Turn your SQL results into stunning visualizations with zero configuration and maximum performance.\n\n## \ud83c\udfaf **Why ChartGenius?**\n\n### **\ud83d\udca1 Inspired by Industry Leaders**\n- **Hex.tech's $70M success** proves chart generation is core business infrastructure\n- **Built to solve real bottlenecks** like O(n\u00b2) algorithms and blocking operations\n- **MCP-native design** for seamless integration with any client\n\n### **\u26a1 Performance First**\n- Optimized O(n) data paths\n- Concurrent rendering with guardrails (timeouts, semaphores, input caps)\n- Intelligent caching (memory/Redis)\n\n### **\ud83e\udde0 AI-Powered Intelligence**\n- **Smart chart type detection** based on data patterns\n- **Natural language to visualization** conversion\n- **Automatic insight generation** for business intelligence\n- **Accessibility optimization** for WCAG compliance\n\n## \ud83d\ude80 **Quick Start**\n\n### **Installation**\n```bash\npip install chart-genius-mcp # package name remains; server id: chartsmith\n```\n\n### **Docker Quick Start**\n```bash\ndocker build -t chartsmith-mcp .\ndocker run --rm -it chartsmith-mcp # stdio\ndocker run --rm -it -p 8000:8000 -e RUN_HTTP=1 chartsmith-mcp # http\n```\n\nUsing docker-compose:\n```bash\ndocker compose up -d mcp-stdio\ndocker compose up -d mcp-http\n```\n\n## \ud83d\udd0c Transports\n- Stdio (MCP stdio)\n- HTTP JSON (`POST /mcp`) and SSE (`POST /sse`)\n- Health: `/health`, Readiness: `/ready`, Metrics: `/metrics`\n\n## \u2699\ufe0f Environment\n- `CHART_MAX_CONCURRENCY` (default 8)\n- `CHART_TOOL_TIMEOUT_MS` (default 60000)\n- `CHART_TOOL_TIMEOUT_MS_IMAGES` (image timeouts)\n- `CHART_TOOL_TIMEOUT_MS_HEAVY` (batch/dashboard)\n- `CHART_MAX_ROWS` (input size guard)\n- `DISABLED_TOOLS` (comma-separated)\n- AI: `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`, `CHART_AI_PROVIDER`\n\n## \ud83e\uddf0 Tools\n- Per-chart: bar, line, scatter, histogram, area, box, violin, bubble, pie, heatmap, treemap, sunburst, sankey, choropleth\n- Full-auto: `generate_chart_auto`\n- Deprecated: `generate_chart`\n- Cache: `manage_cache` (stats/clear/optimize)\n- Perf: `get_performance_stats`\n- Prompts/Resources: `list_prompts`/`get_prompt`, `list_resource_templates`/`read_resource`\n\n## \ud83d\udce6 Resources\n- Datasets: `dataset:sample/sales_small`, `.../scatter_small`, `.../heatmap_pivot`, `.../choropleth_iso3`\n- Themes: `theme:modern`, `theme:corporate`, `theme:dark`, `theme:accessible`\n\n## \ud83e\uddea Tests & Benchmarks\n- Pytest suite: tools, engines, formats, AI (mock/live), cache, guardrails, MCP stdio/HTTP\n- Benchmark harness: p50/p90 latency script and smoke tests\n\n## \ud83d\udcc8 Prometheus Metrics\n- Endpoint: `/metrics` (Prometheus exposition format)\n- Metrics include: request counts, tool call totals, tool errors, and duration histograms.\n- Example scrape config:\n```yaml\nscrape_configs:\n - job_name: chartsmith\n static_configs:\n - targets: ['localhost:8000']\n```\n\n## \ud83d\udd10 Security & Limits\n- Input size caps, timeouts, concurrency limits\n- Tool filtering via env\n\n## \ud83e\udded Smithery\n- Stdio: configure Smithery to invoke `python -m chart_genius_mcp` with server id `chartsmith`\n- HTTP: point Smithery at the container\u2019s `/mcp` endpoint (port 8000)\n\n## \ud83d\udce6 Docker Images (CI)\n- GitHub Action builds and publishes multi-arch images to GHCR on tags `v*`.\n- Image: `ghcr.io/<owner>/<repo>:<tag>` and `:latest`.\n- Example pull:\n```bash\ndocker pull ghcr.io/<owner>/<repo>:latest\n``` ",
"bugtrack_url": null,
"license": null,
"summary": "The Ultimate Chart Generation MCP Server - Built for Performance, Powered by AI",
"version": "1.0.2",
"project_urls": {
"Bug Reports": "https://github.com/your-org/chart-genius-mcp/issues",
"Documentation": "https://chart-genius.readthedocs.io",
"Feature Requests": "https://github.com/your-org/chart-genius-mcp/discussions",
"Homepage": "https://github.com/your-org/chart-genius-mcp",
"Repository": "https://github.com/your-org/chart-genius-mcp"
},
"split_keywords": [
"ai",
" charts",
" dashboard",
" data-analysis",
" matplotlib",
" mcp",
" performance",
" plotly",
" visualization"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "b36ce9200b4e506961e5a073a6ef5f50a0732d3a75911cd0e9001d52ca4fe70d",
"md5": "f28ed96546db2964eff582162f714265",
"sha256": "c44ccaecdbb8d5f392a6ef69329069255bc881e6e546f9468f531e7bcee41bb3"
},
"downloads": -1,
"filename": "chart_genius_mcp-1.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f28ed96546db2964eff582162f714265",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 70651,
"upload_time": "2025-08-08T19:59:36",
"upload_time_iso_8601": "2025-08-08T19:59:36.982825Z",
"url": "https://files.pythonhosted.org/packages/b3/6c/e9200b4e506961e5a073a6ef5f50a0732d3a75911cd0e9001d52ca4fe70d/chart_genius_mcp-1.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "81cf13d4599e46806baf34d78c82b6ca394720843b00e77edf1649fa861eef2d",
"md5": "b36b2c82a9820b3f86ef0f7a64150972",
"sha256": "cf8728f047280322e8495c7ea6d9e82f550bb1a7e6d7f400c4e8714c620b5a33"
},
"downloads": -1,
"filename": "chart_genius_mcp-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "b36b2c82a9820b3f86ef0f7a64150972",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 82480,
"upload_time": "2025-08-08T19:59:38",
"upload_time_iso_8601": "2025-08-08T19:59:38.073177Z",
"url": "https://files.pythonhosted.org/packages/81/cf/13d4599e46806baf34d78c82b6ca394720843b00e77edf1649fa861eef2d/chart_genius_mcp-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-08 19:59:38",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "your-org",
"github_project": "chart-genius-mcp",
"github_not_found": true,
"lcname": "chart-genius-mcp"
}