Skip to main content
Glama

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 visualization

  • plot_scatter - Multi-dimensional scatter plots with size/color mapping

  • plot_bar - Categorical comparisons (vertical/horizontal)

Statistical Visualizations

  • plot_histogram - Distribution analysis with density estimation

  • plot_box - Statistical summaries and outlier detection

  • plot_violin - Detailed distribution shapes with KDE

2D Representations

  • plot_heatmap - Matrix visualization with annotations

  • plot_contour - 3D data in 2D with contour lines

  • plot_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 list

Manual 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-mcp

For 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-mcp

Quick 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)

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 | bytes

Parameters:

  • x, y: Column names (if using file) or data arrays

  • data_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.server

Testing

# 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 -v

Code Quality

# Format code
uv run ruff format .

# Lint and type check
uv run ruff check .
uv run ty check

Adding Dependencies

uv add <package>           # Runtime dependency
uv add --dev <package>     # Development dependency
uv lock --upgrade          # Update lockfile

Architecture

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)

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

  1. āœ… Phase 1 visualization tools (complete)

  2. šŸ”Ø Additional plot types (3D, network graphs, etc.)

  3. 🚧 Phase 2 planning and design

How to Contribute

  1. Fork the repository

  2. Create a feature branch

  3. Implement with tests (maintain 100% pass rate)

  4. Ensure quality checks pass:

    uv run ruff format .
    uv run ruff check .
    uv run ty check
    uv run pytest
  5. Submit a pull request

See CONTRIBUTING.md (coming soon) for detailed guidelines.

Project Goals

  1. Comprehensive: Cover the full research lifecycle from data analysis to publication

  2. High-quality: Publication-ready outputs with professional standards

  3. Efficient: Fast execution leveraging modern Python tools

  4. Extensible: Easy to add new tools and integrations

  5. 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

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 tools
plot_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"
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
data_inputNo
orientationNovertical
styleNo
outputNo

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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"}
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
data_inputNo
labelsNo
styleNo
outputNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
zYes
data_inputNo
levelsNo
filledNo
styleNo
outputNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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"}
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
data_inputNo
x_labelsNo
y_labelsNo
annotateNo
styleNo
outputNo

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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"}
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
data_inputNo
binsNo
densityNo
styleNo
outputNo

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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}
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
data_inputNo
styleNo
outputNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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"}
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
zYes
data_inputNo
shadingNoauto
styleNo
outputNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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"}
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
data_inputNo
sizeNo
colorNo
styleNo
outputNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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"}
... )
ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
data_inputNo
labelsNo
styleNo
outputNo

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.3/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    11
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    7
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to create data visualizations like bar charts, line charts, pie charts, scatter plots, and histograms, returning inline SVG or PNG files.
    5
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI agents to generate beautiful, presentation-ready charts (SVG + PNG) with zero setup, supporting various chart types and styling options.
    25
    MIT

Latest Blog Posts

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