mcp-plots
MCP server for data visualization with Mermaid charts.
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"mcp-plots": {
"args": [
"mcp-plots@0.0.2"
],
"command": "uvx"
}
}
}
可用工具 (5 个)
该服务在 MCP 协议中暴露的工具,AI 可按需调用
tavily_search 14 个参数 需填 1 项
Search the web for current information on any topic. Use for news, facts, or data beyond your knowledge cutoff. Returns snippets and source URLs.
必填参数:query
tavily_extract 6 个参数 需填 1 项
Extract content from URLs. Returns raw page content in markdown or text format.
必填参数:urls
tavily_crawl 11 个参数 需填 1 项
Crawl a website starting from a URL. Extracts content from pages with configurable depth and breadth.
必填参数:url
tavily_map 8 个参数 需填 1 项
Map a website's structure. Returns a list of URLs found starting from the base URL.
必填参数:url
tavily_research 2 个参数 需填 1 项
Perform comprehensive research on a given topic or question. Use this tool when you need to gather information from multiple sources to answer a question or complete a task. Returns a detailed response based on the research findings.
必填参数:input
服务介绍
<!- - mcp-name: io.github.MR901/mcp-plots - ->
# Why MCP Plots?
- Instant, visual-first charts using Mermaid (renders directly in MCP clients like Cursor)
- Simple prompts to generate charts from plain data
- Zero-setup options via uvx, or install from PyPI/Docker
- Flexible output formats: mermaid (default), PNG image, or text
# Quick Usage
- Ask your MCP client: "Create a bar chart showing sales: A=100, B=150, C=80"
- Default output is Mermaid, so diagrams render instantly in Cursor
# Quick Start
# # PyPI Installation (Recommended)
pip install mcp-plots
mcp-plots # Start the server
# # For Cursor Users
- Install the package:
pip install mcp-plots - Add to your Cursor MCP config (
~/.cursor/mcp.json):
Alternative (zero-install via uvx + PyPI):{ "mcpServers": { "plots": { "command": "mcp-plots", "args": ["- -transport", "stdio"] } } }{ "mcpServers": { "plots": { "command": "uvx", "args": ["mcp-plots", "- -transport", "stdio"] } } } - Restart Cursor
- Ask: "Create a bar chart showing sales: A=100, B=150, C=80"
# # Development Installation
uvx - -from git+https://github.com/mr901/mcp-plots.git run-server.py
Documentation → | Quick Start → | API Reference →
# MCP Registry
This server is published under the MCP registry identifier io.github.MR901/mcp-plots. You can discover/verify it via the official registry API:
curl "https://registry.modelcontextprotocol.io/v0/servers?search=io.github.MR901/mcp-plots"
Registry metadata for this project is tracked in server.json.
# Install with Smithery
This repository includes a smithery.yaml for easy setup with Smithery.
- File:
smithery.yaml - Docs: https://smithery.ai/docs/config# smitheryyaml
Example install using the Smithery CLI (adjust - -client as needed, e.g. cursor, claude):
npx -y @smithery/cli install \
https://raw.githubusercontent.com/mr901/mcp-plots/main/smithery.yaml \
- -client cursor
After installation, your MCP client should be able to start the server over stdio using the command defined in smithery.yaml.
# Project layout
src/
app/ # Server construction and runtime
server.py
capabilities/ # MCP tools and prompts
tools.py
prompts.py
visualization/ # Plotting engines and configurations
chart_config.py
generator.py
# Requirements
- Python 3.10+
- See
requirements.txt
# Setup Routes
# # uvx (Recommended)
The easiest way to run the MCP server without managing Python environments:
# Run directly with uvx (no installation needed)
uvx - -from git+https://github.com/mr901/mcp-plots.git run-server.py
# Or install and run the command
uvx - -from git+https://github.com/mr901/mcp-plots.git mcp-plots
# With custom options
uvx - -from git+https://github.com/mr901/mcp-plots.git mcp-plots - -port 8080 - -log-level DEBUG
Why uvx?
- No Environment Management: Automatically handles Python dependencies
- Isolated Execution: Runs in its own virtual environment
- Always Latest: Pulls fresh code from repository
- Zero Setup: Works immediately without pip install
- Cross-Platform: Same command works on Windows, macOS, Linux
# # PyPI (Traditional Installation)
- Install dependencies
pip install -r requirements.txt
- Run the server (HTTP transport, default port 8000)
python -m src - -transport streamable-http - -host 0.0.0.0 - -port 8000 - -log-level INFO
- Run with stdio (for MCP clients that spawn processes)
python -m src - -transport stdio
# # Local Development (from source)
git clone https://github.com/mr901/mcp-plots.git
cd mcp-plots
pip install -e .
python -m src - -transport stdio - -log-level DEBUG
# # Docker
docker build -t mcp-plots .
docker run -p 8000:8000 mcp-plots
Environment variables (optional):
MCP_TRANSPORT(streamable-http|stdio)MCP_HOST(default 0.0.0.0)MCP_PORT(default 8000)LOG_LEVEL(default INFO)
# Tools
list_chart_types()→ returns available chart typeslist_themes()→ returns available themessuggest_fields(sample_rows)→ suggests field roles based on data samplesrender_chart(chart_type, data, field_map, config_overrides?, options?, output_format?)→ returns MCP contentgenerate_test_image()→ generates a test image (red circle) to verify MCP image support
# # Cursor Integration
This MCP server is fully compatible with Cursor's image support! When you use the render_chart tool:
- Charts appear directly in chat - No need to save files or open separate windows
- AI can analyze your charts - Vision-enabled models can discuss and interpret your visualizations
- Perfect MCP format - Uses the exact base64 PNG format that Cursor expects
The server returns images in the MCP format Cursor requires:
{
"content": [
{
"type": "image",
"data": "<base64-encoded-png>",
"mimeType": "image/png"
}
]
}
Example call (pseudo):
render_chart(
chart_type="bar",
data=[{"category":"A","value":10},{"category":"B","value":20}],
field_map={"category_field":"category","value_field":"value"},
config_overrides={"title":"Example Bar","width":800,"height":600,"output_format":"MCP_IMAGE"}
)
Return shape (PNG):
{
"status": "success",
"content": [{"type":"image","data":"<base64>","mimeType":"image/png"}]
}
# Configuration
The server can be configured via environment variables or command line arguments:
# # Server Settings
MCP_TRANSPORT- Transport type:streamable-httporstdio(default:streamable-http)MCP_HOST- Host address (default:0.0.0.0)MCP_PORT- Port number (default:8000)LOG_LEVEL- Logging level:DEBUG,INFO,WARNING,ERROR,CRITICAL(default:INFO)MCP_DEBUG- Enable debug mode:trueorfalse(default:false)
# # Chart Settings
CHART_DEFAULT_WIDTH- Default chart width in pixels (default:800)CHART_DEFAULT_HEIGHT- Default chart height in pixels (default:600)CHART_DEFAULT_DPI- Default chart DPI (default:100)CHART_MAX_DATA_POINTS- Maximum data points per chart (default:10000)
# # Command Line Usage
With uvx (recommended):
uvx - -from git+https://github.com/mr901/mcp-plots.git mcp-plots - -help
# Examples:
uvx - -from git+https://github.com/mr901/mcp-plots.git mcp-plots - -port 8080 - -log-level DEBUG
uvx - -from git+https://github.com/mr901/mcp-plots.git mcp-plots - -chart-width 1200 - -chart-height 800
Traditional Python:
python -m src - -help
# Examples:
python -m src - -transport streamable-http - -host 0.0.0.0 - -port 8000
python -m src - -log-level DEBUG - -chart-width 1200 - -chart-height 800
# Docker
Build image:
docker build -t mcp-plots .
Run container with custom configuration:
docker run - -rm -p 8000:8000 \
-e MCP_TRANSPORT=streamable-http \
-e MCP_HOST=0.0.0.0 \
-e MCP_PORT=8000 \
-e LOG_LEVEL=INFO \
-e CHART_DEFAULT_WIDTH=1000 \
-e CHART_DEFAULT_HEIGHT=700 \
-e CHART_DEFAULT_DPI=150 \
-e CHART_MAX_DATA_POINTS=5000 \
mcp-plots
# Cursor MCP Integration
# # Quick Setup for Cursor
The Plots MCP Server is designed to work seamlessly with Cursor's MCP support. Here's how to integrate it:
# # # 1. Add to Cursor's MCP Configuration
Add this to your Cursor MCP configuration file (~/.cursor/mcp.json or similar):
{
"mcpServers": {
"plots": {
"command": "uvx",
"args": [
"- -from",
"git+https://github.com/mr901/mcp-plots.git@main",
"mcp-plots",
"- -transport",
"stdio"
],
"env": {
"LOG_LEVEL": "INFO",
"CHART_DEFAULT_WIDTH": "800",
"CHART_DEFAULT_HEIGHT": "600"
}
}
}
}
# # # 2. Alternative: HTTP Transport
For HTTP-based integration:
{
"mcpServers": {
"plots-http": {
"command": "uvx",
"args": [
"- -from",
"git+https://github.com/mr901/mcp-plots.git@main",
"mcp-plots",
"- -transport",
"streamable-http",
"- -host",
"127.0.0.1",
"- -port",
"8000"
]
}
}
}
# # # 3. Local Development Setup
For local development (if you have the code cloned):
{
"mcpServers": {
"plots-dev": {
"command": "python",
"args": ["-m", "src", "- -transport", "stdio"],
"cwd": "/path/to/mcp-plots",
"env": {
"LOG_LEVEL": "DEBUG"
}
}
}
}
# # # 4. Verify Integration
After adding the configuration:
- Restart Cursor
- Check MCP connection in Cursor's MCP panel
- Test with a simple chart:
Create a bar chart showing sales data: A=100, B=150, C=80
# # MERMAID-First Approach
This server prioritizes MERMAID output by default because:
- ✅ Renders instantly in Cursor - No external viewers needed
- ✅ Interactive - Cursor can analyze and discuss the diagrams
- ✅ Lightweight - Fast generation and display
- ✅ Scalable - Vector-based, works at any zoom level
Chart Types with Native MERMAID Support:
line,bar,pie,area→xychart-betaformathistogram→xychart-betawith automatic binningfunnel→ Styled flowchart with color gradientsgauge→ Flowchart with color-coded value indicatorssankey→ Flow diagrams with source/target styling
# Available Tools
# # render_chart
Main chart generation tool with MERMAID-first approach.
Parameters:
chart_type- Chart type (line,bar,pie,scatter,heatmap, etc.)data- List of data objectsfield_map- Field mappings (x_field,y_field,category_field, etc.)config_overrides- Chart configuration overridesoutput_format- Output format (mermaid[default],mcp_image,mcp_text)
Special Modes:
chart_type="help"- Show available chart types and themeschart_type="suggest"- Analyze data and suggest field mappings
# # configure_preferences
Interactive configuration tool for setting user preferences.
Parameters:
output_format- Default output format (mermaid,mcp_image,mcp_text)theme- Default theme (default,dark,seaborn,minimal)chart_width- Default chart width in pixelschart_height- Default chart height in pixelsreset_to_defaults- Reset all preferences to system defaults
Features:
- Persistent Settings - Saved to
~/.plots_mcp_config.json - Live Preview - Shows sample chart with current settings
- Override Support - Use
config_overridesfor one-off changes
# Documentation
# # Additional Resources
- Complete Documentation - Technical documentation hub
- Quick Start - 5-minute setup guide
- Integration Guide - MCP client setup and configuration
- API Reference - Complete tool specifications and examples
- Advanced Guide - Architecture, deployment, and development
- Sample Prompts - Ready-to-use testing examples
# # Chart Examples
Basic Bar Chart:
{
"chart_type": "bar",
"data": [
{"category": "Sales", "value": 120},
{"category": "Marketing", "value": 80},
{"category": "Support", "value": 60}
],
"field_map": {
"category_field": "category",
"value_field": "value"
}
}
Time Series Line Chart:
{
"chart_type": "line",
"data": [
{"date": "2024-01", "revenue": 1000},
{"date": "2024-02", "revenue": 1200},
{"date": "2024-03", "revenue": 1100}
],
"field_map": {
"x_field": "date",
"y_field": "revenue"
}
}
Funnel Chart:
{
"chart_type": "funnel",
"data": [
{"stage": "Awareness", "value": 1000},
{"stage": "Interest", "value": 500},
{"stage": "Purchase", "value": 100}
],
"field_map": {
"category_field": "stage",
"value_field": "value"
}
}
# 🔧 Configuration
# # Environment Variables
MCP_TRANSPORT- Transport type (streamable-http|stdio)MCP_HOST- Host address (default:0.0.0.0)MCP_PORT- Port number (default:8000)LOG_LEVEL- Logging level (default:INFO)MCP_DEBUG- Enable debug mode (true|false)CHART_DEFAULT_WIDTH- Default chart width in pixels (default:800)CHART_DEFAULT_HEIGHT- Default chart height in pixels (default:600)CHART_DEFAULT_DPI- Default chart DPI (default:100)CHART_MAX_DATA_POINTS- Maximum data points per chart (default:10000)
# # User Preferences
Personal preferences are stored in ~/.plots_mcp_config.json:
{
"defaults": {
"output_format": "mermaid",
"theme": "default",
"chart_width": 800,
"chart_height": 600
},
"user_preferences": {
"output_format": "mcp_image",
"theme": "dark"
}
}
# 🚀 Advanced Usage
# # Custom Themes
Available themes: default, dark, seaborn, minimal, whitegrid, darkgrid, ticks
# # High-Resolution Charts
uvx - -from git+https://github.com/mr901/mcp-plots.git mcp-plots \
- -chart-width 1920 \
- -chart-height 1080 \
- -chart-dpi 300
# # Performance Optimization
- Use
max_data_pointsto limit large datasets - MERMAID output is fastest for quick visualization
- PNG output for high-quality static images
- SVG output for scalable vector graphics
# 🐛 Troubleshooting
# # Common Issues
Issue: Charts not rendering in Cursor
- Solution: Ensure
output_format="mermaid"(default) - Check: MCP server connection in Cursor
Issue: uvx command not found
- Solution: Install uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
Issue: Port already in use
- Solution: Use different port:
- -port 8001
Issue: Large datasets slow
- Solution: Sample data or increase
- -max-data-points
# # Debug Mode
uvx - -from git+https://github.com/mr901/mcp-plots.git mcp-plots \
- -debug \
- -log-level DEBUG
# 📝 Notes
- Matplotlib runs headless (Agg backend) in the container
- For large datasets, sample your data for responsiveness
- Chart defaults can be overridden per-request via
config_overrides - MERMAID charts render instantly in Cursor for the best user experience
- User preferences persist across sessions and apply to all charts by default