Zovo JSON to Spreadsheet MCP
This MCP server converts JSON data into Excel workbooks and CSV files. It handles nested keys as dotted columns, joins lists of plain values, and places lists of objects into linked sheets. It ensures data integrity by reading back files before download and preserves long numbers as text to prevent precision loss.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://json-to-excel.zovo.one/mcpWhat its tools do
2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (2)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Convert JSON array of orders to Excel
- Turn attached API response into a spreadsheet
- Inspect JSON keys and nesting before conversion
Source and maintenance
Protocol and capabilities
- Server
- json-to-excel 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 2 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
2 advertised
json_to_excel — JSON to Excel
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.
{
"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."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"source",
"records_from",
"records",
"sheets",
"cells",
"columns",
"preview",
"numbers_as_text",
"formula_like_text",
"cut_cells",
"removed_control_characters",
"joined_cells",
"json_cells",
"duplicate_keys",
"values_outside_records",
"check",
"notes",
"output_name",
"csv_name",
"expires_in_hours",
"downloads"
],
"properties": {
"cells": {
"type": "object",
"required": [
"grid",
"filled"
],
"properties": {
"grid": {
"type": "number"
},
"filled": {
"type": "number"
}
},
"additionalProperties": false
},
"check": {
"type": "object",
"required": [
"passed",
"xlsx_cells_found",
"xlsx_cells_expected",
"csv_cells_found",
"csv_cells_expected",
"json_values",
"values_placed",
"what"
],
"properties": {
"what": {
"type": "string"
},
"passed": {
"type": "boolean"
},
"json_values": {
"type": "number"
},
"values_placed": {
"type": "number"
},
"csv_cells_found": {
"type": "number"
},
"xlsx_cells_found": {
"type": "number"
},
"csv_cells_expected": {
"type": "number"
},
"xlsx_cells_expected": {
"type": "number"
}
},
"additionalProperties": false
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"sheets": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"rows",
"columns"
],
"properties": {
"name": {
"type": "string"
},
"rows": {
"type": "number"
},
"columns": {
"type": "number"
},
"parent_sheet": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
"source": {
"type": "string"
},
"columns": {
"type": "array",
"items": {
"type": "string"
}
},
"preview": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
}
},
"records": {
"type": "number"
},
"csv_name": {
"type": "string"
},
"csv_files": {
"type": "array",
"items": {
"type": "string"
}
},
"cut_cells": {
"type": "object",
"required": [
"count",
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "number"
}
},
"additionalProperties": false
},
"downloads": {
"type": "object",
"required": [
"xlsx",
"csv"
],
"properties": {
"csv": {
"type": "string"
},
"xlsx": {
"type": "string"
}
},
"additionalProperties": false
},
"json_cells": {
"type": "number"
},
"output_name": {
"type": "string"
},
"joined_cells": {
"type": "number"
},
"records_from": {
"type": "string"
},
"sheets_count": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"columns_count": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"preview_count": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"duplicate_keys": {
"type": "number"
},
"numbers_as_text": {
"type": "object",
"required": [
"count",
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": "object",
"required": [
"sheet",
"ref",
"column",
"value"
],
"properties": {
"ref": {
"type": "string"
},
"sheet": {
"type": "string"
},
"value": {
"type": "string"
},
"column": {
"type": "string"
}
},
"additionalProperties": false
}
},
"count": {
"type": "number"
},
"ranges": {
"type": "array",
"items": {
"type": "string"
}
},
"ranges_total": {
"type": "number"
}
},
"additionalProperties": false
},
"expires_in_hours": {
"type": "number"
},
"formula_like_text": {
"type": "object",
"required": [
"count",
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "number"
}
},
"additionalProperties": false
},
"values_outside_records": {
"type": "number"
},
"removed_control_characters": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "JSON to Excel",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}inspect_json — Inspect JSON structure
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.
{
"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."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"source",
"records_from",
"shape",
"records",
"depth",
"json_values",
"paths",
"paths_total",
"lists",
"estimate",
"duplicate_keys",
"suggestions",
"notes"
],
"properties": {
"depth": {
"type": "number"
},
"lists": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"kind",
"lists",
"items",
"longest"
],
"properties": {
"kind": {
"type": "string"
},
"path": {
"type": "string"
},
"items": {
"type": "number"
},
"lists": {
"type": "number"
},
"longest": {
"type": "number"
}
},
"additionalProperties": false
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"paths": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"types",
"filled",
"of"
],
"properties": {
"of": {
"type": "number"
},
"path": {
"type": "string"
},
"types": {
"type": "array",
"items": {
"type": "string"
}
},
"filled": {
"type": "number"
}
},
"additionalProperties": false
}
},
"shape": {
"type": "string"
},
"source": {
"type": "string"
},
"records": {
"type": "number"
},
"estimate": {
"type": "object",
"required": [
"fits",
"sheets",
"columns",
"grid_cells",
"numbers_as_text",
"reason"
],
"properties": {
"fits": {
"type": "boolean"
},
"reason": {
"type": "string"
},
"sheets": {
"type": "number"
},
"columns": {
"type": "number"
},
"grid_cells": {
"type": "number"
},
"numbers_as_text": {
"type": "number"
}
},
"additionalProperties": false
},
"json_values": {
"type": "number"
},
"paths_total": {
"type": "number"
},
"suggestions": {
"type": "array",
"items": {
"type": "string"
}
},
"records_from": {
"type": "string"
},
"duplicate_keys": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Inspect JSON structure",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
json-to-excel-widget — Zovo JSON to Spreadsheet view
Interactive view for Zovo JSON to Spreadsheet.
ui://widget/json-to-excel-v1-1.0.0-0893318785295a3d9b28305c1e5b7921e25c619b24fdf717eb6434330205e1bd.htmljson-to-excel-widget-legacy — Zovo JSON to Spreadsheet view (previous versions)
ui://widget/json-to-excel-{version}.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 949 ms
- 95th percentile latency
- 949 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 949 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-json-to-spreadsheet-mcp https://json-to-excel.zovo.one/mcpCodex
codex mcp add zovo-json-to-spreadsheet-mcp --url https://json-to-excel.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-json-to-spreadsheet-mcp": {
"url": "https://json-to-excel.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-json-to-spreadsheet-mcp": {
"type": "streamableHttp",
"url": "https://json-to-excel.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-json-to-spreadsheet-mcp": {
"type": "http",
"url": "https://json-to-excel.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-json-to-spreadsheet-mcp https://json-to-excel.zovo.one/mcpClaude Desktop
https://json-to-excel.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-json-to-spreadsheet-mcp": {
"serverUrl": "https://json-to-excel.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo JSON to Spreadsheet MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.