ML Research MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ML Research MCPGenerate a publication-quality heatmap from the correlation matrix in results.csv"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ML Research MCP
A comprehensive Model Context Protocol (MCP) server providing research productivity tools for machine learning researchers and developers.
Overview
ML Research MCP is an extensible platform that provides AI assistants with powerful tools for scientific research workflows. Built on the Model Context Protocol, it enables seamless integration with AI applications like Claude Desktop to automate and enhance various research tasks.
Current Status: Phase 1 - Data Visualization Roadmap: Image generation, presentation tools, literature management, and more
Related MCP server: origin-MCP
Vision & Roadmap
This project aims to be a comprehensive research assistant covering the entire ML research lifecycle:
ā Phase 1: Data Visualization (Current)
Scientific plotting with publication-quality output
Statistical analysis visualizations
2D data representations (heatmaps, contours)
Multiple export formats (PNG, PDF, SVG)
š§ Phase 2: Image & Figure Generation (Planned)
AI-powered figure generation using diffusion models
Diagram creation for architecture illustrations
Chart enhancement with intelligent styling
Multi-panel figure composition
š§ Phase 3: Presentation Tools (Planned)
Slide generation from research content
Poster creation for conferences
Automated layout optimization
Template management for institutional branding
š§ Phase 4: Research Management (Future)
Literature search and summarization
Citation management and formatting
Experiment tracking and versioning
Collaboration tools for team projects
Current Features (Phase 1)
Data Visualization Tools
Basic Plots
plot_line- Time series and continuous data visualizationplot_scatter- Multi-dimensional scatter plots with size/color mappingplot_bar- Categorical comparisons (vertical/horizontal)
Statistical Visualizations
plot_histogram- Distribution analysis with density estimationplot_box- Statistical summaries and outlier detectionplot_violin- Detailed distribution shapes with KDE
2D Representations
plot_heatmap- Matrix visualization with annotationsplot_contour- 3D data in 2D with contour linesplot_pcolormesh- Fast pseudocolor plots for large datasets
Technical Highlights
Publication-quality output via UltraPlot
High-performance data handling with Polars
Flexible input from CSV, JSON files or direct data
Vector & raster formats (PDF, SVG, PNG)
Type-safe with comprehensive validation
Well-tested with 48 passing tests
Requirements
Python 3.12+
uv package manager
MCP-compatible client (Claude Desktop, VSCode, etc.)
Installation
Quick Start with Claude Code
Add the server to Claude Code with a single command:
claude mcp add-json "ml-research" \
'{"command":"uvx","args":["--from","git+https://github.com/nishide-dev/ml-research-mcp","ml-research-mcp"]}'Verify installation:
claude mcp listManual Installation for MCP Clients
Add to your MCP client configuration (e.g., ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"ml-research": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/nishide-dev/ml-research-mcp",
"ml-research-mcp"
]
}
}
}Direct Execution with uvx
Run the server directly without installation:
# From GitHub (recommended)
uvx --from "git+https://github.com/nishide-dev/ml-research-mcp" ml-research-mcp
# From local directory (for development)
cd /path/to/ml-research-mcp
uvx --from . ml-research-mcpFor Developers
Clone and set up development environment:
git clone https://github.com/nishide-dev/ml-research-mcp.git
cd ml-research-mcp
uv sync
# Run in development mode
uv run ml-research-mcpQuick Start
Using with Claude Desktop
After installation, you can ask Claude:
"Create a line plot showing temperature over time from experiment.csv"
"Generate a heatmap of the correlation matrix and save as PDF"
"Plot a scatter chart with x=[1,2,3,4], y=[2,4,6,8], sized by [10,20,30,40]"
Using as a Library
from ml_research_mcp.tools.plot_basic import plot_line
# Generate publication-quality plot
image = plot_line(
x=[1, 2, 3, 4, 5],
y=[1, 4, 9, 16, 25],
style={"title": "Quadratic Function", "xlabel": "X", "ylabel": "Y²"},
output={"format": "pdf", "width": 20, "height": 15, "dpi": 300}
)
# Save to file
with open("plot.pdf", "wb") as f:
f.write(image)Example Gallery
Real examples generated with ML Research MCP:
Query | Result |
Line Plot"Create a line plot showing temperature over time with x=[1,2,3,4,5,6] and y=[2,4,3,5,6,7]" | |
Scatter Plot"Make a scatter plot with color and size mapping using plasma colormap" | |
Bar Chart"Generate a bar chart comparing performance across categories A through E" | |
Histogram"Create a histogram with density normalization for distribution analysis" | |
Violin Plot"Make a violin plot comparing Control vs Treatment groups" | |
Heatmap"Generate an annotated correlation matrix heatmap using RdBu colormap" |
All plots generated with publication-quality settings (150 DPI, customizable dimensions).
Documentation
Visualization Tools (Phase 1)
plot_line
plot_line(
x: str | list[float],
y: str | list[float],
data_input: dict | None = None,
style: dict | None = None,
output: dict | None = None
) -> Image | bytesParameters:
x,y: Column names (if using file) or data arraysdata_input:{"file_path": "data.csv"}or{"data": {...}}style:{"title": "...", "xlabel": "...", "ylabel": "...", "grid": true}output:{"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
plot_scatter
Additional parameters:
size: Point sizes (column name, array, or constant)color: Point colors (column name or array)
plot_bar
Additional parameters:
orientation:"vertical"or"horizontal"
plot_histogram
plot_histogram(
data: str | list[float],
bins: int = 30,
density: bool = False,
...
)plot_box
plot_box(
data: str | list[list[float]],
labels: list[str] | None = None,
...
)plot_violin
Similar to plot_box with kernel density estimation.
plot_heatmap
plot_heatmap(
data: str | list[list[float]],
x_labels: list[str] | None = None,
y_labels: list[str] | None = None,
annotate: bool = False,
...
)plot_contour
plot_contour(
x: str | list[float],
y: str | list[float],
z: str | list[list[float]],
levels: int = 10,
filled: bool = True,
...
)plot_pcolormesh
Fast alternative to contour plots with shading options.
Future Tools (Planned)
Documentation will be added as features are implemented.
Development
Project Structure
ml-research-mcp/
āāā src/ml_research_mcp/
ā āāā server.py # MCP server entry point
ā āāā data/ # Data I/O modules
ā āāā plotting/ # Phase 1: Visualization
ā āāā tools/ # MCP tool definitions
ā ā āāā plot_basic.py
ā ā āāā plot_statistical.py
ā ā āāā plot_2d.py
ā āāā generation/ # Phase 2: Image generation (planned)
ā āāā presentation/ # Phase 3: Slides/posters (planned)
ā āāā research/ # Phase 4: Research tools (planned)
āāā tests/ # Comprehensive test suite
āāā docs/ # Extended documentation (planned)Running the Server
# Development mode
uv run ml-research-mcp
# Or as module
uv run python -m ml_research_mcp.serverTesting
# All tests (48 tests, 100% pass rate)
uv run pytest
# With coverage report
uv run pytest --cov=src --cov-report=html
# Specific test suite
uv run pytest tests/test_plot_basic.py -vCode Quality
# Format code
uv run ruff format .
# Lint and type check
uv run ruff check .
uv run ty checkAdding Dependencies
uv add <package> # Runtime dependency
uv add --dev <package> # Development dependency
uv lock --upgrade # Update lockfileArchitecture
Current Design (Phase 1)
Input Data (CSV/JSON/Array)
ā
Polars DataFrame Processing
ā
UltraPlot Rendering
ā
Output (PIL Image / bytes)Future Architecture
The platform is designed to be modular, with each research tool category as a separate module:
Data Module: Unified data loading (Polars-based)
Visualization Module: Current plotting tools
Generation Module: AI-powered content creation
Presentation Module: Slide and poster generation
Research Module: Literature and experiment management
Each module exposes MCP tools that can be independently used or composed together.
Technology Stack
Current (Phase 1)
FastMCP - MCP server framework
UltraPlot - Publication-quality plotting
Polars - High-performance dataframes
Pillow - Image processing
Pydantic - Data validation
Planned
Diffusion models (Stable Diffusion, DALL-E) for image generation
LaTeX/Typst for presentation rendering
Vector database for literature search
More to be determined based on research needs
Contributing
We welcome contributions across all phases of the project!
Current Priorities
ā Phase 1 visualization tools (complete)
šØ Additional plot types (3D, network graphs, etc.)
š§ Phase 2 planning and design
How to Contribute
Fork the repository
Create a feature branch
Implement with tests (maintain 100% pass rate)
Ensure quality checks pass:
uv run ruff format . uv run ruff check . uv run ty check uv run pytestSubmit a pull request
See CONTRIBUTING.md (coming soon) for detailed guidelines.
Project Goals
Comprehensive: Cover the full research lifecycle from data analysis to publication
High-quality: Publication-ready outputs with professional standards
Efficient: Fast execution leveraging modern Python tools
Extensible: Easy to add new tools and integrations
AI-friendly: Designed for seamless AI assistant integration via MCP
Testing & Quality
48 tests covering all Phase 1 functionality
100% pass rate with comprehensive coverage
Type-safe with full type annotations
Linted with Ruff (zero errors)
Documented with detailed docstrings
License
MIT License - see LICENSE file for details.
Acknowledgments
Current Phase
FastMCP by Jeff Lowin
UltraPlot - ProPlot successor
Polars - Rust-powered dataframes
uv - Fast Python packaging
Inspiration
Model Context Protocol by Anthropic
Modern scientific Python ecosystem
Resources
Status: Phase 1 (Visualization) complete ā | Phase 2 (Image Generation) in planning š§
For feature requests or questions, please open an issue on GitHub.
Available Tools
9 toolsplot_barA
Create a bar plot for categorical data comparison.
This tool generates vertical or horizontal bar plots, ideal for comparing values across different categories.
Args: x: Category labels. Column name (string) if using data file, or list of strings. y: Values for each category. Column name or list of numbers. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} orientation: "vertical" or "horizontal" bars (default: "vertical") style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "grid": True} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Vertical bar plot: >>> plot_bar( ... x=["A", "B", "C"], ... y=[10, 25, 15], ... style={"title": "Category Comparison"} ... )
Horizontal bar plot from file:
>>> plot_bar(
... x="product",
... y="sales",
... data_input={"file_path": "sales.csv"},
... orientation="horizontal"
... )| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| data_input | No | ||
| orientation | No | vertical | |
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool generates plots and returns 'PIL Image object or bytes,' which covers output behavior. However, it doesn't mention performance characteristics, error conditions, or side effects like file creation. The examples help but don't fully compensate for missing behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose statement, parameter documentation, return specification, and examples. While comprehensive, some sentences could be more concise (e.g., the orientation description repeats 'vertical or horizontal'). Overall, it's appropriately sized for a 6-parameter tool with complex options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no annotations, no output schema), the description provides substantial context: purpose, all parameter semantics, return type, and examples. It lacks some behavioral details like error handling or performance limits, but covers the essential usage context adequately for a plotting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must fully document parameters. It provides detailed semantics for all 6 parameters, explaining what each represents (e.g., 'x: Category labels'), data formats, optional status, defaults, and even complex nested structures like data_input and style objects. This completely compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a bar plot for categorical data comparison.' It specifies the verb ('create'), resource ('bar plot'), and scope ('categorical data comparison'), distinguishing it from sibling tools like plot_line or plot_scatter that serve different visualization purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool: 'ideal for comparing values across different categories.' It doesn't explicitly state when NOT to use it or name specific alternatives among siblings, but the categorical comparison focus gives strong implicit guidance versus continuous data plots like plot_line.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_boxA
Create a box plot for comparing data distributions.
This tool generates box plots (box-and-whisker plots) showing median, quartiles, and outliers for one or more datasets.
Args: data: For direct input, list of lists (each sublist is a dataset). For file input, column name(s) separated by comma or single column. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} labels: Optional labels for each dataset style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "grid": True} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Multiple datasets comparison: >>> plot_box( ... data=[[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7]], ... labels=["Group A", "Group B", "Group C"] ... )
From CSV file:
>>> plot_box(
... data="scores",
... data_input={"file_path": "test_scores.csv"},
... style={"title": "Test Score Distribution"}
... )| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| data_input | No | ||
| labels | No | ||
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It explains the tool generates visualizations and returns PIL Image/bytes, but doesn't mention performance characteristics, error conditions, or whether it modifies input data. The examples help but don't fully cover behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections: purpose statement, parameter explanations, return value, and examples. The information is front-loaded with the core purpose first. Some redundancy exists (data parameter explained in both Args and examples), but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter visualization tool with no annotations and no output schema, the description provides good coverage: clear purpose, parameter semantics, return format, and usage examples. It could benefit from more behavioral context (error handling, performance) but is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by explaining all 5 parameters with clear semantics: data formats (list of lists vs. column names), optional data_input for files, labels for datasets, style for plot customization, and output for format/dimensions. The examples further clarify usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a box plot for comparing data distributions' with specific details about what the plot shows (median, quartiles, outliers). It distinguishes from siblings by specifying it's for box plots, unlike plot_bar, plot_line, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage through examples showing when to use direct data input vs. file input, but lacks explicit guidance on when to choose this tool over sibling tools like plot_violin or plot_histogram for similar distribution visualization tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_contourA
Create a contour plot for 3D data visualization in 2D.
This tool generates contour lines (or filled contours) showing levels of a third variable (z) across x-y coordinates.
Args: x: X coordinates. Column name or list of values. y: Y coordinates. Column name or list of values. z: Z values (2D array). Column name or 2D list. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} levels: Number of contour levels (default: 10) filled: If True, create filled contours (contourf), else lines only style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "colormap": "viridis"} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Filled contour plot: >>> x = [1, 2, 3, 4, 5] >>> y = [1, 2, 3, 4, 5] >>> z = [[i+j for j in range(5)] for i in range(5)] >>> plot_contour(x=x, y=y, z=z, levels=15, filled=True)
Line contours only:
>>> plot_contour(
... x="longitude",
... y="latitude",
... z="temperature",
... data_input={"file_path": "climate_data.csv"},
... filled=False,
... levels=20
... )| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| z | Yes | ||
| data_input | No | ||
| levels | No | ||
| filled | No | ||
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining the tool's behavior: it generates contour plots, can produce either lines or filled contours, returns PIL Image or bytes, and shows default behaviors (levels default to 10, filled defaults to true). It doesn't mention performance characteristics, memory usage, or error conditions, but provides substantial behavioral context beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (purpose, args, returns, examples) and front-loaded core functionality. The examples are detailed but necessary for a complex visualization tool. Some redundancy exists (e.g., 'contour plot for 3D data visualization in 2D' and 'generates contour lines...'), but overall efficient for an 8-parameter tool with comprehensive documentation needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex visualization tool with 8 parameters, 0% schema coverage, no output schema, and no annotations, the description provides substantial context: clear purpose, detailed parameter explanations, return type specification, and comprehensive examples. It doesn't cover all edge cases or error scenarios, but gives enough information for effective tool selection and invocation given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 8 parameters, the description provides excellent parameter semantics: it explains what each parameter represents (x/y coordinates, z values, data_input options, levels meaning, filled behavior, style components, output format options), includes examples showing different usage patterns, and clarifies data types (column names vs lists, 2D arrays). This fully compensates for the schema coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a contour plot for 3D data visualization in 2D' with specific details about generating contour lines/filled contours showing levels of a third variable across x-y coordinates. It distinguishes this from sibling tools like plot_heatmap or plot_scatter by specifying the unique contour visualization approach.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through examples showing different scenarios (filled vs line contours, direct data vs file input), but doesn't explicitly state when to choose this tool over alternatives like plot_heatmap or plot_pcolormesh for similar 2D visualizations of 3D data. No explicit guidance on when-not-to-use or comparison with siblings is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_heatmapA
Create a heatmap for visualizing matrix data.
This tool generates a heatmap with optional annotations, ideal for correlation matrices, confusion matrices, or any 2D data.
Args: data: For direct input, 2D list (matrix). For file input, column name. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} x_labels: Optional labels for x-axis (columns) y_labels: Optional labels for y-axis (rows) annotate: If True, show values in each cell style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "colormap": "viridis"} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Correlation matrix: >>> plot_heatmap( ... data=[[1.0, 0.8, 0.3], [0.8, 1.0, 0.5], [0.3, 0.5, 1.0]], ... x_labels=["A", "B", "C"], ... y_labels=["A", "B", "C"], ... annotate=True, ... style={"title": "Correlation Matrix", "colormap": "RdBu"} ... )
From file:
>>> plot_heatmap(
... data="matrix",
... data_input={"file_path": "data_matrix.csv"},
... style={"colormap": "plasma"}
... )| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| data_input | No | ||
| x_labels | No | ||
| y_labels | No | ||
| annotate | No | ||
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool 'generates a heatmap' and returns 'PIL Image object or bytes containing the plot,' which covers basic behavior. However, it doesn't mention performance characteristics, error conditions, or side effects like file creation from output parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose statement, usage context, parameter explanations, return value, and examples. While comprehensive, it's appropriately sized for a 7-parameter tool with complex options. Every section adds value, though some sentences could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters with 0% schema coverage and no output schema, the description does an excellent job explaining parameters and return values. It provides concrete examples showing both direct data and file input scenarios. The main gap is lack of behavioral details like error handling or performance limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all 7 parameters in detail. Each parameter gets clear semantic explanation beyond type information: 'data' distinguishes between direct input and file input, 'annotate' explains 'show values in each cell,' and style/output objects get specific field explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a heatmap for visualizing matrix data.' It specifies the verb ('create'), resource ('heatmap'), and scope ('matrix data'), and distinguishes from siblings by focusing on heatmaps rather than other plot types like bar or scatter plots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'ideal for correlation matrices, confusion matrices, or any 2D data.' It doesn't explicitly state when not to use it or name specific alternatives among siblings, but the examples illustrate appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_histogramA
Create a histogram for data distribution analysis.
This tool generates a histogram showing the frequency distribution of numerical data. Useful for understanding data spread and patterns.
Args: data: Data column name (string) if using data file, or list of values. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} bins: Number of histogram bins (default: 30) density: If True, normalize to show probability density style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "grid": True} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Basic histogram: >>> plot_histogram(data=[1.2, 2.3, 2.5, 3.1, 3.4, 4.2, 4.5], bins=10)
Histogram from CSV with density:
>>> plot_histogram(
... data="measurement",
... data_input={"file_path": "measurements.csv"},
... bins=50,
... density=True,
... style={"title": "Measurement Distribution"}
... )| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| data_input | No | ||
| bins | No | ||
| density | No | ||
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (generates a histogram), the return type (PIL Image or bytes), and includes practical examples showing usage patterns. It doesn't mention performance characteristics, error conditions, or side effects, but provides substantial operational context beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, Args, Returns, Examples) and front-loaded with the core functionality. While comprehensive, some sentences could be more concise (e.g., the two-sentence purpose paragraph could be combined). The examples are detailed but necessary for understanding parameter usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter visualization tool with no annotations and no output schema, the description provides substantial context: clear purpose, detailed parameter explanations, return type specification, and practical examples. It doesn't explain error conditions or advanced usage scenarios, but covers the essential information needed to use the tool effectively given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema description coverage, the description fully compensates by providing detailed parameter documentation in the Args section. Each parameter (data, data_input, bins, density, style, output) is clearly explained with examples of valid values and usage. The description adds significant meaning beyond the bare schema, including default values, data formats, and practical usage examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a histogram for data distribution analysis' and 'generates a histogram showing the frequency distribution of numerical data'. It distinguishes from siblings by specifying it's for histogram creation (vs. bar, box, scatter plots, etc.), with a specific verb ('create', 'generates') and resource ('histogram').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'Useful for understanding data spread and patterns'. However, it doesn't explicitly state when not to use it or name specific alternatives among the sibling tools (e.g., plot_box for distribution comparison, plot_violin for density visualization). The examples imply usage scenarios but lack explicit guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_lineA
Create a line plot from data.
This tool generates a line plot using UltraPlot/Matplotlib. You can provide data either as a file path (CSV/JSON) or directly as lists.
Args: x: X-axis data. Column name (string) if using data file, or list of values. y: Y-axis data. Column name (string) if using data file, or list of values. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "colormap": "...", "grid": True} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Basic line plot with direct data: >>> plot_line(x=[1, 2, 3], y=[1, 4, 9])
Line plot from CSV file:
>>> plot_line(
... x="time",
... y="temperature",
... data_input={"file_path": "experiment.csv"},
... style={"title": "Temperature Over Time", "xlabel": "Time (s)"}
... )
High-resolution PDF output:
>>> plot_line(
... x=[1, 2, 3],
... y=[1, 4, 9],
... output={"format": "pdf", "width": 20, "height": 15}
... )| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| data_input | No | ||
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining: 1) what gets created (a line plot), 2) the two data input methods (file path or direct lists), 3) the return type (PIL Image object or bytes), and 4) the optional styling and output configuration. It doesn't mention performance characteristics or error conditions, but covers the essential behavioral aspects for a plotting tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, Args, Returns, Examples) and front-loads the core functionality. The examples are comprehensive but could be slightly more concise. Every sentence adds value, though the formatting with triple quotes and indentation in the examples adds some visual complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no annotations and no output schema, the description provides excellent coverage: purpose, parameter semantics, return values, and multiple usage examples. It doesn't cover error cases or performance limits, but given the tool's complexity level, it provides sufficient context for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed parameter explanations in the Args section and examples. It clarifies the dual nature of x/y parameters (column names or lists), explains the structure of data_input, style, and output objects, and provides concrete examples showing how to use each parameter effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a line plot from data' with specific implementation details ('using UltraPlot/Matplotlib'). It distinguishes itself from sibling tools (plot_bar, plot_scatter, etc.) by specifying it's for line plots specifically, not other plot types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implied usage guidance through examples showing different scenarios (basic plot, CSV file plot, PDF output). However, it lacks explicit guidance on when to choose this tool over sibling plotting tools (e.g., when to use plot_line vs plot_scatter vs plot_bar). The examples help but don't provide comparative decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_pcolormeshA
Create a pseudocolor plot with a non-regular rectangular grid.
This tool generates a fast pseudocolor plot using pcolormesh, ideal for large datasets and irregular grids.
Args: x: X coordinates. Column name or list of values. y: Y coordinates. Column name or list of values. z: Z values (2D array). Column name or 2D list. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} shading: Shading method ("auto", "flat", "nearest", "gouraud") style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "colormap": "viridis"} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Basic pcolormesh: >>> x = [1, 2, 3, 4] >>> y = [1, 2, 3, 4] >>> z = [[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12], [4, 8, 12, 16]] >>> plot_pcolormesh(x=x, y=y, z=z, shading="gouraud")
From file with custom colormap:
>>> plot_pcolormesh(
... x="x_coord",
... y="y_coord",
... z="intensity",
... data_input={"file_path": "field_data.csv"},
... style={"colormap": "plasma", "title": "Field Intensity"}
... )| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| z | Yes | ||
| data_input | No | ||
| shading | No | auto | |
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it's a creation tool (implies mutation/write operation), returns a PIL Image or bytes, and mentions performance ('fast') and ideal use cases. However, it lacks details on permissions, error handling, or side effects. The description adds substantial value beyond the schema but doesn't cover all behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized. It starts with a clear purpose, followed by usage context, detailed parameter explanations with examples, and return value. Every sentence adds value: no redundancy, and the examples illustrate practical usage efficiently. It's front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no annotations, no output schema), the description is highly complete. It covers purpose, usage, all parameter semantics with examples, and return values. The examples demonstrate both basic and advanced usage, compensating for the lack of structured fields. This provides sufficient context for an AI agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It provides detailed semantics for all 7 parameters: x, y, z (coordinates and values with format options), data_input (file or data object), shading (method with enum values), style (plot customization), and output (format and dimensions). The description adds comprehensive meaning beyond the bare schema, including examples and optional usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a pseudocolor plot with a non-regular rectangular grid' and 'generates a fast pseudocolor plot using pcolormesh, ideal for large datasets and irregular grids.' It specifies the verb ('create'), resource ('pseudocolor plot'), and distinguishes from siblings by emphasizing irregular grids and large datasets, which differentiates it from regular heatmap or contour plots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'ideal for large datasets and irregular grids.' This implicitly suggests alternatives (e.g., use other plot types for regular grids or smaller datasets), but it does not explicitly name sibling tools or state when-not-to-use scenarios. The guidance is helpful but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_scatterA
Create a scatter plot with optional size and color mapping.
This tool generates a scatter plot where point sizes and colors can represent additional data dimensions.
Args: x: X-axis data. Column name (string) if using data file, or list of values. y: Y-axis data. Column name (string) if using data file, or list of values. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} size: Optional point sizes. Column name, list of values, or single value. color: Optional point colors. Column name or list of values for colormap. style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "colormap": "viridis", "grid": True} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Basic scatter plot: >>> plot_scatter(x=[1, 2, 3], y=[1, 4, 9])
Scatter with size and color mapping:
>>> plot_scatter(
... x="height",
... y="weight",
... size="age",
... color="bmi",
... data_input={"file_path": "health_data.csv"},
... style={"colormap": "plasma"}
... )| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| data_input | No | ||
| size | No | ||
| color | No | ||
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by explaining what the tool returns ('PIL Image object or bytes containing the plot'), providing comprehensive examples, and describing the optional nature of most parameters. It doesn't mention performance characteristics, error conditions, or memory usage, but covers the core behavioral aspects adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns, examples) and front-loaded information. It's appropriately sized for a complex tool with 7 parameters, though the examples section is quite detailed. Every sentence adds value, but some redundancy exists between the parameter descriptions and examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 7-parameter tool with no annotations and no output schema, the description provides comprehensive coverage including purpose, parameter semantics, return values, and examples. The main gap is lack of explicit guidance on when to use versus sibling plotting tools, but otherwise it's quite complete for enabling correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed parameter explanations in the 'Args' section, including data types, usage patterns, and examples for all 7 parameters. It clarifies that x and y can be column names or lists, explains the structure of data_input, size, color, style, and output objects with specific examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a scatter plot with optional size and color mapping.' It specifies the verb ('create'), resource ('scatter plot'), and distinguishes from siblings by mentioning size/color mapping capabilities that differentiate it from basic plotting tools like plot_line or plot_bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through examples showing basic vs. enhanced scatter plots, but doesn't explicitly state when to use this tool versus alternatives like plot_line or plot_heatmap. The examples provide some context but lack explicit guidance about choosing between different plotting tools for different data visualization needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_violinA
Create a violin plot for detailed distribution comparison.
This tool generates violin plots, which combine box plots with kernel density estimation to show the full distribution shape.
Args: data: For direct input, list of lists (each sublist is a dataset). For file input, column name(s) or single column. data_input: Optional. {"file_path": "path/to/file.csv"} or {"data": {...}} labels: Optional labels for each dataset style: Optional. {"title": "...", "xlabel": "...", "ylabel": "...", "grid": True} output: Optional. {"format": "png/pdf/svg", "width": 15, "height": 10, "dpi": 300}
Returns: PIL Image object or bytes containing the plot
Examples: Comparing distributions: >>> plot_violin( ... data=[[1, 2, 2, 3, 3, 3, 4], [2, 3, 4, 4, 5, 5, 6]], ... labels=["Control", "Treatment"] ... )
From file:
>>> plot_violin(
... data="reaction_time",
... data_input={"file_path": "experiment.csv"},
... style={"title": "Reaction Time Distribution"}
... )| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| data_input | No | ||
| labels | No | ||
| style | No | ||
| output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool 'generates violin plots' and returns a 'PIL Image object or bytes,' which covers basic behavior. However, it lacks details on performance, error handling, or constraints like data size limits. The examples add some context, but more behavioral traits (e.g., memory usage, file format support) would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, parameter explanations, return value, and examples. It's appropriately sized for a 5-parameter tool with no schema coverage. However, it could be slightly more concise by integrating the examples more tightly, but overall, each sentence adds value without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, 0% schema coverage, no output schema, no annotations), the description does a good job of completeness. It explains the tool's purpose, parameters, return values, and provides examples. The main gap is the lack of output schema, but the description specifies the return as 'PIL Image object or bytes,' which compensates adequately. More behavioral details would push it to a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It provides detailed semantics for all parameters: 'data' is explained with examples for direct input (list of lists) and file input (column name), 'data_input' specifies optional file or data objects, 'labels' for dataset labels, 'style' for plot customization, and 'output' for format and dimensions. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a violin plot for detailed distribution comparison.' It specifies the exact visualization type (violin plot) and distinguishes it from sibling tools like plot_box or plot_histogram by explaining that it 'combines box plots with kernel density estimation to show the full distribution shape.' This is specific and differentiates it from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: for 'detailed distribution comparison' where showing the 'full distribution shape' is important. It implies usage through examples comparing 'Control' and 'Treatment' groups. However, it doesn't explicitly state when not to use it or name specific alternatives among the siblings, though the context suggests it's for distribution visualization versus other plot types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose corresponding to a specific type of plot visualization. The descriptions clearly differentiate between bar plots, box plots, contour plots, heatmaps, histograms, line plots, pseudocolor plots, scatter plots, and violin plots. There is no functional overlap or ambiguity between these visualization types.
All tool names follow a perfect 'plot_' prefix pattern with descriptive suffixes indicating the plot type. The naming is completely consistent across all nine tools, using snake_case uniformly without any deviations or mixed conventions.
Nine tools is an appropriate number for a visualization-focused ML research server. Each tool represents a distinct, commonly used plot type in data analysis and research, making the set well-scoped without being overwhelming or insufficient for the domain.
The tool set covers most essential plot types for ML research visualization, including categorical, distribution, correlation, and relationship plots. Minor gaps might include specialized plots like 3D surface plots or network graphs, but the core visualization needs are well-covered for typical research workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Renders interactive Chart.js charts and dashboards inline in AI conversations.
The statistical analyst in your AI chat ā validated, citable, re-runnable analysis of your data.
Renders interactive Chart.js charts and dashboards inline in AI conversations. Supports bar, line, area, pie, doughnut, scatter, and radar charts with multi-chart dashboard grids.
Create, inspect, manage, and render charts and data visualizations as SVG/PNG or interactive embeds.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables creation of publication-quality statistical graphics using plotnine's grammar of graphics through natural language, supporting 20+ geometry types, multi-layer plots, and flexible theming for data visualization.116MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to control Origin 2025b for scientific plotting via natural language, with support for data import, 52+ chart types, curve fitting, statistics, and export.7MIT
- AlicenseAqualityBmaintenanceEnables AI agents to create data visualizations like bar charts, line charts, pie charts, scatter plots, and histograms, returning inline SVG or PNG files.5MIT
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI agents to generate beautiful, presentation-ready charts (SVG + PNG) with zero setup, supporting various chart types and styling options.25MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nishide-dev/ml-research-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server