CSV Insights MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CSV Insights MCPshow me revenue by product from sales.csv"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CSV Insights MCP
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 | no |
| Row count; per column: inferred type, empties, distinct, samples, min/max/mean | no |
| SQL-like SELECT: | no |
| Sum/mean/median/std/quartiles for numbers, top values for text, plain-language highlights | no |
| GROUP BY 1–5 columns with | no |
| Rows × columns cross-tab of an aggregated value (≤50 columns) | no |
| Preview trim / collapse spaces / drop empty rows / dedupe / case / number normalisation; optional | new file only |
| 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
Local (recommended: data stays on your computer)
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.jsRemote (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-mcpClient config: {"url": "https://your-host/mcp", "headers": {"Authorization": "Bearer change-me"}}. GET /health returns {"ok":true}.
Configuration
Env var | Default | Purpose |
| working directory | The only folder files are read from |
| 52428800 (50 MB) | Max file size |
| 500000 | Max rows |
| unset | HTTP only: require |
|
| 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,.tsvand.txtfiles 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.1by default.Accurate annotations. Read tools are
readOnlyHint: true; the two file-producing tools arereadOnlyHint: 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).
Explore. Ask: "What's in sales.csv?" → Expect the bot to call
list_csv_files+profile_csvand report 11 rows, 6 columns,revenueas a number column (max 1200) anddateas a date column (2026-07-01 to 2026-09-12).Business question. Ask: "Which region made the most revenue?" → Expect
group_byand the answer South, $1,212.00, followed by East ($1,159.99), West and North.Pivot. Ask: "Units by region and product as a table." → Expect
pivot_table; North × Planner PDF = 8.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>.csvwith 10 data rows.examples/sales.csvis unchanged.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=devThe 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 toolsclean_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).
| Name | Required | Description | Default |
|---|---|---|---|
| case | No | ||
| file | Yes | CSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv' | |
| dedupe | No | Remove exact duplicate rows (case-insensitive) | |
| save_as | No | Output file name (written as csv-insights-output/<name>.csv) | |
| dedupe_on | No | Treat rows as duplicates when these columns match | |
| collapse_spaces | No | ||
| drop_empty_rows | No | Default true | |
| trim_whitespace | No | Default true | |
| normalize_numbers | No | Columns where '$1,200.00' becomes '1200' |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Category / x-axis column | |
| y | No | Numeric column (omit to count rows) | |
| agg | No | sum | |
| top | No | Keep only the first N points after sorting (default 50) | |
| file | Yes | CSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv' | |
| sort | No | Default: label for line, value_desc for bar | |
| type | Yes | ||
| title | No | ||
| where | No | Row filters, all must match (AND) | |
| output_name | Yes | File name for the chart (written as csv-insights-output/<name>.svg) |
TDQS
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.
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.
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.
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.
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.
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 aggregateBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| by | Yes | ||
| file | Yes | CSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv' | |
| sort | No | ||
| limit | No | ||
| where | No | Row filters, all must match (AND) | |
| metrics | Yes |
TDQS
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.
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.
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.
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.
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.
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 filesARead-onlyIdempotent
List .csv/.tsv files inside the allowed directory (recursive, max depth 4).
| Name | Required | Description | Default |
|---|---|---|---|
| subdirectory | No | Optional subfolder relative to the allowed directory |
TDQS
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.
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.
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.
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.
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.
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 tableBRead-onlyIdempotent
Cross-tabulate: one column as rows, another as columns, aggregating a value column. Max 50 output columns.
| Name | Required | Description | Default |
|---|---|---|---|
| agg | No | sum | |
| file | Yes | CSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv' | |
| rows | Yes | Column whose values become rows | |
| value | No | Column to aggregate (omit for counts) | |
| where | No | Row filters, all must match (AND) | |
| columns | Yes | Column whose values become columns |
TDQS
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.
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.
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.
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.
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.
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 schemaARead-onlyIdempotent
Return row count and, per column: inferred type (number/date/boolean/string), empty count, distinct count, samples and min/max/mean.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | CSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv' |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotent
SQL-like SELECT over a CSV: choose columns, WHERE conditions, ORDER BY, DISTINCT, LIMIT/OFFSET. Numeric-aware comparisons. Returns at most 1000 rows.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | CSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv' | |
| limit | No | Default 100 | |
| where | No | Row filters, all must match (AND) | |
| offset | No | ||
| select | No | Columns to return (default all) | |
| distinct | No | ||
| order_by | No |
TDQS
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.
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.
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.
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.
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.
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 CSVBRead-onlyIdempotent
Descriptive statistics: sum/mean/median/std/quartiles for numeric columns, top values for text columns, plus plain-language highlights.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | CSV path relative to the allowed directory (CSV_INSIGHTS_DIR), e.g. 'sales/2026-q3.csv' | |
| columns | No |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v1.0.0- First observed
clean_preview - First observed
create_chart - First observed
group_by - First observed
list_csv_files - First observed
pivot_table - First observed
profile_csv - First observed
query_csv - First observed
summarize_csv
TDQS
Scored across 8 tools
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.
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.
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.
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
Related MCP Connectors
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Ask questions about a CSV in plain English and get answers, charts and cleaned data back.
21
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables conversational analysis of CSV and Parquet files through natural language, providing statistics, summaries, data type information, and comprehensive multi-step data analysis.-
- FlicenseBqualityDmaintenanceEnables Claude to directly access, query, and analyze local CSV files using natural language, keeping data private and local.41-
- FlicenseNot gradedqualityDmaintenanceEnables 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-
- AlicenseNot gradedqualityBmaintenanceQuery 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.4MIT