Skip to main content
Glama
JDJR2024

Markdownify MCP Server - UTF-8 Enhanced

by JDJR2024

audio-to-markdown

Transform audio files into markdown format with transcription support. Ideal for converting spoken content into structured text using the Markdownify MCP Server's enhanced UTF-8 capabilities.

Instructions

Convert an audio file to markdown, including transcription if possible

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filepathYesAbsolute path of the audio file to convert

Implementation Reference

  • Handler dispatch for the 'audio-to-markdown' tool (shared with other file-to-markdown tools). Validates the filepath argument and invokes Markdownify.toMarkdown to perform the conversion.
    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 'audio-to-markdown' tool, requiring an absolute filepath to the audio file.
    export const AudioToMarkdownTool = ToolSchema.parse({
      name: "audio-to-markdown",
      description:
        "Convert an audio file to markdown, including transcription if possible",
      inputSchema: {
        type: "object",
        properties: {
          filepath: {
            type: "string",
            description: "Absolute path of the audio file to convert",
          },
        },
        required: ["filepath"],
      },
    });
  • src/server.ts:31-35 (registration)
    Registration of all tools (including 'audio-to-markdown') via the MCP listTools request handler, exporting schemas from tools.ts.
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: Object.values(tools),
      };
    });
  • Helper function that performs the actual file-to-markdown conversion for audio files (and others) by executing the external 'markitdown' tool.
    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");
        }
      }
    }
  • Low-level helper that executes the 'markitdown' binary on the input audio file path to generate markdown output, including transcription.
    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