Plotly Server¶
Overview¶
The Plotly MCP Server provides advanced data visualization capabilities using Plotly for creating interactive charts and graphs. It supports multiple chart types, interactive HTML output, static export options, and flexible data input formats. The server is powered by FastMCP for enhanced type safety and automatic validation.
Key Features¶
- Multiple Chart Types: Scatter, line, bar, histogram, box, violin, pie, heatmap
- Interactive Output: HTML with full Plotly interactivity
- Static Export: PNG, SVG, PDF export capabilities
- Flexible Data Input: Support for various data formats and structures
- Customizable Themes: Multiple built-in themes and styling options
- FastMCP Implementation: Modern decorator-based tools with automatic validation
Quick Start¶
Prerequisites¶
Plotly and dependencies:
Installation¶
# Install in development mode with Plotly dependencies
make dev-install
# Or install normally and add dependencies
make install
pip install plotly pandas numpy kaleido
Running the Server¶
# Start the FastMCP server
make dev
# Or directly
python -m plotly_server.server_fastmcp
# HTTP bridge for REST API access
make serve-http
Available Tools¶
create_chart¶
Create charts with flexible configuration.
Parameters: - chart_type
(required): Chart type ("scatter", "line", "bar", "histogram", "box", "violin", "pie", "heatmap") - data
(required): Chart data (dictionary with x, y, etc.) - title
: Chart title - x_title
: X-axis title - y_title
: Y-axis title - output_format
: Output format ("html", "png", "svg", "pdf", "json") - default: "html" - output_file
: Path for output file - theme
: Plotly theme - default: "plotly" - width
: Chart width in pixels (100-2000, default: 800) - height
: Chart height in pixels (100-2000, default: 600)
create_scatter_plot¶
Specialized scatter plot creation.
Parameters: - x_data
(required): X-axis data points - y_data
(required): Y-axis data points - labels
: Point labels - colors
: Color values for points - sizes
: Size values for points - title
: Plot title - x_title
: X-axis title - y_title
: Y-axis title - output_format
: Output format - default: "html" - output_file
: Path for output file
create_bar_chart¶
Bar chart for categorical data.
Parameters: - categories
(required): Category names - values
(required): Values for each category - orientation
: Bar orientation ("vertical" or "horizontal") - default: "vertical" - title
: Chart title - output_format
: Output format - default: "html" - output_file
: Path for output file
create_line_chart¶
Line chart for time series data.
Parameters: - x_data
(required): X-axis data (typically dates/times) - y_data
(required): Y-axis data points - line_name
: Name for the line series - title
: Chart title - x_title
: X-axis title - y_title
: Y-axis title - output_format
: Output format - default: "html" - output_file
: Path for output file
get_supported_charts¶
List supported chart types and features.
Returns: - Available chart types - Supported output formats - Theme options - Feature capabilities
Configuration¶
MCP Client Configuration¶
{
"mcpServers": {
"plotly-server": {
"command": "python",
"args": ["-m", "plotly_server.server_fastmcp"],
"cwd": "/path/to/plotly_server"
}
}
}
Examples¶
Create Custom Scatter Plot¶
{
"chart_type": "scatter",
"data": {
"x": [1, 2, 3, 4, 5],
"y": [2, 4, 3, 5, 6]
},
"title": "Sample Scatter Plot",
"x_title": "X Axis",
"y_title": "Y Axis",
"output_format": "html",
"theme": "plotly_dark"
}
Create Advanced Scatter Plot¶
{
"x_data": [1.5, 2.3, 3.7, 4.1, 5.9],
"y_data": [2.1, 4.5, 3.2, 5.8, 6.3],
"labels": ["Point A", "Point B", "Point C", "Point D", "Point E"],
"colors": [1, 2, 3, 4, 5],
"sizes": [10, 15, 20, 25, 30],
"title": "Correlation Analysis",
"output_format": "png",
"output_file": "scatter.png"
}
Create Bar Chart¶
{
"categories": ["Q1", "Q2", "Q3", "Q4"],
"values": [45.2, 38.7, 52.1, 61.4],
"orientation": "vertical",
"title": "Quarterly Revenue",
"output_format": "svg"
}
Create Line Chart¶
{
"x_data": ["2024-01", "2024-02", "2024-03", "2024-04", "2024-05"],
"y_data": [100, 110, 105, 120, 115],
"line_name": "Monthly Sales",
"title": "Sales Trend",
"output_format": "html"
}
Create Pie Chart¶
{
"chart_type": "pie",
"data": {
"labels": ["Product A", "Product B", "Product C", "Product D"],
"values": [30, 25, 20, 25]
},
"title": "Market Share Distribution",
"output_format": "pdf"
}
Create Heatmap¶
{
"chart_type": "heatmap",
"data": {
"z": [[1, 20, 30], [20, 1, 60], [30, 60, 1]],
"x": ["Variable 1", "Variable 2", "Variable 3"],
"y": ["Variable 1", "Variable 2", "Variable 3"]
},
"title": "Correlation Matrix",
"output_format": "html"
}
Integration¶
With MCP Gateway¶
# Start the Plotly server via HTTP
make serve-http
# Register with MCP Gateway
curl -X POST http://localhost:8000/gateways \
-H "Content-Type: application/json" \
-d '{
"name": "plotly-server",
"url": "http://localhost:9000",
"description": "Interactive data visualization server using Plotly"
}'
Programmatic Usage¶
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def create_visualization():
server_params = StdioServerParameters(
command="python",
args=["-m", "plotly_server.server_fastmcp"]
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# Create a line chart
result = await session.call_tool("create_line_chart", {
"x_data": ["Jan", "Feb", "Mar", "Apr", "May"],
"y_data": [100, 120, 110, 140, 135],
"title": "Monthly Performance",
"line_name": "Sales"
})
# Create a scatter plot
scatter_result = await session.call_tool("create_scatter_plot", {
"x_data": [1, 2, 3, 4, 5],
"y_data": [2, 4, 3, 5, 6],
"title": "Data Points"
})
asyncio.run(create_visualization())
Chart Types and Use Cases¶
Scatter Plots¶
- Purpose: Correlation analysis, distribution patterns, outlier detection
- Best for: Continuous data relationships, regression analysis
- Features: Color coding, size mapping, trend lines
Line Charts¶
- Purpose: Time series data, trends over time, comparative analysis
- Best for: Sequential data, performance tracking, forecasting
- Features: Multiple series, annotations, hover information
Bar Charts¶
- Purpose: Categorical comparisons, ranking, distribution
- Best for: Discrete categories, survey results, performance metrics
- Features: Horizontal/vertical orientation, grouped bars, stacked bars
Histograms¶
- Purpose: Distribution analysis, frequency patterns, data exploration
- Best for: Understanding data spread, identifying patterns
- Features: Configurable bins, overlay distributions
Box Plots¶
- Purpose: Statistical distribution, outlier detection, comparative analysis
- Best for: Understanding quartiles, comparing groups
- Features: Quartile display, outlier identification, group comparisons
Violin Plots¶
- Purpose: Distribution shape, density visualization
- Best for: Detailed distribution analysis, comparing densities
- Features: Kernel density estimation, quartile overlays
Pie Charts¶
- Purpose: Part-to-whole relationships, percentage breakdowns
- Best for: Composition analysis, market share visualization
- Features: Interactive slicing, percentage labels
Heatmaps¶
- Purpose: Correlation matrices, 2D data visualization, pattern recognition
- Best for: Large datasets, correlation analysis, intensity mapping
- Features: Color scales, annotations, hierarchical clustering
Output Formats¶
Interactive HTML¶
- Features: Full Plotly interactivity, zoom, pan, hover
- Use cases: Web embedding, interactive reports, data exploration
- Benefits: No additional software required, responsive design
Static Images (PNG)¶
- Features: High-quality raster images
- Use cases: Documents, presentations, print materials
- Requirements: Kaleido package for export
Vector Graphics (SVG)¶
- Features: Scalable vector format, crisp at any size
- Use cases: Publication-quality graphics, web graphics
- Benefits: Small file size, infinite scalability
PDF Documents¶
- Features: Publication-ready format
- Use cases: Reports, academic papers, professional documents
- Benefits: Universal compatibility, print-ready
JSON Data¶
- Features: Plotly figure specification
- Use cases: Data interchange, custom processing, archival
- Benefits: Full configuration preservation, programmatic access
Themes and Styling¶
Available Themes¶
- plotly: Default Plotly theme
- plotly_white: Clean white background
- plotly_dark: Dark mode theme
- ggplot2: R ggplot2-inspired theme
- seaborn: Seaborn-inspired theme
- simple_white: Minimal white theme
Custom Styling¶
{
"chart_type": "scatter",
"data": {"x": [1, 2, 3], "y": [1, 4, 9]},
"title": "Custom Styled Chart",
"theme": "plotly_dark",
"width": 1200,
"height": 800
}
Advanced Features¶
Multi-Series Charts¶
# Create complex multi-series line chart
await session.call_tool("create_chart", {
"chart_type": "line",
"data": {
"x": ["Jan", "Feb", "Mar", "Apr", "May"],
"y1": [100, 120, 110, 140, 135], # Series 1
"y2": [80, 90, 95, 100, 105], # Series 2
"y3": [60, 70, 65, 80, 85] # Series 3
},
"title": "Multi-Series Performance Comparison"
})
Dashboard Creation¶
# Create multiple related charts for a dashboard
charts = [
{
"type": "bar",
"data": {"categories": ["A", "B", "C"], "values": [10, 20, 15]},
"title": "Category Performance"
},
{
"type": "pie",
"data": {"labels": ["X", "Y", "Z"], "values": [30, 40, 30]},
"title": "Distribution"
},
{
"type": "line",
"data": {"x": [1, 2, 3, 4], "y": [1, 4, 2, 5]},
"title": "Trend Analysis"
}
]
for i, chart_config in enumerate(charts):
await session.call_tool("create_chart", {
**chart_config,
"output_file": f"dashboard_chart_{i}.html"
})
Statistical Visualizations¶
# Create box plot for statistical analysis
await session.call_tool("create_chart", {
"chart_type": "box",
"data": {
"y": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15], # Data with outlier
"name": "Dataset A"
},
"title": "Statistical Distribution Analysis"
})
# Create violin plot for distribution comparison
await session.call_tool("create_chart", {
"chart_type": "violin",
"data": {
"y": [1, 2, 2, 3, 3, 3, 4, 4, 5],
"name": "Distribution Shape"
},
"title": "Distribution Density Analysis"
})
Use Cases¶
Business Intelligence¶
- Sales performance dashboards
- Financial reporting charts
- KPI tracking visualizations
Scientific Research¶
- Experimental data analysis
- Statistical distributions
- Correlation studies
Data Exploration¶
- Dataset profiling
- Outlier detection
- Pattern recognition
Reporting and Presentations¶
- Executive summaries
- Progress reports
- Comparative analysis
Web Applications¶
- Interactive dashboards
- Real-time monitoring
- User analytics
Performance Considerations¶
- Plotly must be installed for chart generation
- Kaleido is required for static image export (PNG, SVG, PDF)
- HTML output includes the full Plotly library for offline viewing
- Large datasets may impact performance for complex chart types
- Interactive features work best in HTML format
Error Handling¶
The server provides comprehensive error handling for:
- Missing Dependencies: Clear guidance for installing Plotly and Kaleido
- Data Format Errors: Validation of input data structures
- Chart Type Validation: Ensuring valid chart type and parameter combinations
- Export Failures: Handling issues with static image generation
- Resource Limits: Managing large datasets and memory constraints