Turn a JSON file or pasted JSON into an Excel workbook and a CSV, right in the chat.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user asks what a JSON file contains, which keys or nesting it has, how many records it holds, or why it does not parse, before converting it. Takes the same file or json_text, records_path and orient as json_to_excel and returns the record count, the key paths with their types and fill rate, nesting depth, the lists inside the records, duplicate keys, an estimate of sheets, columns and cells, and suggestions (for example a records_path). Invalid JSON is reported with its line and column. Does not make a file and does not change the JSON.
The JSON file to convert, e.g. orders.json (UTF-8, or UTF-16 with a byte order mark), up to 5 MB.
How records are laid out, e.g. records. records (default): a list of objects, one row each (a single object is one row). columns: an object of equal-length lists, {"name":["Ann","Bo"],"age":[31,40]}. index: an object of objects keyed by id, {"u1":{...},"u2":{...}}; the key goes in column _key.
Instead of a file: the JSON itself, e.g. [{"name":"Ann","age":31},{"name":"Bo","age":40}]. Use either file or json_text.
Dotted key path to the part that holds the records, e.g. "data.items" for {"data":{"items":[...]}}. Use a number for a list item, e.g. "results.0.rows". Default: the whole document.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http json-to-excel https://json-to-excel.zovo.one/mcp
Use this when the user asks what a JSON file contains, which keys or nesting it has, how many records it holds, or why it does not parse, before converting it. Takes the same file or json_text, records_path and orient as json_to_excel and returns the record count, the key paths with their types and fill rate, nesting depth, the lists inside the records, duplicate keys, an estimate of sheets, columns and cells, and suggestions (for example a records_path). Invalid JSON is reported with its line and column. Does not make a file and does not change the JSON.
| Argument | Type | Description |
|---|---|---|
| file | object | The JSON file to convert, e.g. orders.json (UTF-8, or UTF-16 with a byte order mark), up to 5 MB. |
| orient | string | How records are laid out, e.g. records. records (default): a list of objects, one row each (a single object is one row). columns: an object of equal-length lists, {"name":["Ann","Bo"],"age":[31,40]}. index: an object of objects keyed by id, {"u1":{...},"u2":{...}}; the key goes in column _key. |
| json_text | string | Instead of a file: the JSON itself, e.g. [{"name":"Ann","age":31},{"name":"Bo","age":40}]. Use either file or json_text. |
| records_path | string | Dotted key path to the part that holds the records, e.g. "data.items" for {"data":{"items":[...]}}. Use a number for a list item, e.g. "results.0.rows". Default: the whole document. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file id, e.g. file_abc123."
},
"file_name": {
"type": "string",
"description": "Original file name if known, e.g. statement.pdf."
},
"mime_type": {
"type": "string",
"description": "Media type if known, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "Temporary download link for the file, supplied by ChatGPT."
}
},
"description": "The JSON file to convert, e.g. orders.json (UTF-8, or UTF-16 with a byte order mark), up to 5 MB."
},
"orient": {
"enum": [
"records",
"columns",
"index"
],
"type": "string",
"description": "How records are laid out, e.g. records. records (default): a list of objects, one row each (a single object is one row). columns: an object of equal-length lists, {\"name\":[\"Ann\",\"Bo\"],\"age\":[31,40]}. index: an object of objects keyed by id, {\"u1\":{...},\"u2\":{...}}; the key goes in column _key."
},
"json_text": {
"type": "string",
"maxLength": 1000000,
"description": "Instead of a file: the JSON itself, e.g. [{\"name\":\"Ann\",\"age\":31},{\"name\":\"Bo\",\"age\":40}]. Use either file or json_text."
},
"records_path": {
"type": "string",
"maxLength": 300,
"description": "Dotted key path to the part that holds the records, e.g. \"data.items\" for {\"data\":{\"items\":[...]}}. Use a number for a list item, e.g. \"results.0.rows\". Default: the whole document."
}
}
}Use this when the user wants to convert JSON to Excel or CSV, turn an API response or a JSON export into a spreadsheet, or flatten nested JSON into columns. Takes one attached .json file or pasted json_text, an optional records_path (e.g. data.items) and orient (records, columns, index), and how to handle lists (scalar_arrays join or rows, object_arrays sheet or json). Returns an .xlsx and a .csv download (a ZIP of CSVs when there are linked sheets), the rows, columns and cells written, the numbers kept as text, formula-like text, and a check that each cell was read back from both files. Does not accept JSON with comments, trailing commas or JSON Lines, and does not turn date text into Excel dates. Do not use for Excel to JSON or for editing a JSON file.
| Argument | Type | Description |
|---|---|---|
| file | object | The JSON file to convert, e.g. orders.json (UTF-8, or UTF-16 with a byte order mark), up to 5 MB. |
| orient | string | How records are laid out, e.g. records. records (default): a list of objects, one row each (a single object is one row). columns: an object of equal-length lists, {"name":["Ann","Bo"],"age":[31,40]}. index: an object of objects keyed by id, {"u1":{...},"u2":{...}}; the key goes in column _key. |
| csv_bom | boolean | true (default): the CSV starts with a UTF-8 byte order mark so Excel shows accents correctly. false: plain UTF-8. |
| json_text | string | Instead of a file: the JSON itself, e.g. [{"name":"Ann","age":31},{"name":"Bo","age":40}]. Use either file or json_text. |
| records_path |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.
| string |
| Dotted key path to the part that holds the records, e.g. "data.items" for {"data":{"items":[...]}}. Use a number for a list item, e.g. "results.0.rows". Default: the whole document. |
| object_arrays | string | Lists that hold objects, such as order lines, e.g. sheet. sheet (default): a linked sheet with one row per item, linked by _parent_row. json: the list as compact JSON text in one cell. |
| scalar_arrays | string | Lists of plain values such as ["red","blue"], e.g. join. join (default): one cell, values joined with "; ". rows: one row per value in a linked sheet. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file id, e.g. file_abc123."
},
"file_name": {
"type": "string",
"description": "Original file name if known, e.g. statement.pdf."
},
"mime_type": {
"type": "string",
"description": "Media type if known, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "Temporary download link for the file, supplied by ChatGPT."
}
},
"description": "The JSON file to convert, e.g. orders.json (UTF-8, or UTF-16 with a byte order mark), up to 5 MB."
},
"orient": {
"enum": [
"records",
"columns",
"index"
],
"type": "string",
"description": "How records are laid out, e.g. records. records (default): a list of objects, one row each (a single object is one row). columns: an object of equal-length lists, {\"name\":[\"Ann\",\"Bo\"],\"age\":[31,40]}. index: an object of objects keyed by id, {\"u1\":{...},\"u2\":{...}}; the key goes in column _key."
},
"csv_bom": {
"type": "boolean",
"description": "true (default): the CSV starts with a UTF-8 byte order mark so Excel shows accents correctly. false: plain UTF-8."
},
"json_text": {
"type": "string",
"maxLength": 1000000,
"description": "Instead of a file: the JSON itself, e.g. [{\"name\":\"Ann\",\"age\":31},{\"name\":\"Bo\",\"age\":40}]. Use either file or json_text."
},
"records_path": {
"type": "string",
"maxLength": 300,
"description": "Dotted key path to the part that holds the records, e.g. \"data.items\" for {\"data\":{\"items\":[...]}}. Use a number for a list item, e.g. \"results.0.rows\". Default: the whole document."
},
"object_arrays": {
"enum": [
"sheet",
"json"
],
"type": "string",
"description": "Lists that hold objects, such as order lines, e.g. sheet. sheet (default): a linked sheet with one row per item, linked by _parent_row. json: the list as compact JSON text in one cell."
},
"scalar_arrays": {
"enum": [
"join",
"rows"
],
"type": "string",
"description": "Lists of plain values such as [\"red\",\"blue\"], e.g. join. join (default): one cell, values joined with \"; \". rows: one row per value in a linked sheet."
}
}
}