export_meeting
Export meeting recordings from Fathom.video to markdown files. Save AI-generated transcripts, summaries, and action items to your workspace directory for documentation and analysis.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| recording_id | Yes | The recording ID of the meeting to export | |
| output_dir | No | Directory to save the file (defaults to workspace/transcripts) |
Implementation Reference
- src/index.ts:154-184 (handler)The handler function that implements the export_meeting tool logic: fetches meeting data, formats to markdown, writes to file in specified or default directory, returns filepath.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}` }], }; }
- src/index.ts:150-153 (schema)Zod input schema defining parameters: required 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 on the MCP server via server.tool() call, specifying name, input schema, and handler function.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}` }], }; } );