Skip to main content
Glama
matthewbergvinson

Fathom MCP Server

export_meeting

Export meeting recordings from Fathom.video to markdown files. Specify a recording ID to save transcripts, summaries, and action items to your workspace directory.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
recording_idYesThe recording ID of the meeting to export
output_dirNoDirectory to save the file (defaults to workspace/transcripts)

Implementation Reference

  • The handler function that implements the export_meeting tool. It retrieves the full meeting details (transcript, summary, action items, CRM matches), formats them into Markdown, generates a filename based on the meeting details, creates the output directory if needed, writes the Markdown file, and returns the file path.
    async ({ recording_id, output_dir }) => {
      const targetDir = output_dir || OUTPUT_DIR;
      console.error(`Exporting meeting ${recording_id} to ${targetDir}...`);
      
      const response = await fathom.listMeetings({
        include_transcript: true,
        include_summary: true,
        include_action_items: true,
        include_crm_matches: true,
      });
    
      const meeting = response.items.find(m => m.recording_id === recording_id);
      if (!meeting) {
        return {
          content: [{ type: 'text', text: `Meeting with recording ID ${recording_id} not found.` }],
          isError: true,
        };
      }
    
      const markdown = formatMeetingToMarkdown(meeting);
      const filename = generateTranscriptFilename(meeting);
      const filepath = path.join(targetDir, filename);
    
      await fs.mkdir(targetDir, { recursive: true });
      await fs.writeFile(filepath, markdown, 'utf-8');
    
      console.error(`Exported: ${filename}`);
      return {
        content: [{ type: 'text', text: `Exported meeting to: ${filepath}` }],
      };
    }
  • Input schema for the export_meeting tool using Zod validation: requires recording_id (number), optional output_dir (string).
    {
      recording_id: z.number().describe('The recording ID of the meeting to export'),
      output_dir: z.string().optional().describe('Directory to save the file (defaults to workspace/transcripts)'),
    },
  • src/index.ts:148-185 (registration)
    Registration of the export_meeting tool using McpServer.tool(), including inline schema and handler.
    server.tool(
      'export_meeting',
      {
        recording_id: z.number().describe('The recording ID of the meeting to export'),
        output_dir: z.string().optional().describe('Directory to save the file (defaults to workspace/transcripts)'),
      },
      async ({ recording_id, output_dir }) => {
        const targetDir = output_dir || OUTPUT_DIR;
        console.error(`Exporting meeting ${recording_id} to ${targetDir}...`);
        
        const response = await fathom.listMeetings({
          include_transcript: true,
          include_summary: true,
          include_action_items: true,
          include_crm_matches: true,
        });
    
        const meeting = response.items.find(m => m.recording_id === recording_id);
        if (!meeting) {
          return {
            content: [{ type: 'text', text: `Meeting with recording ID ${recording_id} not found.` }],
            isError: true,
          };
        }
    
        const markdown = formatMeetingToMarkdown(meeting);
        const filename = generateTranscriptFilename(meeting);
        const filepath = path.join(targetDir, filename);
    
        await fs.mkdir(targetDir, { recursive: true });
        await fs.writeFile(filepath, markdown, 'utf-8');
    
        console.error(`Exported: ${filename}`);
        return {
          content: [{ type: 'text', text: `Exported meeting to: ${filepath}` }],
        };
      }
    );

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/matthewbergvinson/fathom-mcp'

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