Skip to main content
Glama
JDJR2024

Markdownify MCP Server - UTF-8 Enhanced

by JDJR2024

xlsx-to-markdown

Convert XLSX files to Markdown format using the Markdownify MCP Server. Ideal for transforming spreadsheet data into readable, structured Markdown content with enhanced UTF-8 support.

Instructions

Convert an XLSX file to markdown

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filepathYesAbsolute path of the XLSX file to convert

Implementation Reference

  • Defines the input schema for the xlsx-to-markdown tool, requiring an absolute filepath.
    export const XlsxToMarkdownTool = ToolSchema.parse({
      name: "xlsx-to-markdown",
      description: "Convert an XLSX file to markdown",
      inputSchema: {
        type: "object",
        properties: {
          filepath: {
            type: "string",
            description: "Absolute path of the XLSX file to convert",
          },
        },
        required: ["filepath"],
      },
    });
  • src/server.ts:31-35 (registration)
    Registers the xlsx-to-markdown tool (via XlsxToMarkdownTool schema) among others in the ListTools response.
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: Object.values(tools),
      };
    });
  • Dispatches execution for xlsx-to-markdown (and similar file converters): validates input filepath and invokes Markdownify.toMarkdown.
    case tools.PDFToMarkdownTool.name:
    case tools.ImageToMarkdownTool.name:
    case tools.AudioToMarkdownTool.name:
    case tools.DocxToMarkdownTool.name:
    case tools.XlsxToMarkdownTool.name:
    case tools.PptxToMarkdownTool.name:
      if (!validatedArgs.filepath) {
        throw new Error("File path is required for this tool");
      }
      result = await Markdownify.toMarkdown({
        filePath: validatedArgs.filepath,
        projectRoot: validatedArgs.projectRoot,
        uvPath: validatedArgs.uvPath || process.env.UV_PATH,
      });
      break;
  • Core implementation that converts XLSX files (via filepath) to markdown by invoking the markitdown executable and saving output to temp file.
    static async toMarkdown({
      filePath,
      url,
      projectRoot = path.resolve(__dirname, ".."),
      uvPath = "~/.local/bin/uv",
    }: {
      filePath?: string;
      url?: string;
      projectRoot?: string;
      uvPath?: string;
    }): Promise<MarkdownResult> {
      try {
        let inputPath: string;
        let isTemporary = false;
    
        if (url) {
          const response = await fetch(url);
          const content = await response.text();
          inputPath = await this.saveToTempFile(content);
          isTemporary = true;
        } else if (filePath) {
          inputPath = filePath;
        } else {
          throw new Error("Either filePath or url must be provided");
        }
    
        const text = await this._markitdown(inputPath, projectRoot, uvPath);
        const outputPath = await this.saveToTempFile(text);
    
        if (isTemporary) {
          fs.unlinkSync(inputPath);
        }
    
        return { path: outputPath, text };
      } catch (e: unknown) {
        if (e instanceof Error) {
          throw new Error(`Error processing to Markdown: ${e.message}`);
        } else {
          throw new Error("Error processing to Markdown: Unknown error occurred");
        }
      }
    }
  • Helper function that runs the markitdown executable on the XLSX file to generate markdown content.
    private static async _markitdown(
      filePath: string,
      projectRoot: string,
      uvPath: string,
    ): Promise<string> {
      const venvPath = path.join(projectRoot, ".venv");
      const markitdownPath = path.join(venvPath, "Scripts", "markitdown.exe");
    
      if (!fs.existsSync(markitdownPath)) {
        throw new Error("markitdown executable not found");
      }
    
      const { stdout, stderr } = await execAsync(
        `${venvPath}\\Scripts\\activate.bat && ${markitdownPath} "${filePath}"`,
      );
    
      if (stderr) {
        throw new Error(`Error executing command: ${stderr}`);
      }
    
      return stdout;
    }

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

Related Tools

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/JDJR2024/markdownify-mcp-utf8'

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