Skip to main content
Glama
Geyo33

mcp-data-summary

by Geyo33

mcp-data-summary

A learning project for building an MCP server with the official Python SDK.

The server lets an LLM produce a visual summary report from CSV datasets without ever loading raw data into the model's context. It simulates a REST API (fake GET/POST), exposes data schemas as MCP Resources, provides chart and document generation as MCP Tools, and guides the whole workflow with an MCP Prompt.


What it demonstrates

MCP concept

File

What it does

Resources

resources/datasets.py

Expose dataset schemas via fake GET endpoints

Tools

tools/chart_tools.py

Generate bar, line, histogram, pie charts, dataset subset

Tools

tools/stats_tools.py

Descriptive stats + correlation matrix + scatter plot

Tools

tools/document_tools.py

Build HTML report + export PDF via fake POST

Prompts

prompts/summary_prompt.py

7-step guided workflow for the LLM

Fake API

api/fake_client.py

Simulated REST client backed by local CSV and JSON files

Schemas

api/schemas.py

Pydantic models for all API responses


Related MCP server: mcp-csv-database

How it works

The LLM never sees raw tabular data. Instead it follows this pipeline:

GET /datasets                 → discover available datasets
GET /datasets/{name}          → inspect a plot-friendly schema (columns, dtypes, sample values)
tool: get_summary_statistics  → understand distributions and correlations
tool: generate_*_chart        → produce PNG charts saved to output/ and feedbacks to understand the charts
tool: build_html_report       → render a Jinja2 HTML report from the chart paths
tool: export_pdf_report       → convert HTML to PDF and POST it back to the fake API

Project structure

mcp-data-summary/
├── data/                              # Sample CSV files and JSON dataset descriptions (auto-discovered)
│   ├── descriptions.json
│   ├── sales.csv
│   └── users.csv
├── output/                            # Generated charts, HTML and PDF reports
├── scripts/
│   └── run_pipeline.py                # End-to-end pipeline runner (no LLM needed)
├── tests/
│   ├── conftest.py                    # Shared pytest fixtures
│   ├── test_fake_client.py            # Unit tests for the API layer
│   ├── test_chart_tools.py            # Tests for all chart tools
│   └── test_stats_and_docs.py         # Tests for stats tool + HTML builder
├── src/
│   └── mcp_data_summary/
│       ├── server.py                  # Entry point — wires everything together
│       ├── api/
│       │   ├── fake_client.py         # Simulates GET /datasets and POST /reports
|       |   ├── json_encoder.py        # Custom JSON encoder
│       │   └── schemas.py             # Pydantic models for API responses
│       ├── resources/
│       │   └── datasets.py            # MCP Resources: dataset list + schema
│       ├── tools/
│       │   ├── chart_tools.py         # Bar, line, histogram, pie chart tools
│       │   ├── stats_tools.py         # Summary statistics + scatter plot
│       │   └── document_tools.py      # HTML report builder + PDF exporter
│       └── prompts/
│           └── summary_prompt.py      # Guided 7-step workflow prompt
└── pyproject.toml

Quick start

1. Install uv

curl -LsSf https://astral.sh/uv/install.sh | sh

2. Install dependencies

uv sync

3. Verify everything works (no LLM required)

Run the pipeline script — it simulates the full LLM workflow end-to-end:

uv run python scripts/run_pipeline.py

# Restrict to a single dataset
uv run python scripts/run_pipeline.py --datasets sales

Charts and a report will appear in output/.

4. Run the test suite

uv run pytest

5. Open the MCP Inspector (browser-based debug UI)

uv run mcp dev src/mcp_data_summary/server.py

This lets you browse Resources, call Tools manually, and inspect request/response payloads

6. Example - Connect to Claude Desktop

Add this block to your claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows):

{
  "mcpServers": {
    "data-summary": {
      "command": "uv",
      "args": [
        "--directory", "/absolute/path/to/mcp-data-summary",
        "run", "mcp-data-summary"
      ]
    }
  }
}

Restart Claude Desktop, then load the data_summary_workflow prompt. The LLM will discover datasets, inspect schemas, generate charts, and produce a PDF report autonomously.


Available tools

Tool

Input

Output

get_summary_statistics

dataset name

JSON with describe + correlation

generate_bar_chart

dataset, x/y columns, optional group_by

PNG path and chart data

generate_line_chart

dataset, x/y columns, optional group_by

PNG path and chart data

generate_histogram

dataset, column, bins

PNG path and chart data

generate_pie_chart

dataset, category + value columns

PNG path and chart data

generate_scatter_plot

dataset, x/y columns, optional color_by

PNG path and chart data

build_subset_dataset

dataset, filters

Subset name, path and schema

build_html_report

title, chart paths, captions, summary

HTML path

export_pdf_report

HTML path, report name

JSON with pdf path + report_id


Available resources

URI

Returns

datasets://list

JSON array of available dataset names

datasets://{name}/schema

Plot-friendly schema: columns, dtypes, n_unique, sample values


Adding your own CSV

Drop any .csv file into data/. The server auto-discovers it on startup. Add a description in data/descriptions.json:

{
    "your_file": "Description the LLM will see when reading the schema.",
}

Date columns are auto-detected if their name contains "date".


System dependencies for PDF export

WeasyPrint (used by export_pdf_report) requires Cairo and Pango to be installed at the OS level. The HTML report and all charts work without them.

# Ubuntu / Debian
sudo apt install libpango-1.0-0 libcairo2 libpangocairo-1.0-0

# macOS
brew install pango cairo

# Windows — follow the WeasyPrint install guide:
# https://doc.courtbouillon.org/weasyprint/stable/first_steps.html

Next steps

  • Support multi-dataset joins before charting

  • Introduce a simple auth token to the fake API layer

  • Stream chart generation progress back to the client using MCP notifications

Available Tools

10 tools
build_html_reportA
    Render an HTML summary report from a set of pre-generated charts.

    Call this after all chart tools have been run and you have collected
    their output paths.

    Args:
        report_title:      Title shown on the cover page.
        datasets:          List of dataset names included in the report.
        chart_paths:       List of relative paths to chart PNG files.
        chart_titles:      List of titles — one per chart, same order as chart_paths.
        chart_captions:    List of caption strings, same order as chart_paths.
        executive_summary: Optional paragraph summarising the key findings.
        output_filename:   HTML filename to write (auto-generated if empty).

    Returns:
        Relative path to the saved HTML file.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
datasetsYes
chart_pathsYes
chart_titlesYes
report_titleYes
chart_captionsYes
output_filenameNo
executive_summaryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses the primary side effect—writing an HTML file, with auto-generation when output_filename is empty—and states the return value as the relative path to the saved file. It does not mention overwrite behavior or failure handling for missing chart paths, but it is substantially transparent for a report-builder tool.

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 compact and front-loaded: a one-sentence purpose, a one-sentence workflow instruction, and a tight Args list with no redundant prose. Every line contributes necessary information, and the return value is stated briefly.

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?

For a tool with seven parameters and no annotations, the description covers all parameter semantics, the sequencing requirement, the output behavior, and the return path. The workflow context ('after all chart tools have been run') is sufficient for an agent to invoke it correctly. Minor edge-case constraints are not documented, but the description is complete enough for correct usage.

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?

Input schema coverage is 0%, so the description must carry parameter meaning, and it does: each argument receives a role, such as 'Title shown on the cover page' and 'one per chart, same order as chart_paths.' The repeated 'same order' instruction is particularly useful. Constraints like equal-length arrays are implicit rather than explicit, but the semantic roles are clear.

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 opens with a specific verb and resource: 'Render an HTML summary report from a set of pre-generated charts.' This clearly distinguishes it from sibling chart-generation tools, which produce charts, and from export_pdf_report, which exports a PDF. The prerequisite of 'pre-generated charts' also scopes the tool's role precisely.

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 gives an explicit trigger condition: 'Call this after all chart tools have been run and you have collected their output paths.' This tells an agent exactly when in the workflow to invoke the tool. It does not explicitly name alternatives or state when HTML is preferred over the sibling PDF export, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_subset_datasetA
    Filter a dataset by categorical, numeric, and datetime criteria, then save the result.

    All filter types are applied independently and intersected to produce the final subset.

    Args:
        source_dataset_name: Name of the registered source dataset.
        categorical_filters: List of (column, value) tuples for exact value matching.
                            E.g. [("region", "South"), ("region", "North"), ("category", "Hardware")]
        numeric_filters: List of (column, value, operator) tuples for numeric comparison.
                        E.g. [("age", 30, ">="), ("salary", 50000, ">")]
        datetime_column: Column name to filter by date range. Leave empty to skip.
        datetime_from: Start of date range (inclusive). Leave empty for no lower bound.
        datetime_to: End of date range (inclusive). Leave empty for no upper bound.
        output_dataset_name: Name for the output subset. Auto-generated if empty.
        output_dataset_desc: Description of the subset. Auto-generated if empty.

    Returns:
        A JSON str with {"dataset_name":"...","dataset_path":"...","dataset_schema":"..."}
    
ParametersJSON Schema
NameRequiredDescriptionDefault
datetime_toNo
datetime_fromNo
datetime_columnNo
numeric_filtersNo
categorical_filtersNo
output_dataset_descNo
output_dataset_nameNo
source_dataset_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the non-obvious intersection semantics ('All filter types are applied independently and intersected'), auto-generation behavior for output fields, and the exact return format. It does not explicitly say the source dataset is left unmodified, though 'save the result' implies a new output rather than in-place mutation.

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 front-loaded with a one-sentence action summary and a critical filtering-semantics note, then uses a structured Args/Returns layout. Given the 8-parameter surface, the length is justified and every sentence adds information; there is no tautology or filler.

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?

For an 8-parameter tool with no annotations, the description supplies a complete calling contract: all parameters are explained, the intersection behavior is spelled out, and the return shape is given as a JSON str with dataset_name, dataset_path, and dataset_schema. The only minor omission is the exact date string format, but both datetime params are strings with clear semantics, so this is a small gap.

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%, but the description fully compensates by documenting all 8 parameters with types, examples, and empty/default behavior. For example, categorical_filters is explained as 'List of (column, value) tuples for exact value matching' with concrete examples, and datetime bounds are marked as inclusive with 'Leave empty' instructions.

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 opens with the specific verb-resource pair: 'Filter a dataset by categorical, numeric, and datetime criteria, then save the result.' It clearly scopes what the tool does and distinguishes it from sibling tools, which are all chart/report generators rather than dataset subsetting operations.

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 makes the usage context clear: it is the only tool among the siblings that filters and saves dataset subsets, so an agent can infer when to choose it over the visualization/report siblings. However, it does not explicitly name alternatives or state when-not-to-use it, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_datasetsA
    List the available datasets and get their schemas : 
    column names, dtypes, sample values,
    and a categorised column list (numeric / categorical / datetime).
    
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It clearly describes the behavioral output: list datasets and return schema details including sample values and column categories. The verbs 'list' and 'get' suggest a read-only operation, so no mutation traits need to be disclosed. It doesn't mention any limitations (e.g., num of datasets), but for a simple discovery tool this is adequate.

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 a single, well-structured sentence with the action verb frontloaded ('List') followed by a colon and a precise bullet-like list of outputs. It contains no filler or repetition and every item adds useful detail.

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?

The tool has no parameters and no output schema, so the description must fully explain what an agent will get from invoking it. It does so specifically: column names, dtypes, sample values, and categorised column list. There is nothing critical missing for correct invocation and interpretation of results.

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?

The tool has 0 parameters, so there is no parameter space for the description to clarify. The baseline for parameterless tools is 4, and the description appropriately focuses on behavior rather than param references, which are absent.

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 uses a specific verb ('List') and a clear resource ('available datasets'), then enumerates exactly what is returned (schemas, column names, dtypes, sample values, categorised columns). This cleanly distinguishes it from the sibling chart/report/summary tools, which are all about producing outputs from datasets rather than discovering them.

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 usage context is implied rather than explicit: it's a discovery/inspection tool, and the sibling names make it easy to infer when to use it (before charting or summarising). However, the description does not state when to use it over alternatives, nor mention that it is a prerequisite for the other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_pdf_reportA
    Convert an HTML report to PDF and POST it to the (fake) API.

    Args:
        html_path:   Path to the HTML file (output of build_html_report).
        report_name: Logical name for the report used in the API call.

    Returns:
        A JSON str with {"pdf_path":"...","report_id":"...","message":"..."}
    
ParametersJSON Schema
NameRequiredDescriptionDefault
html_pathYes
report_nameNodata_summary

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/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 of explaining behavior. It discloses that the tool POSTs to a fake API, converts HTML to PDF, and returns a JSON string with specific keys. This gives agents a clear model of side effects and expected outcome, though it does not cover error cases or potential side effects beyond the POST.

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 compact, well organized with Args and Returns sections, and front-loads the core purpose in the first sentence. Every sentence contributes useful information with no fluff or repetition.

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 simplicity, the description covers the main inputs, the action, and the return format. It also ties html_path to a sibling tool, providing end-to-end context. It stops short of listing error conditions or edge cases, but for this tool that is not a significant gap.

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?

Schema description coverage is 0%, but the description compensates by explaining both parameters. html_path is described as the output of build_html_report, and report_name is described as a logical name used in the API call. This adds meaning beyond the raw schema, although it could mention the default value or allowed formats more explicitly.

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 a specific action: converting an HTML report to PDF and posting it to the API. It also names the expected input, output, and even the return format, making the tool's purpose unmistakable. This differentiates it from sibling tools like build_html_report and chart generators.

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 usage context by stating that html_path should be the output of build_html_report, which signals the appropriate place in a workflow. It does not explicitly discuss when not to use the tool or compare it to alternatives, but the prerequisite guidance is strong enough for most agents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_bar_chartA
    Generate a bar chart from a dataset column.

    Args:
        dataset:   Name of the dataset (e.g. "sales", "users").
        x_column:  Column to use for the X axis (categorical or date).
        y_column:  Numeric column to aggregate on the Y axis (sum by default).
        title:     Chart title shown at the top.
        group_by:  Optional column to group bars by colour (e.g. "category").
        filename:  Output filename (auto-generated if empty).

    Returns:
        A JSON str with {"chart_path":"...","chart_data":"..."}.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
datasetYes
filenameNo
group_byNo
x_columnYes
y_columnYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full behavioral burden. It discloses the default aggregation ('sum by default'), auto-generated filename behavior, and exact return format ('JSON str with chart_path and chart_data'). It does not mention filesystem side effects or dataset prerequisites, but these omissions are minor for a chart-generation tool.

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 docstring is tightly structured with a one-line summary, grouped Args, and a Returns section. Every line contributes needed information, and there is no redundant or vague prose.

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 tool with no annotations, the description is nearly self-sufficient: it covers all parameters, defaults, optional behavior, and the output format. It lacks guidance on selecting this tool among siblings and explicit error/prerequisite conditions, which prevents a perfect score.

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%, and the description compensates fully. Each parameter is explained with type constraints (categorical/date for x_column, numeric for y_column), defaults (sum aggregation, auto-generated filename), and optionality (group_by). This adds meaningful semantics beyond the raw 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 states a specific verb ('Generate') and resource ('bar chart') and defines the source as a dataset column. The x_column/y_column parameter explanations clarify the categorical vs numeric mapping, which distinguishes it from sibling chart generators such as pie, histogram, line, and scatter.

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?

No explicit when-to-use or alternative-selection guidance is provided. The name and parameters imply it is for comparing categorical or date categories against a numeric aggregate, but the description never tells an agent when to choose this over generate_pie_chart, generate_histogram, or generate_line_chart.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_histogramA
    Generate a histogram showing the distribution of a numeric column.

    Args:
        dataset:  Name of the dataset.
        column:   Numeric column to plot.
        title:    Chart title.
        bins:     Number of bins (default 20).
        filename: Output filename (auto-generated if empty).

    Returns:
        A JSON str with {"chart_path":"...","chart_data":"..."}.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
binsNo
titleYes
columnYes
datasetYes
filenameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden; it discloses the JSON return shape and filename auto-generation. It does not state whether an existing file is overwritten, whether charts are persisted to disk as a side effect, or what error behavior occurs for non-numeric columns, though filename and chart_path imply file output.

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 front-loaded with the core purpose and uses a compact Args/Returns structure where every line contributes parameter or output information. There is no filler or repetition.

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 five-parameter plotting tool, the description covers every parameter and the return shape, which is sufficient for calling it. It is slightly incomplete on higher-level context such as prerequisites (dataset must exist) and sibling selection, but the output schema signal and parameter coverage reduce the impact of that gap.

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%, but the Args section gives meaningful semantic descriptions for all five parameters, including that column must be numeric, the bins default, and the filename auto-generation behavior. This fully compensates for the absence of schema descriptions.

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 first sentence clearly states the action (generate), the artifact (histogram), and the input condition (numeric column), which inherently differentiates it from pie/bar/line/scatter siblings. The chart type and numeric qualifier leave no ambiguity about what the tool does.

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 numeric-column/distribution phrasing implies this tool is for inspecting continuous numeric distributions, but there is no explicit guidance about when to prefer it over generate_bar_chart, generate_line_chart, or generate_scatter_plot, and no mention of needing a dataset discovery step such as discover_datasets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_line_chartA
    Generate a line chart — great for time series or trends.

    Args:
        dataset:   Name of the dataset.
        x_column:  Column for the X axis, ideally a date or ordered category.
        y_column:  Numeric column for the Y axis (summed per X value).
        title:     Chart title.
        group_by:  Optional column to draw one line per group.
        filename:  Output filename (auto-generated if empty).

    Returns:
        A JSON str with {"chart_path":"...","chart_data":"..."}.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
datasetYes
filenameNo
group_byNo
x_columnYes
y_columnYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 full burden of behavioral disclosure. It explains that y_column values are 'summed per X value', that group_by draws one line per group, and that filename is auto-generated if empty. It also specifies the return format as a JSON string with chart_path and chart_data. These are meaningful behavioral traits beyond what the schema states, though it does not discuss error handling or side effects.

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 organized as a docstring with a one-line purpose statement followed by a labeled Args section and a Returns section. It is concise with no fluff—every sentence provides functional information. The structure is clean and front-loaded, making key parameters easy to scan.

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?

The description covers all six parameters, their roles, return format, and grouping behavior. Since an output schema is provided (the JSON structure), the description need not explain return values further. It adequately addresses the tool's complexity for an agent to invoke it correctly, including how y values are aggregated and how group_by affects rendering.

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 fully compensates. Each parameter gets a meaningful explanation: dataset is a name, x_column is 'ideally a date or ordered category', y_column is 'numeric' and 'summed per X value', group_by is 'optional column to draw one line per group', and filename has auto-generation behavior. This adds substantial semantic value over 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 states a clear verb and resource: 'Generate a line chart'. It also cites the primary use case ('great for time series or trends'), which differentiates it from sibling chart tools like pie or scatter plots. The verb-resource combination is specific and unambiguous.

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 gives clear context on when to use the tool ('great for time series or trends'), which implies the appropriate scenario. However, it does not explicitly name alternatives or state when not to use it. No exclusions or trade-offs are discussed, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_pie_chartA
    Generate a pie chart showing the composition of a categorical column.

    Args:
        dataset:          Name of the dataset.
        category_column:  Categorical column whose values form the slices.
        value_column:     Numeric column to sum per category.
        title:            Chart title.
        filename:         Output filename (auto-generated if empty).

    Returns:
        A JSON str with {"chart_path":"...","chart_data":"..."}.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
datasetYes
filenameNo
value_columnYes
category_columnYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/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 behavioral disclosure burden. It explains that category values become slices, value_column is summed per category, filename can be auto-generated, and the result is a JSON with chart_path and chart_data. This provides meaningful behavioral detail beyond the tool name and schema.

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 concise and well-organized, with purpose first followed by a compact Args section and a Returns line. Each sentence contributes useful information and there is no repetition of schema content.

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?

The description covers the core purpose, every parameter, and the return structure, which is enough for a straightforward chart-generation tool. It stops short of covering edge cases like file overwriting, path specifics, or validation behavior, but those are not essential for initial correct 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?

Schema description coverage is 0%, so the description fully compensates by explaining all five parameters: dataset, category_column, value_column, title, and filename. It clarifies that value_column is numeric and summed per category, and that filename is auto-generated when empty.

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 opening sentence names a specific verb and resource pair: generate a pie chart from a categorical column. It also indicates the analytical purpose—showing composition—which clearly differentiates it from sibling chart tools like generate_histogram or generate_scatter_plot.

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 gives clear usage context: use this when the composition of a categorical column is needed, with a numeric column aggregated per category. It does not explicitly name alternatives or exclusions, but the purpose is specific enough to guide tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_scatter_plotA
    Generate a scatter plot comparing two numeric columns.

    Best used when get_summary_statistics reveals a notable correlation
    between two columns worth visualising.

    Args:
        dataset:   Name of the dataset.
        x_column:  Numeric column for the X axis.
        y_column:  Numeric column for the Y axis.
        title:     Chart title.
        color_by:  Optional categorical column to colour points by group.
        filename:  Output filename (auto-generated if empty).

    Returns:
        A JSON str with {"chart_path":"...","chart_data":"..."}.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
datasetYes
color_byNo
filenameNo
x_columnYes
y_columnYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 must disclose behavioral traits on its own. It does reveal the return format (JSON with chart_path and chart_data) and implies file output via the 'filename' parameter default behavior. However, it does not explicitly state whether the tool modifies any data, requires specific data types beyond 'numeric,' or has side effects like overwriting files. This is a moderate disclosure level but not comprehensive.

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 opening sentence for purpose and usage, followed by a compact parameter list and a returns line. It is concise without unnecessary detail, and the most important information (purpose and trigger) is front-loaded. A minor improvement could be trimming the parameter documentation if it were already in the schema, but it is not, so the structure is appropriate.

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?

The description covers the core elements: purpose, usage trigger, all parameters, and the return format. Given the tool's moderate complexity (6 parameters, no nested objects) and the presence of an output schema, this is largely sufficient. The only gaps are explicit error handling or exception cases, which are not critical for an 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?

The schema provides no descriptions for the parameters, but the tool description includes a detailed Args section that explains each parameter's purpose (dataset, x_column, y_column, title, color_by, filename). This adds significant semantic value beyond the schema, fully compensating for the 0% schema description coverage.

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 generates a scatter plot comparing two numeric columns, which explicitly differentiates it from sibling chart tools like bar, line, pie, and histogram charts. The verb-resource pairing is precise and leaves no ambiguity about the tool's primary function.

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 a specific trigger condition: 'Best used when get_summary_statistics reveals a notable correlation between two columns worth visualising.' This gives clear when-to-use guidance. However, it does not explicitly state when not to use it or name alternative chart types, so it falls slightly short of a perfect score by not excluding other scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_summary_statisticsA
    Return descriptive statistics and a correlation matrix for a dataset.

    Call this before generating charts to understand distributions,
    spot outliers, and find which numeric columns correlate strongly
    (good candidates for scatter plots).

    Args:
        dataset: Name of the dataset.

    Returns:
        JSON string with two keys:
          - "describe": per-column stats (count, mean, std, min/max, quartiles)
          - "correlation": Pearson correlation matrix for numeric columns
    
ParametersJSON Schema
NameRequiredDescriptionDefault
datasetYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/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 transparently discloses the return contract: a JSON string with 'describe' and 'correlation' keys, per-column stats, and Pearson correlation. Edge cases like missing datasets or non-numeric columns are not mentioned, but the core behavior is clear.

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 compact and well-structured with Args/Returns sections. The purpose and usage guidance are front-loaded, and every sentence contributes meaning without filler or redundancy.

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 one-parameter read-only tool with an output schema, the description covers purpose, timing, parameter semantics, and return shape. It lacks only minor details such as the source of valid dataset names and error behavior, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description's Args section supplies the only meaning: dataset is 'Name of the dataset.' This is minimally adequate for a single required string parameter, but it does not explain where to find dataset names or the expected format.

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 opens with a specific verb ('Return') and resource ('descriptive statistics and a correlation matrix for a dataset'). It distinguishes this tool from sibling chart generators by positioning it as a pre-chart analysis step.

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 explicitly states when to call this tool: 'Call this before generating charts to understand distributions, spot outliers, and find which numeric columns correlate strongly.' It gives clear context and intent, though it does not explicitly name alternatives or provide when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updatesv0.1.0
    • First observedbuild_html_report
    • First observedbuild_subset_dataset
    • First observeddiscover_datasets
    • First observedexport_pdf_report
    • First observedgenerate_bar_chart
    • First observedgenerate_histogram
    • First observedgenerate_line_chart
    • First observedgenerate_pie_chart
    • First observedgenerate_scatter_plot
    • First observedget_summary_statistics

TDQS

A4.4/5.0
Disambiguation4/5

Each generate_* chart tool targets a distinct chart type, and build/discover/export tools are clearly separate. The only mild overlap is between generate_pie_chart and generate_bar_chart, both of which can visualize categorical composition, though their descriptions clarify the intended use.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., generate_pie_chart, discover_datasets, build_html_report). The verbs vary by action but are predictable and semantically appropriate, with no mixing of camelCase or inconsistent styles.

Tool Count5/5

Ten tools is a well-scoped set for a data summary server. Each tool covers a distinct step in the exploration-to-report workflow, and none feel redundant or unnecessary.

Completeness5/5

The tool set provides a complete pipeline: discover datasets, inspect statistics, filter subsets, generate multiple chart types, assemble an HTML report, and export to PDF. There are no obvious dead ends or major missing operations for the stated purpose.

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

  • F
    license
    B
    quality
    D
    maintenance
    An MCP server that provides data visualization and machine learning tools, featuring automated intent-based pipeline routing for data cleaning and model training. It enables LLMs to process CSV or JSON data to generate visual charts, perform regressions, or execute clustering analysis.
    16
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI models to interact with local CSV and Parquet data through MCP tools, providing summarization and analysis capabilities.
    1
    -
  • F
    license
    A
    quality
    D
    maintenance
    An MCP server for dataset exploration and analysis, enabling LLM clients to perform summary, correlation, distribution, missing value analysis, data cleaning, and statistical tests directly on CSV files.
    3
    -

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/Geyo33/mcp-learning-project'

If you have feedback or need assistance with the MCP directory API, please join our Discord server