Skip to main content
Glama
ppiotis
by ppiotis

CSV Insights MCP

CI License: MIT

Private, local spreadsheet analysis for Grok Bot and Cursor. Ask questions about your sales exports, bank statements or any CSV and get real numbers: profiles, filtered queries, group-bys, pivots, cleaned copies and charts. Your data never leaves your machine: no network calls, no accounts, no API keys, no telemetry.

Why

Pasting a spreadsheet into chat is lossy, slow, and leaks data to wherever the transcript goes. CSV Insights lets the agent compute over the file locally and only return the aggregates it needs. Ideal for solopreneur sales and finance questions: "revenue by product last quarter", "who are my top 10 customers", "dedupe this export".

Related MCP server: csv-mcp-server

Tools

Tool

What it does

Writes?

list_csv_files

List .csv/.tsv files in the allowed folder

no

profile_csv

Row count; per column: inferred type, empties, distinct, samples, min/max/mean

no

query_csv

SQL-like SELECT: select, where (= != > >= < <= contains starts_with in is_empty not_empty), order_by, distinct, limit (≤1000), offset

no

summarize_csv

Sum/mean/median/std/quartiles for numbers, top values for text, plain-language highlights

no

group_by

GROUP BY 1–5 columns with count sum mean min max median count_distinct

no

pivot_table

Rows × columns cross-tab of an aggregated value (≤50 columns)

no

clean_preview

Preview trim / collapse spaces / drop empty rows / dedupe / case / number normalisation; optional save_as writes a cleaned copy

new file only

create_chart

Aggregate + render a bar or line chart to SVG

new file only

Numbers are parsed robustly: $1,200.00 → 1200, (45) → −45, 12% → 12, R 99 → 99.

Install

Requires Node.js 20+.

Grok Bot / Cursor plugin: add this plugin from the marketplace, or add to your .mcp.json:

{
  "mcpServers": {
    "csv-insights": {
      "command": "npx",
      "args": ["-y", "https://github.com/ppiotis/csv-insights-mcp/archive/refs/tags/v1.0.0.tar.gz"],
      "env": { "CSV_INSIGHTS_DIR": "/absolute/path/to/your/csv/folder" }
    }
  }
}

If CSV_INSIGHTS_DIR is not set, the server uses its working directory (your workspace in Cursor).

From source:

git clone https://github.com/ppiotis/csv-insights-mcp && cd csv-insights-mcp
npm ci && npm run build
CSV_INSIGHTS_DIR=./examples node dist/stdio.js

Remote (Streamable HTTP)

The same server speaks Streamable HTTP at /mcp (stateless, JSON responses). Because it reads files from its own disk, host it next to the data (your machine, a NAS, or a private team server) rather than on a public multi-tenant host.

CSV_INSIGHTS_DIR=/data MCP_AUTH_TOKEN=change-me PORT=3000 node dist/serve-http.js
# or
docker build -t csv-insights-mcp . && docker run -p 3000:3000 -v "$PWD/examples:/data" -e CSV_INSIGHTS_DIR=/data -e MCP_AUTH_TOKEN=change-me csv-insights-mcp

Client config: {"url": "https://your-host/mcp", "headers": {"Authorization": "Bearer change-me"}}. GET /health returns {"ok":true}.

Configuration

Env var

Default

Purpose

CSV_INSIGHTS_DIR

working directory

The only folder files are read from

CSV_INSIGHTS_MAX_BYTES

52428800 (50 MB)

Max file size

CSV_INSIGHTS_MAX_ROWS

500000

Max rows

MCP_AUTH_TOKEN

unset

HTTP only: require Authorization: Bearer <token>

HOST / PORT

127.0.0.1 / 3000

HTTP bind address

Security & privacy

  • No network. The server makes zero outbound requests and has no telemetry. Dependencies: the MCP SDK, zod, papaparse.

  • Allowlisted folder. Every path is resolved inside CSV_INSIGHTS_DIR; .., absolute paths and symlinks that escape are rejected (unit-tested). Only .csv, .tsv and .txt files are read.

  • Least privilege writes. Source files are never modified. Cleaned copies and charts go only to csv-insights-output/ inside the folder, file names are sanitised, and existing files are never overwritten.

  • Resource limits. File-size and row caps, result caps (≤1000 rows, ≤50 pivot columns), 1 MB HTTP body cap.

  • No secrets. Nothing to configure for normal use. The optional HTTP bearer token is compared in constant time. HTTP binds to 127.0.0.1 by default.

  • Accurate annotations. Read tools are readOnlyHint: true; the two file-producing tools are readOnlyHint: false, destructiveHint: false.

Reviewer test plan

Setup: add the plugin with CSV_INSIGHTS_DIR pointing at this repo's examples/ folder (contains sales.csv, 11 orders with one duplicate row, one padded value and one blank cell).

  1. Explore. Ask: "What's in sales.csv?" → Expect the bot to call list_csv_files + profile_csv and report 11 rows, 6 columns, revenue as a number column (max 1200) and date as a date column (2026-07-01 to 2026-09-12).

  2. Business question. Ask: "Which region made the most revenue?" → Expect group_by and the answer South, $1,212.00, followed by East ($1,159.99), West and North.

  3. Pivot. Ask: "Units by region and product as a table." → Expect pivot_table; North × Planner PDF = 8.

  4. Clean. Ask: "Are there duplicates? Give me a cleaned copy." → Expect a preview first (1 duplicate, 1 trimmed cell), then after you confirm, csv-insights-output/<name>.csv with 10 data rows. examples/sales.csv is unchanged.

  5. Chart + security. Ask: "Chart revenue over time (by date) as a line chart" → an SVG appears in csv-insights-output/. Then ask: "Profile ../../etc/passwd" → Expect a clear refusal: "Path is outside the allowed directory".

Development

npm ci
npm test          # build + unit tests + e2e (stdio and HTTP)
npm audit --omit=dev

The e2e suite spawns the real server over stdio and over Streamable HTTP (with bearer auth) and calls every tool through an MCP client.

License

MIT © Paris Piotis

Available Tools

8 tools
clean_previewClean / dedupe previewA

Preview cleaning (trim whitespace, collapse spaces, drop empty rows, dedupe, case normalisation, number normalisation) without touching the source. Set save_as to write the cleaned copy to csv-insights-output/ (never overwrites).

ParametersJSON Schema
NameRequiredDescriptionDefault
caseNo
fileYesCSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv'
dedupeNoRemove exact duplicate rows (case-insensitive)
save_asNoOutput file name (written as csv-insights-output/<name>.csv)
dedupe_onNoTreat rows as duplicates when these columns match
collapse_spacesNo
drop_empty_rowsNoDefault true
trim_whitespaceNoDefault true
normalize_numbersNoColumns where '$1,200.00' becomes '1200'

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, and the description adds genuinely useful context beyond them: the source file is never modified, output is written to csv-insights-output/, and writes never overwrite. It is consistent with the annotations (an output write that is non-destructive). It does not explain what happens on a naming collision or whether the write is atomic, but the safety story 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?

Two dense sentences with zero filler: the operation set leads and the persistence behaviour follows. Every clause maps to an actionable parameter or behavioural fact.

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?

With 9 parameters, a nested case object, and no output schema, the description covers the transforms and the write destination well. It does not say what the preview actually returns (e.g. sample of cleaned rows, row counts, or diff), which is the main gap for a 9-parameter preview 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 78% (baseline 3), and the description adds real meaning by enumerating the transforms that map to the boolean/array parameters and by clarifying that save_as writes to csv-insights-output/<name>.csv. It stops short of clarifying interactions such as dedupe vs dedupe_on precedence.

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 names a specific operation (preview cleaning) on a specific resource (CSV data) and enumerates the exact transforms applied (trim, collapse, drop empty rows, dedupe, case/number normalisation). No sibling tool (summarize_csv, profile_csv, query_csv, etc.) performs cleaning, so it is functionally distinct, but the description never names or contrasts those siblings explicitly.

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?

It conveys the core usage contract: preview mode by default, and set save_as to persist a cleaned copy. However, it gives no explicit when-to-use/when-not guidance and does not say how to move from preview to the cleaned dataset for downstream tools, leaving selection largely implied.

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

create_chartCreate chart (SVG)A

Aggregate a CSV and render a bar or line chart as an SVG file in csv-insights-output/. Returns the file path and the plotted data.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesCategory / x-axis column
yNoNumeric column (omit to count rows)
aggNosum
topNoKeep only the first N points after sorting (default 50)
fileYesCSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv'
sortNoDefault: label for line, value_desc for bar
typeYes
titleNo
whereNoRow filters, all must match (AND)
output_nameYesFile name for the chart (written as csv-insights-output/<name>.svg)

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the write nature is covered. The description usefully adds the output side effect (an SVG written under csv-insights-output/) and the return payload, but says nothing about overwrite behavior on name collisions or the fixed output directory constraint.

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?

Two tight sentences, front-loaded with the action and ending with the return value. No filler, though it is arguably a bit terse for a 10-parameter tool.

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 exists, and the description correctly covers the return value (file path plus plotted data) and the write destination. For a complex 10-parameter tool it could say more about filtering/aggregation behavior, but the essentials for correct invocation are present.

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 coverage is 70%, below the high-coverage threshold, so the description should compensate. It only hints at the chart type (bar/line) and confirms a CSV input; it adds no meaning for the 10 parameters such as agg, sort, top, or where, all of which rely on schema text.

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 chain (aggregate a CSV, render a bar/line chart) and the concrete artifact (SVG file in csv-insights-output/). None of the siblings (group_by, pivot_table, query_csv) render charts, so the agent can route to this tool unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no reference to alternatives such as group_by or pivot_table for non-visual aggregation. The agent must infer that this is the visualization step, but nothing states when it should be preferred or avoided.

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

group_byGroup by and aggregateB
Read-onlyIdempotent

GROUP BY one or more columns with aggregations (count, sum, mean, min, max, median, count_distinct). Sorted by the first metric descending unless 'sort' is given.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
fileYesCSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv'
sortNo
limitNo
whereNoRow filters, all must match (AND)
metricsYes

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety and idempotency are covered. The description adds non-annotation behavioral context by disclosing the default sort order: results are sorted by the first metric descending unless 'sort' is given.

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?

Two sentences, front-loaded with the core operation and followed immediately by the default ordering rule. Every word earns its place, and there is no filler.

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

Completeness2/5

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

For a tool with six parameters, nested objects, no output schema, and low schema description coverage, the description is too thin. It omits guidance on filters, limits, return shape, and how metrics aliases work, leaving important context to be inferred.

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

Parameters2/5

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

Schema description coverage is only 33%, so the description carries a heavy burden it does not meet. It restates the aggregation enum and explains the default sort behavior, but says nothing about the file, by, where, limit, or metrics alias parameters, nor about how nested filters work.

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 states a specific operation — GROUP BY on columns with aggregations — and names the available aggregation functions. It clearly distinguishes this tool's core purpose, though it does not explicitly differentiate it from similar siblings like pivot_table or query_csv.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no mention of alternatives such as pivot_table or query_csv. The description implies a grouped-aggregation use case but leaves the agent to infer when this tool is preferable.

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

list_csv_filesList CSV filesA
Read-onlyIdempotent

List .csv/.tsv files inside the allowed directory (recursive, max depth 4).

ParametersJSON Schema
NameRequiredDescriptionDefault
subdirectoryNoOptional subfolder relative to the allowed directory

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavior: the file-type filter (.csv/.tsv) and the recursion bound (max depth 4), which no annotation conveys.

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?

One sentence, zero filler, with the scope and the two key constraints front-loaded. Nothing is repeated from the schema or annotations.

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 read-only, single-parameter discovery tool with rich annotations, the description covers what it lists and where. The only minor gap is that it does not say what form the result takes (e.g., relative paths), and there is no output schema to compensate.

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 100% and the single optional `subdirectory` parameter is already documented there, so the baseline is 3. The description adds no syntax, path semantics, or default-behavior detail for that parameter.

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?

States a specific verb ('List') and resource ('.csv/.tsv files'), plus the scoping constraint (allowed directory). It implicitly separates itself from content-oriented siblings like query_csv or summarize_csv, though it never names or contrasts 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?

Usage is only implied: the tool is clearly a discovery step before summarize_csv/profile_csv/query_csv, but the description never says when to use it versus those siblings or any precondition. No explicit 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.

pivot_tablePivot tableB
Read-onlyIdempotent

Cross-tabulate: one column as rows, another as columns, aggregating a value column. Max 50 output columns.

ParametersJSON Schema
NameRequiredDescriptionDefault
aggNosum
fileYesCSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv'
rowsYesColumn whose values become rows
valueNoColumn to aggregate (omit for counts)
whereNoRow filters, all must match (AND)
columnsYesColumn whose values become columns

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered structurally. The description adds one genuine behavioral fact not present in structured data — the 50 output-column cap — but says nothing about behavior when the cap is exceeded, how empty results are shaped, or error conditions.

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?

A single front-loaded sentence that defines the operation, its three roles, and the hard output limit in roughly twenty words. Terse but every clause carries information; no padding 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?

With nodescription of return values required (no output schema) and a dense schema plus safety annotations, the description supplies the one piece of missing operational context, the 50-column output limit. What remains missing is guidance on the agg default's interaction with 'value' and the AND semantics of 'where', though the schema covers the latter.

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 83%, so the schema already documents file, rows, columns, value, and where. The description's mapping of columns to row/column/value roles largely restates the schema, so the baseline 3 applies with no meaningful added semantics.

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?

States a specific verb (cross-tabulate) and the three input roles (rows column, columns column, value column), which is precise enough that an agent can distinguish it from a plain aggregation tool. However it never distinguishes itself from the sibling group_by, which is the closest alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description defines what a pivot is but gives no when-to-use, when-not-to-use, or alternative routing. With 'group_by' in the sibling list, an agent has no stated basis for choosing pivot_table over a one-dimensional grouping, which is the primary selection risk here.

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

profile_csvProfile CSV schemaA
Read-onlyIdempotent

Return row count and, per column: inferred type (number/date/boolean/string), empty count, distinct count, samples and min/max/mean.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesCSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv'

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds the computed statistics (types, emptiness, distinctness, min/max/mean), which is useful, but says nothing about failure modes such as missing files, oversized files, or malformed rows.

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?

One dense sentence with no filler, front-loading row count before the per-column breakdown. It is appropriately sized for the tool's scope, though the abrupt fragment style reads as a field list rather than a description.

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?

With no output schema, the description carries the burden of describing return values and does so explicitly and completely. The remaining gap is contextual routing — nothing tells the agent when profiling beats summarize_csv or query_csv in this eight-tool family.

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 100%: the single 'file' parameter is documented in-schema as a path relative to CSV_INSIGHTS_DIR with an example. The description adds no further parameter meaning, so the baseline of 3 applies when the schema does all the work.

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?

States a specific verb ('Return') and precisely enumerates the resource: row count plus per-column type, empty count, distinct count, samples, and min/max/mean. An agent can tell this is a statistical profiling operation rather than a query or listing. It does not, however, name or distinguish itself from sibling summarize_csv, which reads similarly.

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 content implies the use case (exploratory profiling of a CSV's columns), but there is no explicit when-to-use, when-not-to-use, or comparison against the very similar summarize_csv, query_csv, and group_by siblings. An agent must infer the routing itself.

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

query_csvQuery CSV (SQL-like)A
Read-onlyIdempotent

SQL-like SELECT over a CSV: choose columns, WHERE conditions, ORDER BY, DISTINCT, LIMIT/OFFSET. Numeric-aware comparisons. Returns at most 1000 rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesCSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv'
limitNoDefault 100
whereNoRow filters, all must match (AND)
offsetNo
selectNoColumns to return (default all)
distinctNo
order_byNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety burden is lifted. The description adds genuinely new behavior: numeric-aware comparisons and a hard 1000-row return cap, both of which affect how an agent writes and interprets a query.

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?

Two dense sentences, front-loaded with the core capability, then the two behavioral facts that matter most (numeric comparison, row cap). No filler or restatement of the name.

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?

With no output schema, the description carries return-shape duty and does so by stating the 1000-row ceiling. It leaves the default limit of 100 to the schema and says nothing about error behavior for missing files or bad columns, which is a modest gap for a read query 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?

At 57% schema coverage, the description compensates by naming the role of nearly every parameter (columns, WHERE conditions, ORDER BY, DISTINCT, LIMIT/OFFSET). 'Numeric-aware comparisons' adds real semantic meaning about how the op/value pairs behave, beyond the raw enum.

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?

States a specific verb and resource (SQL-like SELECT over a CSV) and enumerates the operations it supports (select/where/order by/distinct/limit). This lets an agent separate it from aggregating siblings like group_by or pivot_table by inference, but it never names an alternative explicitly.

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 by 'SQL-like SELECT' — row-level filtering and projection — but there is no explicit when-to-use statement and no routing to summarize_csv, group_by, or pivot_table for aggregated views. An agent reading only this must infer the boundary itself.

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

summarize_csvSummarize CSVB
Read-onlyIdempotent

Descriptive statistics: sum/mean/median/std/quartiles for numeric columns, top values for text columns, plus plain-language highlights.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesCSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv'
columnsNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world behavior. The description usefully adds the output contents (sum/mean/median/std/quartiles and top text values), which matters because there is no output schema, but it omits behavioral details such as how columns are defaulted or how errors are handled.

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?

A single dense sentence that front-loads the core operation and output details with no filler. Every phrase 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?

With no output schema, the description usefully explains the return values, and annotations cover safety. However, it leaves the columns parameter and default column selection unexplained, which is a meaningful gap for a two-parameter tool.

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

Parameters2/5

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

Schema description coverage is only 50%: the file parameter is documented, but the columns parameter has no description in either the schema or the tool description. The description could have explained how to use columns to scope the summary, but it does not.

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?

States a specific verb (summarize) and resource (CSV), and enumerates the exact statistics produced for numeric and text columns. It does not differentiate itself from the sibling profile_csv tool, which likely overlaps in purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool computes but gives no guidance on when to use it versus siblings like profile_csv, query_csv, or group_by. There are no prerequisites or exclusions mentioned.

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. 8 tool updatesv1.0.0
    • First observedclean_preview
    • First observedcreate_chart
    • First observedgroup_by
    • First observedlist_csv_files
    • First observedpivot_table
    • First observedprofile_csv
    • First observedquery_csv
    • First observedsummarize_csv

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have distinct purposes (list, query, group_by, pivot_table, clean_preview, create_chart), but summarize_csv and profile_csv both return per-column statistics and could be confused. Descriptions help distinguish them (plain-language highlights vs. type inference/samples), so overlap is manageable.

Naming Consistency4/5

Consistent snake_case throughout, but verb placement varies: verb_noun (list_csv_files, summarize_csv, query_csv, create_chart) mixed with noun-style names (group_by, pivot_table) and an awkward clean_preview. Still readable and predictable enough.

Tool Count5/5

Eight tools is well-scoped for a CSV insight server, and each tool covers a distinct analysis capability (profiling, stats, querying, grouping, pivoting, cleaning, charting). No filler tools.

Completeness4/5

Strong coverage of the read/analyze lifecycle (list, profile, summarize, query, group, pivot, clean, chart). Minor gaps: no way to export query/group results and no cross-file join, but the core analysis surface is solid.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables Claude to directly access, query, and analyze local CSV files using natural language, keeping data private and local.
    4
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with local CSV and Parquet data files through natural language queries, facilitating tasks like summarizing datasets or retrieving specific information.
    4
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Query local CSV, Parquet, JSON and TSV files with real SQL via DuckDB. Gives your AI coding tool ground-truth data access instead of hallucinated answers.
    4
    MIT