Convert ~/Downloads/orders.csv to xlsx and save it next to the original.
Paste this into Claude with the server connected.
sheet_convert. It reads xlsx, xlsm, xlsb, ods, csv and tsv, and writes the format you
ask for. The source is never overwritten unless you say so.
The other direction is the same call with the formats swapped, and it is the one that usually matters, because most tools that want a data file want CSV and most people are sent xlsx.
| Survives CSV to xlsx | Lost going xlsx to CSV |
|---|---|
| Every value, as text or number | Formulas, which become their last computed value |
| The header row | Formatting, colours, column widths |
| Row and column order | Every sheet but the one you converted |
| Unicode, including names with accents | Merged cells, which flatten |
None of that is a defect in the converter. CSV is a text format with no concept of a formula, a second sheet or a colour, and a converter that pretended otherwise would be inventing data.
Exports out of accounting software and bank portals are rarely clean. Two behaviours cover most of it. The delimiter is sniffed, so a semicolon-separated European export is read correctly rather than landing in one column. The header row is guessed, so a file with a title line, a blank line and then the real headers is read from the right row instead of treating "Sales report Q3" as a column name.
Check what it found before you trust it:
Open orders.xlsx and tell me what is in it.
Paste this into Claude with the server connected.
sheet_info returns the sheets, the dimensions and the header it detected. Thirty
seconds here saves a conversion that silently offset every row by one.
Converting is rarely the actual goal. sheet_query filters, sorts and groups with a
safe expression language that does no eval, sheet_add_column writes a computed column
such as [Qty] * [Unit Price], and sheet_write saves the result wherever you
name.
In orders.xlsx keep the open orders over 5 units, add a Total column of Qty times Unit Price, sort by Total descending and save it as orders-open.csv.
Paste this into Claude with the server connected.
Reading, querying, stats and find work on files up to 5,000 rows. Writes go up to 500 rows, and never a partial file above that: a write that would exceed the limit is refused rather than producing a truncated file that looks complete. That refusal is the important half. A silently truncated spreadsheet is the kind of error that gets discovered by an accountant three months later.
Pro removes both limits. Figures from data/facts.json; there are 7 tools on this
server, counted from data/tools.json.
No. It parses and writes the formats directly in JavaScript. Nothing is launched, nothing is uploaded, and it runs the same on a machine that has never had an office suite on it.
A conversion produces one sheet from one source. To assemble several, write each and combine them in a tool that does workbooks. What the server does well is the single-table case, which is what almost every data export actually is.
The delimiter sniffing handles the column separator. Decimal commas inside values are a separate question and depend on the file: check with sheet_info and a small sheet_read before converting a large file, because a value read as text rather than a number will sort and sum wrongly rather than error.
The read is refused with the row count, rather than answering from the first 5,000. Refusing is the honest behaviour: an answer computed from part of a file is worse than no answer, because you cannot tell by looking that it happened.
All MCP servers and prices · All guides · Buy the bundle $39