Zovo PDF to Spreadsheet

PDF tables into a spreadsheet

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,565Tokens (tool definitions)
~7.5 KBTypical response size
Moderate attention impact (1.22% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "pdf-to-excel": {
      "url": "https://pdf-to-excel.zovo.one/mcp"
    }
  }
}

Remote endpoints

https://pdf-to-excel.zovo.one/mcpstreamable-http

What it can do

Tool inventory

Tools (2)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢convert_pdf_tables(file, pages, merge_tables, column_types)

Use this when the user wants to convert a PDF to Excel, convert PDF to Excel, extract a table from a PDF, convert PDF table to Excel, PDF to CSV, PDF to XLSX, get a bank statement PDF to Excel, or turn a PDF to spreadsheet. It reads the tables in a text-based PDF and returns an Excel workbook (one sheet per table) and a ZIP of CSV files, with column types and a preview of the first rows. Handles up to 15 MB and 50 pages. Does not read scanned or image-only pages (no OCR), does not edit the PDF, and keeps files for about 1 hour. Do not use for a PDF that is only a form to fill or for reading a PDF as plain text.

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "type": "object",
      "properties": {
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        },
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "mime_type": {
          "description": "Media type if known, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "description": "Original file name if known, e.g. statement.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "description": "The text-based PDF that holds the tables, e.g. statement.pdf or price-list.pdf."
    },
    "pages": {
      "description": "Pages to read, e.g. 1-3,5. Default: every page (first 50).",
      "type": "string",
      "maxLength": 200
    },
    "merge_tables": {
      "description": "true (default): join the last table on a page to the first on the next page only when their column count and whitespace-normalized source headers match; drop the repeated header.",
      "type": "boolean"
    },
    "column_types": {
      "description": "Force a column type when the detected one is wrong, e.g. [{\"table\":1,\"column\":3,\"type\":\"text\"}]. The widget's type switches send this.",
      "maxItems": 200000,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "table": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991,
            "description": "1-based table number shown in the result, e.g. 1."
          },
          "column": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991,
            "description": "1-based column number in that table, e.g. 3."
          },
          "type": {
            "type": "string",
            "enum": [
              "text",
              "number",
              "date"
            ],
            "description": "The type to force for that column, e.g. date."
          }
        },
        "required": [
          "table",
          "column",
          "type"
        ]
      }
    }
  },
  "required": [
    "file"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    },
    "file": {
      "type": "string"
    },
    "page_count": {
      "type": "number"
    },
    "other_text_rows": {
      "type": "number"
    },
    "pages_read": {
      "type": "number"
    },
    "tables": {
      "type": "number"
    },
    "scanned_pages": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "truncated": {
      "type": "boolean"
    },
    "table_details": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "sheet": {
            "type": "string"
          },
          "rows": {
            "type": "number"
          },
          "data_rows": {
            "type": "number"
          },
          "columns": {
            "type": "number"
          },
          "header": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "column_types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "preview": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "pages": {
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "name",
          "sheet",
          "rows",
          "data_rows",
          "columns",
          "header",
          "column_types",
          "preview",
          "pages"
        ],
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "properties": {
        "xlsx": {
          "type": "string"
        },
        "csv_zip": {
          "type": "string"
        }
      },
      "required": [
        "xlsx",
        "csv_zip"
      ],
      "additionalProperties": false
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "file",
    "page_count",
    "other_text_rows",
    "pages_read",
    "tables",
    "scanned_pages",
    "truncated",
    "table_details",
    "warnings",
    "note"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢list_pdf_tables(file, pages, merge_tables)

Use this when the user wants to extract table from pdf, copy table from pdf, or inspect pdf to spreadsheet tables, before exporting: it shows each table's size, column types and first rows with no download. Does not make Excel or CSV files (use convert_pdf_tables for that), does not read scanned pages (no OCR), and handles up to 15 MB and 50 pages. Do not use for editing a PDF or for a PDF that is not a table.

Input Schema

{
  "type": "object",
  "properties": {
    "file": {
      "type": "object",
      "properties": {
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        },
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "mime_type": {
          "description": "Media type if known, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "description": "Original file name if known, e.g. statement.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "description": "The text-based PDF that holds the tables, e.g. report.pdf."
    },
    "pages": {
      "description": "Pages to read, e.g. 1-3,5. Default: every page (first 50).",
      "type": "string",
      "maxLength": 200
    },
    "merge_tables": {
      "description": "true (default): join the last table on a page to the first on the next page only when their column count and whitespace-normalized source headers match.",
      "type": "boolean"
    }
  },
  "required": [
    "file"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "file": {
      "type": "string"
    },
    "page_count": {
      "type": "number"
    },
    "other_text_rows": {
      "type": "number"
    },
    "pages_read": {
      "type": "number"
    },
    "tables": {
      "type": "number"
    },
    "scanned_pages": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "truncated": {
      "type": "boolean"
    },
    "table_details": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "sheet": {
            "type": "string"
          },
          "rows": {
            "type": "number"
          },
          "data_rows": {
            "type": "number"
          },
          "columns": {
            "type": "number"
          },
          "header": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "column_types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "preview": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "pages": {
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "name",
          "sheet",
          "rows",
          "data_rows",
          "columns",
          "header",
          "column_types",
          "preview",
          "pages"
        ],
        "additionalProperties": false
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "file",
    "page_count",
    "other_text_rows",
    "pages_read",
    "tables",
    "scanned_pages",
    "truncated",
    "table_details",
    "warnings"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded2 tools