Skip to main content
Glama

list_meetings

Retrieve paginated meeting recordings with filtering by date, teams, or attendees, and optional content inclusion like action items and CRM matches.

Instructions

Retrieve paginated meetings with filtering and optional content inclusion (action items, CRM matches).

Examples: list_meetings() # Get all meetings (paginated) list_meetings(created_after="2024-01-01T00:00:00Z") # Meetings after specific date list_meetings(teams=["Sales", "Engineering"]) # Filter by specific teams list_meetings(calendar_invitees=["john.doe@company.com", "jane.smith@client.com"]) # Filter by specific attendees list_meetings(calendar_invitees_domains=["company.com", "client.com"]) # Filter by attendee domains

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
calendar_inviteesNoFilter by invitee emails
calendar_invitees_domainsNoFilter by domains
created_afterNoISO timestamp filter
created_beforeNoISO timestamp filter
cursorNoPagination cursor
include_action_itemsNoInclude action items
include_crm_matchesNoInclude CRM matches
per_pageNoNumber of results per page (default: 50)
recorded_byNoFilter by recorder emails
teamsNoFilter by team names

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Core handler function that executes the tool logic: builds API parameters using helper, calls Fathom API to list meetings with filters, handles pagination and errors.
    async def list_meetings(
        ctx: Context,
        calendar_invitees: Optional[List[str]] = None,
        calendar_invitees_domains: Optional[List[str]] = None,
        created_after: Optional[str] = None,
        created_before: Optional[str] = None,
        cursor: Optional[str] = None,
        include_action_items: Optional[bool] = None,
        include_crm_matches: Optional[bool] = None,
        recorded_by: Optional[List[str]] = None,
        teams: Optional[List[str]] = None,
        per_page: Optional[int] = None
    ) -> dict:
        """Retrieve paginated list of meetings with optional filtering and content inclusion.
        
        Returns meeting records with metadata, optionally including action items and CRM matches.
        Use recording_id from results to fetch individual recording content including summaries.
        
        Args:
            ctx: MCP context for logging
            calendar_invitees: List of email addresses to filter meetings by attendees
            calendar_invitees_domains: List of domains to filter meetings by attendee domains
            created_after: ISO 8601 timestamp (e.g., "2024-01-01T00:00:00Z") - meetings created after this time
            created_before: ISO 8601 timestamp (e.g., "2024-12-31T23:59:59Z") - meetings created before this time
            cursor: Pagination cursor from previous response for next page
            include_action_items: Set True to include action items in response
            include_crm_matches: Set True to include CRM match data in response
            recorded_by: List of email addresses to filter by meeting recorder
            teams: List of team names to filter meetings by associated teams
            per_page: Number of results per page (default: 50, configurable via DEFAULT_PER_PAGE env var)
        
        Returns:
            dict: {
                "items": [Meeting objects with fields like title, url, created_at, recording_id, etc.],
                "limit": int (default 20),
                "cursor": str (for pagination, null if no more results)
            }
        """
        try:
            await ctx.info("Fetching meetings from Fathom API")
    
            # Use config default if per_page not provided
            effective_per_page = per_page if per_page is not None else config.default_per_page
    
            # Build parameters
            params = _build_meetings_params(
                calendar_invitees=calendar_invitees,
                calendar_invitees_domains=calendar_invitees_domains,
                created_after=created_after,
                created_before=created_before,
                cursor=cursor,
                include_action_items=include_action_items,
                include_crm_matches=include_crm_matches,
                recorded_by=recorded_by,
                teams=teams,
                per_page=effective_per_page
            )
    
            result = await client.get_meetings(params=params if params else None)
            await ctx.info("Successfully retrieved meetings")
    
            return result
    
        except FathomAPIError as e:
            await ctx.error(f"Fathom API error: {e.message}")
            raise e
        except Exception as e:
            await ctx.error(f"Unexpected error fetching meetings: {str(e)}")
            raise e
  • server.py:106-152 (registration)
    MCP tool registration using @mcp.tool decorator. Defines input schema with Pydantic Field descriptions and defaults. Thin wrapper that delegates to the core implementation in tools/meetings.py.
    @mcp.tool
    async def list_meetings(
        ctx: Context,
        calendar_invitees: list[str] = Field(
            default=None, description="Filter by invitee emails"
        ),
        calendar_invitees_domains: list[str] = Field(
            default=None, description="Filter by domains"
        ),
        created_after: str = Field(default=None, description="ISO timestamp filter"),
        created_before: str = Field(default=None, description="ISO timestamp filter"),
        cursor: str = Field(default=None, description="Pagination cursor"),
        include_action_items: bool = Field(
            default=None, description="Include action items"
        ),
        include_crm_matches: bool = Field(default=None, description="Include CRM matches"),
        per_page: int = Field(
            default=config.default_per_page,
            description=f"Number of results per page (default: {config.default_per_page})",
        ),
        recorded_by: list[str] = Field(
            default=None, description="Filter by recorder emails"
        ),
        teams: list[str] = Field(default=None, description="Filter by team names"),
    ) -> Dict[str, Any]:
        """Retrieve paginated meetings with filtering and optional content inclusion (action items, CRM matches).
        
        Examples:
            list_meetings()  # Get all meetings (paginated)
            list_meetings(created_after="2024-01-01T00:00:00Z")  # Meetings after specific date
            list_meetings(teams=["Sales", "Engineering"])  # Filter by specific teams
            list_meetings(calendar_invitees=["john.doe@company.com", "jane.smith@client.com"])  # Filter by specific attendees
            list_meetings(calendar_invitees_domains=["company.com", "client.com"])  # Filter by attendee domains
        """
        return await tools.meetings.list_meetings(
            ctx,
            calendar_invitees=calendar_invitees,
            calendar_invitees_domains=calendar_invitees_domains,
            created_after=created_after,
            created_before=created_before,
            cursor=cursor,
            include_action_items=include_action_items,
            include_crm_matches=include_crm_matches,
            per_page=per_page,
            recorded_by=recorded_by,
            teams=teams
        )
  • Supporting utility function that constructs the query parameters dictionary for the Fathom API call based on provided filters.
    def _build_meetings_params(
        calendar_invitees: Optional[List[str]] = None,
        calendar_invitees_domains: Optional[List[str]] = None,
        created_after: Optional[str] = None,
        created_before: Optional[str] = None,
        cursor: Optional[str] = None,
        include_action_items: Optional[bool] = None,
        include_crm_matches: Optional[bool] = None,
        recorded_by: Optional[List[str]] = None,
        teams: Optional[List[str]] = None,
        per_page: Optional[int] = None
    ) -> dict:
        """Build API parameters dict from function arguments"""
        params = {}
        
        if calendar_invitees:
            params["calendar_invitees[]"] = calendar_invitees
        if calendar_invitees_domains:
            params["calendar_invitees_domains[]"] = calendar_invitees_domains
        if created_after:
            params["created_after"] = created_after
        if created_before:
            params["created_before"] = created_before
        if cursor:
            params["cursor"] = cursor
        if include_action_items is not None:
            params["include_action_items"] = include_action_items
        if include_crm_matches is not None:
            params["include_crm_matches"] = include_crm_matches
        if recorded_by:
            params["recorded_by[]"] = recorded_by
        if teams:
            params["teams[]"] = teams
        if per_page is not None:
            params["limit"] = per_page
        
        return params
  • Detailed docstring defining input parameters, their descriptions, and output schema for the list_meetings tool.
    """Retrieve paginated list of meetings with optional filtering and content inclusion.
    
    Returns meeting records with metadata, optionally including action items and CRM matches.
    Use recording_id from results to fetch individual recording content including summaries.
    
    Args:
        ctx: MCP context for logging
        calendar_invitees: List of email addresses to filter meetings by attendees
        calendar_invitees_domains: List of domains to filter meetings by attendee domains
        created_after: ISO 8601 timestamp (e.g., "2024-01-01T00:00:00Z") - meetings created after this time
        created_before: ISO 8601 timestamp (e.g., "2024-12-31T23:59:59Z") - meetings created before this time
        cursor: Pagination cursor from previous response for next page
        include_action_items: Set True to include action items in response
        include_crm_matches: Set True to include CRM match data in response
        recorded_by: List of email addresses to filter by meeting recorder
        teams: List of team names to filter meetings by associated teams
        per_page: Number of results per page (default: 50, configurable via DEFAULT_PER_PAGE env var)
    
    Returns:
        dict: {
            "items": [Meeting objects with fields like title, url, created_at, recording_id, etc.],
            "limit": int (default 20),
            "cursor": str (for pagination, null if no more results)
        }
    """
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully communicates key behavioral traits: pagination behavior, filtering capabilities, and optional content inclusion. However, it doesn't mention potential rate limits, authentication requirements, or what happens when no filters are applied (though examples show this). For a tool with no annotations, this is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core functionality in the first sentence. The examples are useful but somewhat lengthy; they could potentially be condensed. Every sentence serves a purpose, but the example section dominates the description length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, pagination, filtering), the description is complete enough. With 100% schema coverage and an output schema present, the description doesn't need to explain return values or parameter details. It effectively covers the tool's purpose, behavior, and usage through examples, making it sufficient for an agent to understand and use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3. The description adds some value by providing concrete examples of parameter usage (created_after with ISO format, teams with specific names, calendar_invitees with emails), but doesn't significantly enhance understanding beyond what the schema already documents. The examples illustrate practical application but don't add new semantic information about parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('retrieve paginated meetings') and resources ('meetings'), and distinguishes it from siblings by mentioning optional content inclusion (action items, CRM matches) which isn't mentioned for other meeting-related tools like get_meeting_details or search_meetings. The examples reinforce the core functionality of listing meetings with filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for usage through examples that demonstrate filtering scenarios (date-based, team-based, attendee-based), but doesn't explicitly state when to use this tool versus alternatives like search_meetings or get_meeting_details. The examples imply this is for broad listing with filtering, but no explicit comparison to siblings is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other 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/druellan/Fathom-Simple-MCP'

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