Skip to main content
Glama

get_meeting

Retrieve meeting recordings from Fathom with AI-generated transcripts, summaries, action items, and CRM matches for comprehensive meeting analysis.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
recording_idYesThe recording ID of the meeting to retrieve
include_transcriptNoInclude the full transcript (default: true)
include_summaryNoInclude the AI summary (default: true)
include_action_itemsNoInclude action items (default: true)
include_crm_matchesNoInclude CRM matches (default: true)

Implementation Reference

  • Handler function for 'get_meeting' tool. Fetches meetings using FathomClient.listMeetings, finds the specific meeting by recording_id, formats it to markdown using formatMeetingToMarkdown, and returns as text content.
    async ({ recording_id, include_transcript, include_summary, include_action_items, include_crm_matches }) => { console.error(`Fetching meeting ${recording_id}...`); const response = await fathom.listMeetings({ include_transcript: include_transcript !== false, include_summary: include_summary !== false, include_action_items: include_action_items !== false, include_crm_matches: include_crm_matches !== false, }); 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, }; } console.error(`Found meeting: ${meeting.title}`); const markdown = formatMeetingToMarkdown(meeting); return { content: [{ type: 'text', text: markdown }], }; } );
  • Zod schema defining input parameters for the get_meeting tool: required recording_id and optional flags for including transcript, summary, action items, and CRM matches.
    { recording_id: z.number().describe('The recording ID of the meeting to retrieve'), include_transcript: z.boolean().optional().describe('Include the full transcript (default: true)'), include_summary: z.boolean().optional().describe('Include the AI summary (default: true)'), include_action_items: z.boolean().optional().describe('Include action items (default: true)'), include_crm_matches: z.boolean().optional().describe('Include CRM matches (default: true)'), },
  • src/index.ts:88-122 (registration)
    Registration of the 'get_meeting' tool on the MCP server using server.tool(), specifying name, input schema, and handler function.
    server.tool( 'get_meeting', { recording_id: z.number().describe('The recording ID of the meeting to retrieve'), include_transcript: z.boolean().optional().describe('Include the full transcript (default: true)'), include_summary: z.boolean().optional().describe('Include the AI summary (default: true)'), include_action_items: z.boolean().optional().describe('Include action items (default: true)'), include_crm_matches: z.boolean().optional().describe('Include CRM matches (default: true)'), }, async ({ recording_id, include_transcript, include_summary, include_action_items, include_crm_matches }) => { console.error(`Fetching meeting ${recording_id}...`); const response = await fathom.listMeetings({ include_transcript: include_transcript !== false, include_summary: include_summary !== false, include_action_items: include_action_items !== false, include_crm_matches: include_crm_matches !== false, }); 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, }; } console.error(`Found meeting: ${meeting.title}`); const markdown = formatMeetingToMarkdown(meeting); return { content: [{ type: 'text', text: markdown }], }; } );
  • Helper function formatMeetingToMarkdown used in the get_meeting handler to convert meeting data into a formatted Markdown document including details, participants, summary, actions, CRM matches, and transcript.
    export function formatMeetingToMarkdown(meeting: Meeting): string { const sections: string[] = []; // Header const title = meeting.title || meeting.meeting_title || `Meeting ${meeting.recording_id}`; sections.push(`# ${title}`); sections.push(''); // Metadata sections.push('## Meeting Details'); sections.push(''); sections.push(`| Field | Value |`); sections.push(`|-------|-------|`); sections.push(`| **Date** | ${formatDate(meeting.recording_start_time)} |`); sections.push(`| **Duration** | ${formatDuration(meeting.recording_start_time, meeting.recording_end_time)} |`); sections.push(`| **Recorded by** | ${meeting.recorded_by.name} <${meeting.recorded_by.email}> |`); sections.push(`| **Recording ID** | ${meeting.recording_id} |`); sections.push(`| **Fathom URL** | [View Recording](${meeting.url}) |`); sections.push(`| **Share URL** | [Share Link](${meeting.share_url}) |`); sections.push(''); // Participants sections.push('## Participants'); sections.push(''); sections.push(formatParticipants(meeting.calendar_invitees)); sections.push(''); // Summary (if available) if (meeting.default_summary) { sections.push('## Summary'); sections.push(''); sections.push(meeting.default_summary.markdown_formatted); sections.push(''); } // Action Items (if available) if (meeting.action_items && meeting.action_items.length > 0) { sections.push('## Action Items'); sections.push(''); sections.push(formatActionItems(meeting.action_items)); sections.push(''); } // CRM Matches (if available) if (meeting.crm_matches) { sections.push('## CRM Matches'); sections.push(''); sections.push(formatCRMMatches(meeting.crm_matches)); sections.push(''); } // Transcript sections.push('## Transcript'); sections.push(''); sections.push(formatTranscriptToMarkdown(meeting.transcript || [])); sections.push(''); // Footer sections.push('---'); sections.push(`_Exported from Fathom.video on ${new Date().toISOString()}_`); return sections.join('\n'); }

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