Skip to main content
Glama

excel_tool

Read and write Excel and CSV files, and convert JSON data to spreadsheet formats for data management and analysis tasks.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform: read, write, or convert_json_to_xlsx
filePathYesAbsolute path to the input file
outputFilePathNoAbsolute path to the output file (required for write and convert actions)
formatYesFile format: xlsx, csv
dataNoData to write (required for write action)
optionsNoAdditional options

Implementation Reference

  • Main execution logic for the excel_tool, handling read, write, and convert_json_to_xlsx actions for XLSX and CSV files.
    export default async function (request: any) {
      try {
        const { action, filePath, outputFilePath, format, data, options } = request.params.arguments;
    
        // Validate file path
        if (!path.isAbsolute(filePath)) {
          throw new Error("Input filePath must be absolute");
        }
    
        // Check if file exists for read action
        if (action === "read" && !fs.existsSync(filePath)) {
          throw new Error(`Error: File not found - ${filePath}`);
        }
    
        if ((action === "write" || action === "convert_json_to_xlsx") && !outputFilePath) {
          throw new Error("outputFilePath is required for write and convert actions");
        }
    
        if (outputFilePath && !path.isAbsolute(outputFilePath)) {
          throw new Error("outputFilePath must be absolute");
        }
    
        if (action === "read") {
          // Read file logic
          switch (format) {
            case "xlsx":
              return readXLSX({ filePath, format });
            case "csv":
              return await readCSV({ filePath, format });
            default:
              throw new Error(`Unsupported format for read: ${format}`);
          }
        } else if (action === "write") {
          // Write file logic
          if (!data) {
            throw new Error("Data is required for write action");
          }
          switch (format) {
            case "xlsx":
              return writeXLSX({ filePath: outputFilePath, data, format, options });
            case "csv":
              return await writeCSV({ filePath: outputFilePath, data, format, options });
            default:
              throw new Error(`Unsupported format for write: ${format}`);
          }
        } else if (action === "convert_json_to_xlsx") {
          if (format !== 'xlsx') {
            throw new Error("convert_json_to_xlsx action only supports xlsx format");
          }
          const fileContent = fs.readFileSync(filePath, 'utf-8');
          const jsonData = JSON.parse(fileContent);
          if (!Array.isArray(jsonData)) {
            throw new Error("JSON content must be an array of objects.");
          }
          return writeXLSX({ filePath: outputFilePath, data: jsonData, format: 'xlsx', options: options });
        }
        else {
          throw new Error(`Invalid action: ${action}`);
        }
      } catch (error: any) {
        // Error handling
        console.error(error);
        return {
          content: [
            {
              type: "text",
              text: JSON.stringify(`Error: ${error instanceof Error ? error.message : String(error)}`, null, 2),
            },
          ],
          isError: true
        };
      }
    }
  • Input schema for the excel_tool defining parameters such as action, filePath, outputFilePath, format, data, and options.
    export const schema = {
      name: "excel_tool",
      description: "Read and write Excel (xlsx) and CSV files, and convert from JSON.",
      type: "object",
      properties: {
        action: {
          type: "string",
          enum: ["read", "write", "convert_json_to_xlsx"],
          description: "Action to perform: read, write, or convert_json_to_xlsx"
        },
        filePath: {
          type: "string",
          description: "Absolute path to the input file"
        },
        outputFilePath: {
          type: "string",
          description: "Absolute path to the output file (required for write and convert actions)"
        },
        format: {
          type: "string",
          enum: ["xlsx", "csv"],
          description: "File format: xlsx, csv"
        },
        data: {
          type: "array",
          description: "Data to write (required for write action)",
          items: {
            type: "object",
            additionalProperties: true
          }
        },
        options: {
          type: "object",
          description: "Additional options",
          properties: {
            sheetName: {
              type: "string",
              description: "Sheet name for Excel files"
            },
            headerRow: {
              type: "boolean",
              description: "Include header row in output"
            }
          },
          additionalProperties: true
        }
      },
      required: ["action", "filePath", "format"]
    };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiaoguomeiyitian/ToolBox'

If you have feedback or need assistance with the MCP directory API, please join our Discord server