Skip to main content
Glama
tabular-ds-mcp
by YusufErem

tabular-ds-mcp

An MCP server that gives AI coding agents (Claude Code, Cursor, Claude Desktop) careful tools for the first hour of a tabular ML problem: inspect a competition folder, profile a table, compare train and test, get a cross-validated baseline with the competition's metric, explain the model, write a submission and check it before uploading. The same functions work as a plain Python library, so they also run in a notebook (see the Kaggle walkthrough).

Three rules are built in: every model score is returned next to a no-skill baseline, nothing is ever fitted on rows it is scored on, and when the data is ordered in time or grouped by a key, the tools say so and validate accordingly.

Tools

Tool

What it returns

inspect_competition

Start here. Finds train / test / sample submission in a folder, the target and ID columns, the task, the submission format and a likely metric, whether test rows lie later in time or belong to unseen groups, extra tables that need a join, image or text content, and the exact calls to make next

profile_dataset

Shape, column types, missing values, cardinality, duplicate rows, target balance, and warnings: constant or ID-like columns, high missing rates, possible leakage, date columns, repeated keys, free text, file paths

compare_train_test

Column and dtype mismatches, unseen categories, PSI and KS per feature, an adversarial-validation AUC with a verdict, where the test rows sit in time, and how many test rows belong to keys never seen in train

cv_baseline

Gradient-boosting scores with the competition metric, fold spread and the no-skill baseline on the same folds. Random, time-ordered or group folds; with time or group folds it also reports how much random validation would overstate the score

explain_model

Permutation importance on a hold-out split (random, latest 20% in time, or unseen groups), plus features that add nothing

fit_predict

Fits on all rows and writes the submission in the sample's format: probability, value, label, top-k labels or one probability column per class

check_submission

Columns, row count, duplicated / missing IDs, missing values, constant predictions, [0, 1] range, per-row probability sums, labels per row for top-k submissions

All tools read CSV or Parquet, detect binary / multiclass / regression targets, and sample large files for speed.

What it adapts to

Situation

How it is detected

What changes

Test rows come later in time

date or time-index columns whose test range lies after the training range

time_col: folds train on the past and score the next time block; the hold-out for importance is the latest 20%; adversarial validation is also reported without the time column

Repeated keys (customer, store, card) with new keys in test

key-like column names, repeated values, share of test rows with an unseen key

group_col: no key sits in both parts of a fold, and the key is left out of the features

Competition metric

given by you (metric=), hinted by the sample submission

roc_auc, pr_auc, log_loss, accuracy, f1, mcc, macro_f1, roc_auc_ovr, qwk, map@k, rmse, rmsle (trains on log1p), mae, mape, r2

Submission format

the sample submission

probability, value, label, space-separated top-k labels, one column per class

Extra tables, text, images

other tables sharing a column with train; long free-text columns; file-path columns and media files

reported as limitations, with the join key and rows per key

With time or group folds, cv_baseline runs the same model on random splits of the same rows (for time folds, with the same training size) and compares fold by fold. Example from the tests, a target that follows a random walk over 1,200 days: random splits give RMSE 0.92, time-ordered folds 8.85, and the tool warns that random validation overstates the score. On independent rows the two agree and no warning is raised.

Related MCP server: Data Science Agent MCP Server

Quick start

git clone https://github.com/YusufErem/tabular-ds-mcp.git
cd tabular-ds-mcp
python3 -m venv .venv && .venv/bin/pip install -e .          # Python ≥ 3.10

Claude Code

claude mcp add tabular-ds -- "$(pwd)/.venv/bin/tabular-ds-mcp"
cp -r skills/tabular-playbook ~/.claude/skills/              # optional: the agent workflow below

Cursor (.cursor/mcp.json) or Claude Desktop (claude_desktop_config.json)

{ "mcpServers": { "tabular-ds": { "command": "/absolute/path/to/tabular-ds-mcp/.venv/bin/tabular-ds-mcp" } } }

Then ask, for example: “Inspect data/, then run the checks it suggests and give me a baseline with the competition metric.”

The skill

skills/tabular-playbook/SKILL.md tells the agent the order of the checks (inspect → profile → compare → baseline → explain → submission), what the thresholds mean (adversarial AUC 0.55 / 0.65, PSI 0.1 / 0.25), when to switch to time or group folds, and how to report: every number next to its baseline, every warning reported, no number that did not come from a tool.

Example (synthetic card-fraud data)

python examples/make_demo_data.py writes a 40,000-row training table with a 1.3% fraud rate and a test table in which amount is shifted on purpose. The tools report:

Step

Result

Inspect

target is_fraud, ID id, binary, probability submission, metric hint roc_auc; no time or group structure: “supported”

Profile

binary target, 1.31% positives → warning to report PR-AUC and use stratified folds

Train vs test

adversarial AUC 0.58 (“mild shift”); amount has the highest PSI (0.094) and KS p ≈ 0

CV baseline

ROC-AUC 0.734 (fold SD 0.027) vs 0.5; PR-AUC 0.051 vs 0.013 positive rate

Explain

hour and merchant matter most; amount adds nothing on its own

Submission

all checks pass

Use it from Python

import tabular_ds_mcp as t
plan = t.inspect_competition("data/")
for call in plan["suggested_calls"]:
    print(call["tool"], getattr(t, call["tool"])(**call["args"]).get("warnings"))

Design

  • Leakage-safe by construction. Encoders live inside a scikit-learn pipeline that is refitted on every training fold; dates are split into numeric parts and categorical columns cast to strings row by row before that.

  • Baselines everywhere. cv_baseline scores a no-skill model on the same folds, so a number never stands alone.

  • Validation that matches the test set. Time-ordered and group folds, compared with random splits, so the tool can say when a random K-fold score cannot be trusted.

  • Plain-Python core, thin MCP layer. core.py holds all logic; server.py only exposes it, which keeps the tools testable and usable outside MCP.

  • Light dependencies. pandas, NumPy, SciPy, scikit-learn (HistGradientBoosting) and the MCP SDK.

Tests (evaluation harness)

.venv/bin/pip install -e ".[dev]" && .venv/bin/pytest

33 tests check every tool on small synthetic tables whose right answer is known: no shift vs. a planted shift, signal vs. pure noise, a random-walk target where random folds must look too good and independent rows where they must not, memorised customers, each competition metric and submission format, each kind of broken submission, folders whose suggested calls must run as written, plus an end-to-end test that starts the server over stdio and calls it as an MCP client.

Limitations

  • The baseline is an untuned gradient-boosting model: a reference point, not a leaderboard model.

  • Forecasting problems get time-ordered validation and date parts, but no lag or rolling features.

  • Extra tables are detected (with the join key), not joined; free text and images are not modelled.

  • Permutation importance spreads credit across correlated features.

License

MIT © 2026 Yusuf Ömer Erem

Available Tools

7 tools
check_submissionA

Check a submission file against the sample submission before uploading it: columns, row count, duplicated or missing IDs, missing values, constant predictions, the [0, 1] range for probabilities, per-row probability sums and the number of labels per row for top-k (MAP@k) submissions.

Args: submission_path: the file to upload. sample_submission_path: the competition's sample submission. test_path: optional test table, to check that every test ID is predicted. id_col: ID column (default: first column of the sample submission).

NameRequiredDescriptionDefault
id_colNo
test_pathNo
submission_pathYes
sample_submission_pathYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full burden. It does well on scope disclosure by listing every validation performed and implying a non-destructive read, but it never says what happens on failure (raises an error vs. returns a list of issues), whether it can modify or normalize the file, or how issues are reported.

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?

Front-loaded with the core purpose and a compact enumeration of the checks, followed by a conventional Args block. The long comma-separated checklist sentence is dense but each item is informative; there is little filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Parameter semantics are covered well, but with no annotations and no output schema, the description leaves the return contract entirely unexplained — an agent cannot tell whether a successful call yields a boolean, a report of issues, or an exception. For a validation tool whose whole value is the diagnostic result, that is a meaningful 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 coverage is 0%, so the inline Args section is doing real work: it identifies test_path as optional and explains its purpose, and gives id_col a meaningful default (first column of the sample submission) that the schema's bare 'null' default does not convey. The two path parameters are described only thinly ('the file to upload', 'the competition's sample submission'), which keeps this just short of a 5.

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?

States a specific verb and resource ('Check a submission file against the sample submission') and enumerates exactly what is validated: columns, row count, duplicate/missing IDs, missing values, constant predictions, [0,1] range, per-row probability sums, and top-k label counts. This is clearly distinct from siblings like profile_dataset or compare_train_test, which operate on different objects.

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?

Gives explicit timing guidance ('before uploading it'), which frames the tool as a pre-submission gate, and explains the optional test_path as a way to verify every test ID is predicted. It does not state when to skip this check or what to do if the check fails, but the usage context is unambiguous.

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

compare_train_testA

Check whether the test set looks like the training set: column and dtype mismatches, unseen categories, PSI and KS per feature, an adversarial-validation AUC (0.5 = indistinguishable), whether the test rows come after the training period, and how many test rows belong to keys never seen in train.

Args: train_path: training table. test_path: test table (no target column needed). target: target column in the training table, excluded from the comparison. id_col: ID column, excluded from the comparison. time_col: time column to check (default: date columns are found automatically). group_col: key column to check, such as customer_id (default: found automatically). max_rows: sample size per table for the heavier checks.

NameRequiredDescriptionDefault
id_colNo
targetNo
max_rowsNo
time_colNo
group_colNo
test_pathYes
train_pathYes

TDQS

A4.1/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 so well: it discloses the exact battery of checks run, explains the adversarial AUC scale (0.5 = indistinguishable), notes that target and id columns are excluded, and that max_rows samples each table for the heavier checks. It stops short of describing the returned report's structure or whether failures raise versus report, which is the remaining gap.

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?

Front-loaded summary sentence followed by a standard Args block; no filler or repetition. The opening sentence is dense with a long checklist, but each item is a distinct check an agent would want to know about, so the length is earned rather than padded.

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 seven-parameter tool with zero schema descriptions, no annotations, and no output schema, the description covers parameters and computed diagnostics thoroughly. The notable missing piece is any indication of the return shape (a report dict, a per-feature table, a verdict field), which no output schema supplies on its behalf.

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%, yet the Args block documents all seven parameters with meaningful semantics beyond their names: target and id_col are excluded from the comparison, time_col and group_col are auto-detected when omitted, and max_rows bounds sampling for the heavier checks. The one omission is path format/acceptability for train_path and test_path.

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 ('Check whether the test set looks like the training set') and then enumerates the concrete diagnostics: column/dtype mismatches, unseen categories, PSI and KS per feature, adversarial-validation AUC, time-ordering, and unseen keys. That level of detail makes it unmistakable against siblings like profile_dataset or cv_baseline, which do not compare two tables.

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 purpose strongly implies the usage context (validating a train/test split before modeling), and the parenthetical 'no target column needed' clarifies one precondition. However, it never states when to prefer this over profile_dataset, nor any exclusion such as 'not for comparing two training sets' or cost expectations. Usage is inferable but not explicit.

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

cv_baselineA

Cross-validated gradient-boosting baseline reported next to a no-skill baseline. Encoders are fitted inside each training fold, so the scores are free of preprocessing leakage. With time_col the folds follow time; with group_col no group is split across folds. In both cases the same model is also scored with random folds, and the tool says whether random validation would overstate the score.

Args: train_path: training table. target: target column. id_col: ID column, excluded from the features. task: 'auto', 'binary', 'multiclass' or 'regression'. metric: the competition metric. Binary: roc_auc, pr_auc, log_loss, accuracy, f1, mcc. Multiclass: log_loss, accuracy, macro_f1, roc_auc_ovr, qwk, map@3 (any k). Regression: rmse, rmsle, mae, mape, r2, qwk. Default: roc_auc / log_loss / rmse. time_col: date or time-index column; folds train on the past and score the next time block. group_col: key column (customer, store, patient...); a group never sits in both parts of a fold. n_splits: number of folds. max_rows: train on a random sample of this many rows. oof_path: optional CSV path to save out-of-fold predictions.

NameRequiredDescriptionDefault
taskNoauto
id_colNo
metricNo
targetYes
max_rowsNo
n_splitsNo
oof_pathNo
time_colNo
group_colNo
train_pathYes

TDQS

A4/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 that encoders are fitted inside each fold (leakage-free), that time_col produces forward-chaining folds and group_col produces group-disjoint folds, and that a random-fold comparison is always run and judged for optimism. It stops short of saying whether anything is persisted besides the optional oof_path or how long the run takes.

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?

Behavioral guarantees are front-loaded in the opening paragraph and the argument list follows, so structure is strong and each entry adds information. It is somewhat long, and the hard-wrapped line breaks add noise, but no sentence is filler.

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 ten-parameter tool with no output schema, the description gives enough to call it correctly: input semantics, fold behavior, metric choices, and a sketch of the result (skill vs no-skill comparison, overstatement verdict). It does not describe the returned object's structure, which keeps it from being fully complete.

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 coverage is 0% and the description compensates fully, documenting all ten parameters. It enumerates the metric vocabulary per task type with defaults (roc_auc / log_loss / rmse), explains that id_col is dropped from features, and gives real semantics for time_col ('folds train on the past and score the next time block') and group_col ('a group never sits in both parts of a fold').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb and resource ('cross-validated gradient-boosting baseline reported next to a no-skill baseline') and frames it as an evaluation tool, which separates it from siblings like fit_predict and explain_model. It never names an alternative directly, so the differentiation is inferred rather than stated.

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?

Usage is implied: you run this to get a trustworthy CV estimate before committing to a model. There is no explicit when-to-use versus fit_predict, no stated prerequisites (e.g., data must already be loaded, target must exist), and no when-not-to-use guidance.

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

explain_modelA

Which features matter? Permutation importance of a gradient-boosting model on a hold-out split (the latest 20% in time with time_col, 20% of the groups with group_col, else a random 20%).

Args: train_path: training table. target: target column. id_col: ID column, excluded from the features. task: 'auto', 'binary', 'multiclass' or 'regression'. time_col: hold out the latest rows by this column. group_col: hold out whole groups of this column. top_k: number of features to return. max_rows: use a random sample of this many rows.

NameRequiredDescriptionDefault
taskNoauto
top_kNo
id_colNo
targetYes
max_rowsNo
time_colNo
group_colNo
train_pathYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden, and it does disclose meaningful behavior beyond the schema: the exact hold-out construction (latest 20% by time_col, 20% of groups by group_col, else random 20%) and the max_rows sampling. However, it says nothing about side effects (does it persist a model or artifact?), expected runtime, or the shape of the returned importance list, leaving real gaps for a training tool with zero annotation coverage.

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 purpose question is front-loaded, the hold-out rules are stated compactly, and the Args block adds meaning rather than repeating schema titles. Slightly wordy in the parenthetical hold-out explanation, but every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an eight-parameter training/explanation tool with no output schema and no annotations, the description covers inputs and validation strategy well but leaves the return value (ranked feature list? scores?) and any file/artifact side effects undefined. An agent could invoke it correctly but could not predict what comes back.

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%, and the description compensates well by glossing all eight parameters, including the allowed values for task ('auto', 'binary', 'multiclass', 'regression') which the schema does not enumerate, and the semantics of max_rows (random row sample) and id_col (excluded from features). The glosses are terse, so it falls short of 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete question ('Which features matter?') and names the specific technique (permutation importance of a gradient-boosting model on a hold-out split), which clearly distinguishes it from siblings like profile_dataset or cv_baseline. It stops short of naming those siblings explicitly, keeping it at 4 rather than 5.

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 phrasing 'Which features matter?' implies the use case (feature ranking after or before modeling), but there is no explicit statement of when to choose this over fit_predict or cv_baseline, and no prerequisites or exclusions. Usage must be inferred from the hold-out methodology described.

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

fit_predictA

Fit the baseline model on all training rows and write a submission file in the sample submission's format: one probability or value per row, a label, space-separated top-k labels (MAP@k) or one probability column per class. Run check_submission on the result before uploading.

Args: train_path: training table. test_path: test table. target: target column. id_col: ID column, copied to the submission. out_path: where to write the submission CSV. sample_submission_path: the competition's sample submission (sets the output format). task: 'auto', 'binary', 'multiclass' or 'regression'. metric: the competition metric (rmsle trains on log1p(target); map@k writes k labels). group_col: key column to leave out of the features, as in cv_baseline.

NameRequiredDescriptionDefault
taskNoauto
id_colYes
metricNo
targetYes
out_pathYes
group_colNo
test_pathYes
train_pathYes
sample_submission_pathNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full load. It does disclose genuine behavior: a CSV is written to out_path, the output layout is dictated by the sample submission, rmsle triggers a log1p transform on the target, and map@k emits k space-separated labels. It omits whether an existing file at out_path is overwritten, whether a model artifact is persisted, and what the tool reports back.

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 purpose is front-loaded in one dense sentence before the Args block, which is the right structure for a nine-parameter tool. A few entries waste words by restating the parameter name, and the format enumeration in the first sentence is long but load-bearing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter, no-annotation, no-output-schema tool, the description covers inputs and file side effects well. The gap is the return side: with no output schema, the agent is never told what fit_predict reports (scores, the written path, a summary) or how failures surface.

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 coverage is 0%, so the Args block is the only documentation and it covers all nine parameters. Several entries add real meaning beyond the names (id_col 'copied to the submission', sample_submission_path 'sets the output format', group_col 'leave out of the features, as in cv_baseline', metric's rmsle/map@k effects). train_path and test_path are bare restatements ('training table', 'test table'), and the allowed task values are listed but their effect of 'auto' is unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb chain (fit the baseline model, write a submission file) and states the scope ('all training rows') plus the format rule (follows the sample submission). It implicitly distinguishes itself from cv_baseline by producing a file and from check_submission by delegating validation, but it never states the contrast outright.

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?

There is real workflow guidance: 'Run check_submission on the result before uploading' and the note that map@k/rmsle change behavior. However, there is no explicit when-to-use-this-vs-cv_baseline or explain_model guidance, and no prerequisites (does cv_baseline need to run first?).

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

inspect_competitionA

Start here. Read a competition or project folder and say what kind of problem it is: train / test / sample-submission files, target and ID columns, task, submission format and a likely metric, whether the test rows lie later in time or belong to new groups (customers, stores...), extra tables that need a join, image / text content, and the exact tool calls to make next.

Args: folder: directory holding the competition files (for example /kaggle/input/).

NameRequiredDescriptionDefault
folderYes

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 load and does well: it discloses the breadth of what is read (all files in the folder, schema, splits, joins, media) and that it emits recommended next calls, which implies a read-only reconnaissance operation. It does not state that nothing is modified, how long a large folder scan takes, or how it behaves on an invalid/empty folder.

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 imperative 'Start here' is front-loaded, and the capability list is dense but each clause names a distinct thing the agent needs to know. The 'Args: folder:' block is slightly redundant with the schema but short; overall there is little wasted wording.

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?

No output schema and no annotations means the description must convey both purpose and result shape, which it does by enumerating every category of finding. Remaining gaps — error behavior on a bad path, recursion depth, runtime cost — are minor for a read-only inspection tool.

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 coverage is 0% for the single required 'folder' parameter, so the description must compensate. It does: it explains the parameter is the 'directory holding the competition files' and gives a concrete example form (/kaggle/input/<competition>), which is more than the schema's bare 'string / Folder'.

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+resource ('Read a competition or project folder') and then enumerates exactly what it reports: file kinds, target/ID columns, task, submission format, likely metric, temporal/group split detection, extra join tables, media content. This is far more specific than sibling names like profile_dataset or compare_train_test, letting an agent distinguish the broad reconnaissance tool from the narrower ones.

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?

'Start here' explicitly establishes this as the entry point in the workflow, and 'the exact tool calls to make next' tells the agent this tool routes onward to siblings. It stops short of naming which sibling to use under which circumstance or stating when this tool should be skipped, so it's clear context rather than full when/when-not guidance.

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

profile_datasetA

Profile a CSV/Parquet table: shape, column types, missing values, cardinality, duplicate rows, target balance and warnings (constant or ID-like columns, possible target leakage, date columns, repeated keys, free-text and file-path columns).

Args: path: file path of the table. target: name of the target column, if the table has one. id_col: name of the ID column, which is excluded from the feature checks. max_rows: profile a random sample of this many rows (default: all rows).

NameRequiredDescriptionDefault
pathYes
id_colNo
targetNo
max_rowsNo

TDQS

A3.8/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 it does disclose genuinely non-obvious behavior: max_rows takes a RANDOM sample rather than the head, and defaults to all rows. It also reveals that the tool emits diagnostic warnings (constant/ID-like columns, target leakage, date columns, repeated keys, free-text and file paths), which tells the agent the output is advisory and possibly noisy. It stops short of stating read-only/no side effects, memory or runtime behavior on large files, or how warnings are surfaced.

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?

Front-loaded: the first sentence delivers the core capability and output inventory, then a compact Args block maps each parameter to its meaning. The long parenthetical warning list is dense but each item is informative rather than filler; the docstring-style Args formatting is slightly verbose relative to the terseness of the rest.

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 four-parameter, read-only profiling tool with no annotations and no output schema, the description effectively serves as the return-value contract by naming every reported statistic. An agent knows what it will get and how sampling affects it. What is missing is the shape of the response (single report object? text?) and any limitations on file size or format.

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% and the titles are bare ('Path', 'Id Col', 'Target', 'Max Rows'), so the description must compensate, and it largely does: path is scoped to a CSV/Parquet table, id_col is defined by its effect (excluded from feature checks), and max_rows is defined by mechanism (random sample) and default (all rows). Remaining gaps are minor but real — no format/syntax guidance for path and no statement of what happens if target or id_col names don't exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Profile a CSV/Parquet table') and then enumerates exactly what is computed: shape, column types, missing values, cardinality, duplicates, target balance and warnings. That enumeration implicitly separates it from siblings like compare_train_test or cv_baseline, but it never explicitly names which sibling to prefer for overlapping questions.

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?

Usage is only implied: the Args section hints that target is used for balance/leakage checks and id_col is excluded from feature checks, so an agent can infer when these matter. There is no statement of when to call this versus inspect_competition or compare_train_test, and no prerequisites (e.g. file must be local, supported formats) are given.

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.

  1. 7 tool updatesv0.2.0
    • First observedcheck_submission
    • First observedcompare_train_test
    • First observedcv_baseline
    • First observedexplain_model
    • First observedfit_predict
    • First observedinspect_competition
    • First observedprofile_dataset

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation4/5

The tools cover distinct stages of a tabular ML workflow, and descriptions clarify boundaries. Minor overlap exists between profile_dataset and inspect_competition (both inspect data) and among cv_baseline, explain_model, and fit_predict (all fit models), but each targets a different output.

Naming Consistency4/5

All names are snake_case and mostly follow a verb_noun pattern (profile_dataset, compare_train_test, explain_model, check_submission). cv_baseline is a noun phrase and fit_predict contains two verbs, but the overall style remains consistent and readable.

Tool Count5/5

Seven tools form a tight workflow from competition inspection to submission validation. Every tool has a clear role and none feels redundant or missing for the intended scope.

Completeness4/5

The surface covers inspection, profiling, train/test comparison, cross-validation, model explanation, prediction, and submission validation—the core lifecycle for tabular competitions. Minor gaps remain: no explicit tool for joining extra tables or handling multi-table relations, and no tuning or feature-engineering beyond a baseline.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Gives LLM agents access to local and remote data via databases, files, graphs, and structured documents, along with a full data science toolkit for analysis and modeling.
    14
    Apache 2.0
  • F
    license
    Not graded
    quality
    F
    maintenance
    Provides MCP-compatible tools for data analysis, including file reading, Python/SQL execution, and hypothesis testing. Enables autonomous data analysis agents to interact with a sandboxed environment.
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLMs to safely perform sandboxed file operations, evaluate math expressions, and run read-only SQL queries on a sample database, plus access resources and prompt templates.
    MIT