Skip to main content
Glama

list_meetings

Retrieve and filter recorded meetings from Fathom.video with options for date ranges, participant types, and result limits to access transcripts and summaries.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of meetings to return (default: 10, use 0 for all)
created_afterNoISO 8601 timestamp - only return meetings after this date
created_beforeNoISO 8601 timestamp - only return meetings before this date
include_external_onlyNoOnly include meetings with external participants

Implementation Reference

  • The main execution logic for the 'list_meetings' MCP tool. It maps tool parameters to FathomClient.listMeetings call, applies limit slicing, formats output using formatMeetingList, and returns markdown table as text content.
    async ({ limit, created_after, created_before, include_external_only }) => { console.error('Fetching meetings...'); const response = await fathom.listMeetings({ created_after, created_before, calendar_invitees_domains_type: include_external_only ? 'one_or_more_external' : undefined, }); let meetings = response.items; if (limit && limit > 0) { meetings = meetings.slice(0, limit); } console.error(`Found ${meetings.length} meetings`); const markdown = formatMeetingList(meetings); return { content: [{ type: 'text', text: markdown }], }; }
  • Zod input schema validation for the list_meetings tool parameters.
    { limit: z.number().optional().describe('Maximum number of meetings to return (default: 10, use 0 for all)'), created_after: z.string().optional().describe('ISO 8601 timestamp - only return meetings after this date'), created_before: z.string().optional().describe('ISO 8601 timestamp - only return meetings before this date'), include_external_only: z.boolean().optional().describe('Only include meetings with external participants'), },
  • src/index.ts:54-83 (registration)
    MCP server.tool registration of the 'list_meetings' tool, including schema and handler reference.
    server.tool( 'list_meetings', { limit: z.number().optional().describe('Maximum number of meetings to return (default: 10, use 0 for all)'), created_after: z.string().optional().describe('ISO 8601 timestamp - only return meetings after this date'), created_before: z.string().optional().describe('ISO 8601 timestamp - only return meetings before this date'), include_external_only: z.boolean().optional().describe('Only include meetings with external participants'), }, async ({ limit, created_after, created_before, include_external_only }) => { console.error('Fetching meetings...'); const response = await fathom.listMeetings({ created_after, created_before, calendar_invitees_domains_type: include_external_only ? 'one_or_more_external' : undefined, }); let meetings = response.items; if (limit && limit > 0) { meetings = meetings.slice(0, limit); } console.error(`Found ${meetings.length} meetings`); const markdown = formatMeetingList(meetings); return { content: [{ type: 'text', text: markdown }], }; } );
  • FathomClient.listMeetings method called by the tool handler to fetch meetings from Fathom API.
    async listMeetings(params: ListMeetingsParams = {}): Promise<MeetingsResponse> { const searchParams = new URLSearchParams(); if (params.include_transcript) searchParams.append('include_transcript', 'true'); if (params.include_summary) searchParams.append('include_summary', 'true'); if (params.include_action_items) searchParams.append('include_action_items', 'true'); if (params.include_crm_matches) searchParams.append('include_crm_matches', 'true'); if (params.created_after) searchParams.append('created_after', params.created_after); if (params.created_before) searchParams.append('created_before', params.created_before); if (params.cursor) searchParams.append('cursor', params.cursor); if (params.calendar_invitees_domains_type) { searchParams.append('calendar_invitees_domains_type', params.calendar_invitees_domains_type); } // Handle array params params.recorded_by?.forEach(email => searchParams.append('recorded_by[]', email)); params.teams?.forEach(team => searchParams.append('teams[]', team)); params.calendar_invitees?.forEach(email => searchParams.append('calendar_invitees[]', email)); params.calendar_invitees_domains?.forEach(domain => searchParams.append('calendar_invitees_domains[]', domain)); const queryString = searchParams.toString(); const endpoint = `/meetings${queryString ? `?${queryString}` : ''}`; return this.request<MeetingsResponse>(endpoint); }
  • Utility function used in handler to format the list of meetings as a markdown table.
    export function formatMeetingList(meetings: Meeting[]): string { if (meetings.length === 0) { return 'No meetings found.'; } const rows = meetings.map(m => { const title = m.title || m.meeting_title || `Meeting ${m.recording_id}`; const date = formatDate(m.recording_start_time); const duration = formatDuration(m.recording_start_time, m.recording_end_time); const recorder = m.recorded_by.name; const participants = m.calendar_invitees.length; return `| ${title} | ${date} | ${duration} | ${recorder} | ${participants} | ${m.recording_id} |`; }); return [ '| Title | Date | Duration | Recorded By | Participants | ID |', '|-------|------|----------|-------------|--------------|-----|', ...rows, ].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