mcp-csv-server
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., "@mcp-csv-servercalculate total sales by region in orders.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.
mcp-csv-server
An MCP server that lets an AI assistant preview, query, aggregate, and convert CSV/TSV data — safely, with no API key.
Give Claude (or any MCP client) the ability to actually work with spreadsheets: filter rows, sum/average/group columns, and turn CSV into JSON — instead of eyeballing a pasted table and guessing. Pure TypeScript, dependency-light, and runnable with zero credentials, so a reviewer can try it in one command.
日本語の概要
AIアシスタント(Claude等)に「CSV/業務データを正しく扱う力」を与えるMCPサーバです。表をそのまま 読ませて推測させるのではなく、行の絞り込み・列の集計(合計/平均/最大最小)・グループ集計・JSON変換を ツールとして提供します。APIキー不要で動くので、その場で試せます。
壊れにくいCSVパーサ:引用符・エスケープ(
"")・引用符内のカンマ/改行に対応(素朴なsplit(',')が壊れる実データを正しく処理)。型付きエラー+対処ヒント:
[UNKNOWN_COLUMN] Unknown column "x". Hint: Available columns: ...のように、AIにも人にも原因と対処が分かる。責務分離:
csv/(パース・クエリの純粋ロジック)/tools/(MCPツール定義)/server.ts(薄い配線)。テスト:パーサ・クエリ・ツールを19本のユニットテストで検証(全エラー経路含む)。CI緑。
Related MCP server: mix_server
Tools
Tool | What it does | Key inputs |
| Columns, total row count, and a sample |
|
| Filter / select / aggregate / group / limit |
|
| Convert CSV/TSV to JSON records |
|
aggregate supports count, sum, avg, min, max; where ops are
eq, ne, gt, gte, lt, lte, contains (ANDed together). Numbers tolerate
thousands separators ("2,000" → 2000).
Install & run
git clone https://github.com/takuyahoritacromtech/mcp-csv-server.git
cd mcp-csv-server
npm install
npm run buildUse with Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"csv": {
"command": "node",
"args": ["/absolute/path/to/mcp-csv-server/dist/index.js"]
}
}
}Restart the client; the csv_preview, csv_query, and csv_to_json tools appear.
Quick smoke test (no client needed)
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}' \
| node dist/index.js
# → {"result":{...,"serverInfo":{"name":"mcp-csv-server",...}},"jsonrpc":"2.0","id":1}Example: "total sales by region"
Given a csv_query call with:
{ "csv": "region,amount\nEast,1000\nWest,2000\nEast,500",
"groupBy": "region",
"aggregate": { "fn": "sum", "column": "amount" } }the tool returns:
{ "columns": ["region", "sum_amount"],
"rows": [{ "region": "East", "sum_amount": 1500 }, { "region": "West", "sum_amount": 2000 }],
"rowCount": 2 }Design notes (the "why")
A real CSV parser, not
split(',')— a small RFC 4180 state machine handles quoting, escaped quotes, and embedded delimiters/newlines. This is where naive tools silently corrupt data.Pure core, thin MCP shell — all logic lives in
csv/andtools/as pure functions, so it is unit-tested without the protocol.server.tsonly maps tools to the SDK and convertsCsvErrorinto clean tool errors.Typed errors with hints — every failure (
UNKNOWN_COLUMN,NON_NUMERIC_COLUMN,CSV_PARSE_ERROR, …) is actionable from the message alone.Validated inputs — every tool input is a Zod schema, so malformed calls are rejected before any work happens.
Testing
npm run check # typecheck + lint + test19 unit tests cover CSV parsing (quoting, TSV, CRLF, ragged rows, empty, unterminated quotes), the query engine (filter/select/aggregate/group/limit + every error code), and the three tools.
License
MIT © Takuya Horita
Available Tools
3 toolscsv_previewPreview CSVA
Parse CSV/TSV text and return its columns, total row count, and a few sample rows.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | Yes | Raw CSV/TSV text, including a header row. | |
| delimiter | No | Field delimiter; defaults to ",". | |
| limit | No | Sample rows to return (default 5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It accurately describes the main behavior (parsing, returning columns/row count/sample rows). It does not mention error handling or edge cases but is adequate for a simple preview tool without contradictions.
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?
Single sentence that front-loads the purpose and is entirely focused. No unnecessary words.
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 simple tool with no output schema, the description explains return values (columns, row count, sample rows) adequately. It could benefit from mentioning error handling, but overall it is complete enough for a 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 description coverage is 100%, providing baseline 3. The description reinforces the overall purpose but adds minimal parameter-specific meaning beyond what the schema already documents (e.g., 'a few sample rows' aligns with limit 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?
The description clearly states it parses CSV/TSV and returns columns, total row count, and sample rows, which is a specific verb+resource. It distinguishes itself from siblings (csv_query, csv_to_json) by focusing on previewing structure and sample data.
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 guidance on when to use this tool versus alternative siblings. The description implies usage for previewing but does not provide explicit when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
csv_queryQuery CSVA
Filter, select, aggregate (count/sum/avg/min/max), group, and limit CSV/TSV rows declaratively.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | Yes | ||
| delimiter | No | ||
| select | No | Columns to return (default all). | |
| where | No | Row filters, ANDed together. | |
| groupBy | No | Group rows by this column (with aggregate). | |
| aggregate | No | Aggregate, e.g. {fn:"sum",column:"amount"}. | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It lacks disclosure of behavioral traits such as read-only nature, side effects, or resource constraints beyond the schema's limit field. The description only lists operations.
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 sentence efficiently enumerates all supported operations without redundancy. Every word adds value.
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?
Given the tool's complexity (7 parameters, nested objects, no output schema), the description adequately outlines core capabilities but lacks details on default delimiter, ordering, or usage examples. Gaps remain for a fully informed invocation.
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 57%, with descriptions for select, where, groupBy, and aggregate. The tool description adds the list of aggregate functions but does not add meaning for undocumented parameters like csv and delimiter. Overall, the description provides marginal additional value.
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 clearly states the tool's ability to filter, select, aggregate (with specific functions listed), group, and limit CSV/TSV rows. This distinguishes it from siblings like csv_preview and csv_to_json, which have different purposes.
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 implies usage for declarative queries but does not explicitly state when to use it over alternatives. No when-not or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
csv_to_jsonCSV to JSONB
Convert CSV/TSV text into an array of JSON records.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | Yes | ||
| delimiter | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only states 'convert' without disclosing behavior like error handling, encoding, or how headers are treated. Minimal beyond the basic action.
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, ten words, front-loaded with key info. Efficient but could include a bit more detail without becoming verbose.
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 simple conversion tool without output schema or annotations, description lacks essential details like assuming first row as headers, output structure, or validation. Sibling tools don't clarify context.
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 0%, but description adds no meaning beyond schema. Parameters like delimiter and limit are not explained; agent must rely on names. Does not compensate for lack of schema descriptions.
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?
Description clearly states 'Convert CSV/TSV text into an array of JSON records,' specifying the verb, resource, and output format. Distinguishes from siblings csv_preview and csv_query.
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?
Implied usage for converting CSV/TSV to JSON, but no explicit guidance on when not to use or how to choose between siblings. No when-to-use vs when-not-to-use.
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.
3 tool updates
v0.1.0- First observed
csv_preview - First observed
csv_query - First observed
csv_to_json
TDQS
Scored across 3 tools
Each tool has a distinct purpose: preview shows structure, query filters/aggregates, to_json converts format. No overlap or ambiguity.
All tools follow the consistent pattern 'csv_' + verb: csv_preview, csv_query, csv_to_json. Naming is uniform and predictable.
Three tools cover the essential CSV operations (preview, query, convert) without being too sparse or excessive. Well-scoped for the domain.
Covers core operations but lacks write/update or other format conversions (e.g., to JSON is included, but to other formats like XML is missing). Minor gaps exist.
Maintenance
Related MCP Connectors
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
- OleanderOAuthdev.oleander
The all-in-one data stack for agents. Upload files, run SQL, evolve tables, and render charts.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceAI-first CSV analysis tool that enables AI agents to analyze, query, and audit large CSV files directly within conversations, turning raw data into actionable insights.2-
- 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.5-
- AlicenseNot gradedqualityDmaintenanceEnables querying Excel and CSV files using SQL via natural language, allowing AI assistants to analyze data without manual SQL writing.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to query tabular data (CSV/TSV) using natural language with cell-level citations, supporting multi-tenant workspaces, access control, and semantic search.27MIT