Skip to main content
Glama
JDJR2024

Markdownify MCP Server - UTF-8 Enhanced

by JDJR2024

pdf-to-markdown

Transform PDF files into Markdown format using enhanced UTF-8 and multilingual support for better document accessibility and integration.

Instructions

Convert a PDF file to markdown

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filepathYesAbsolute path of the PDF file to convert

Implementation Reference

  • Handler logic for the 'pdf-to-markdown' tool (shared with other file-to-markdown tools). Validates the filepath argument and delegates conversion to 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;
  • Input schema definition for the 'pdf-to-markdown' tool, requiring an absolute filepath.
    export const PDFToMarkdownTool = ToolSchema.parse({
      name: "pdf-to-markdown",
      description: "Convert a PDF file to markdown",
      inputSchema: {
        type: "object",
        properties: {
          filepath: {
            type: "string",
            description: "Absolute path of the PDF file to convert",
          },
        },
        required: ["filepath"],
      },
    });
  • src/server.ts:31-35 (registration)
    Tool registration via the list tools handler, which exposes all tools from tools.ts including 'pdf-to-markdown'.
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: Object.values(tools),
      };
    });
  • Core helper method that performs the file-to-markdown conversion using an external 'markitdown' executable, used by the pdf-to-markdown handler.
    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");
        }
      }
    }
  • Private helper that executes the 'markitdown' tool on the input 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