Skip to main content
Glama

Fathom MCP Server

License: MIT Fathom-Simple-MCP MCP server

A Model Context Protocol (MCP) server for accessing Fathom.video meeting recordings, transcripts, summaries, teams, and team members.

This implementation provides streamlined access to Fathom meeting data while minimizing API consumption. It is optimized for efficiency and simplicity, using the Hybrid output format (TOON text + JSON structured data) by default for less token usage and better LLM processing.

Features

  • Search Meetings: Search meetings by keyword across titles, attendees, teams, topics, and summaries. Optionally search within transcripts.

  • List Meetings: Retrieve meetings with optional filtering and inclusion of summaries

  • Get Meeting Details: Retrieve comprehensive meeting data including AI-generated summaries and transcripts

  • List Teams: Retrieve all teams

  • List Team Members: Retrieve team members with optional team filtering

Related MCP server: Fathom AI MCP Server

Requirements

  • Python 3.10+

  • Fathom API key

Installation

  1. Clone or download this repository

  2. Install dependencies:

pip install -r requirements.txt

or

uv venv && uv sync

Configuration

The server uses environment variables for configuration:

  • FATHOM_API_KEY: Your Fathom API key (required)

  • FATHOM_TIMEOUT: Request timeout in seconds (default: 30)

  • OUTPUT_FORMAT: Output format for tool responses ("hybrid", "toon", or "json", default: "hybrid")

  • DEFAULT_PER_PAGE: Number of results per page (default: 50)

Usage

{
  "fathom": {
    "command": "python",
    "args": [
      "server.py"
    ],
    "env": {
      "FATHOM_API_KEY": "<api-key>"
    }
  }
}

Using UV

{
  "fathom": {
    "command": "uv",
    "args": [
      "--directory",
      "/mcp_path/fathom-mcp",
      "run",
      "fathom-mcp"
    ],
    "env": {
      "FATHOM_API_KEY": "<api-key>"
    }
  }
}

Available Tools

list_meetings

Retrieve meetings with optional filtering and pagination.

Properties:

  • calendar_invitees (list[str], optional): Filter by invitee emails

  • calendar_invitees_domains (list[str], optional): Filter by domains

  • created_after (str, optional): ISO timestamp filter

  • created_before (str, optional): ISO timestamp filter

  • cursor (str, optional): Pagination cursor

  • include_action_items (bool, optional): Include action items

  • include_crm_matches (bool, optional): Include CRM matches

  • per_page (int, optional): Number of results per page (default: 50, configurable via DEFAULT_PER_PAGE env var)

  • recorded_by (list[str], optional): Filter by recorder emails

  • teams (list[str], optional): Filter by team names

search_meetings

Search meetings by keyword across titles, participants, teams, topics, summaries, and optionally transcripts.

Properties:

  • query (str, required): Search query to match against meeting metadata and optionally transcript content

  • include_transcript (bool, optional): If True, search within transcripts and include them in results (default: False). Warning: This is slower and more resource-intensive.

Returns: A search results object containing:

  • items: List of matching meetings with full meeting details (and transcripts if requested)

  • query: The search query used

  • total_matches: Number of meetings that matched the search

  • searched_transcripts: Boolean indicating whether transcripts were searched

Examples:

  • search_meetings("McDonalds") - Search metadata only (fast)

  • search_meetings("budget discussion", include_transcript=True) - Search including full transcripts (slower)

  • search_meetings("engineering") - Find meetings related to engineering topics

get_meeting_details

Retrieve comprehensive meeting details including summary and metadata (without transcript).

Properties:

  • recording_id (int): The recording identifier

Returns: A unified meeting object containing:

  • recording_id: Unique identifier for the recording

  • title: Meeting title

  • meeting_url: URL to the meeting recording

  • share_url: Shareable URL for the meeting

  • created_at: When the meeting was created

  • scheduled_start_time: Original scheduled start time

  • scheduled_end_time: Original scheduled end time

  • recording_start_time: When recording actually started

  • recording_end_time: When recording actually ended

  • transcript_language: Language of the transcript

  • participants: List of meeting participants with names, emails, and external/internal status

  • recorded_by: Information about who recorded the meeting (name, email, team)

  • teams: Teams associated with the meeting

  • topics: AI-detected topics discussed

  • sentiment: Overall sentiment analysis

  • crm_matches: CRM contact matches

  • summary: AI-generated meeting summary (converted to plain text from markdown)

get_meeting_transcript

Retrieve meeting transcript with essential metadata (id, title, participants, dates).

Properties:

  • recording_id (int): The recording identifier

Returns: A transcript object containing:

  • recording_id: Unique identifier for the recording

  • title: Meeting title

  • participants: List of meeting participants

  • created_at: When the meeting was created

  • scheduled_start_time: Original scheduled start time

  • scheduled_end_time: Original scheduled end time

  • transcript: Full meeting transcript with timestamps

list_teams

Retrieve teams with optional pagination.

Properties:

  • cursor (str, optional): Pagination cursor

  • per_page (int, optional): Number of results per page (default: 50, configurable via DEFAULT_PER_PAGE env var)

list_team_members

Retrieve team members with optional filtering and pagination.

Properties:

  • cursor (str, optional): Pagination cursor

  • per_page (int, optional): Number of results per page (default: 50, configurable via DEFAULT_PER_PAGE env var)

  • team (str, optional): Filter by team name

MCP Configuration Examples

Claude Code

{
  "mcpServers": {
    "fathom": {
      "command": "python",
      "args": ["path/to/fathom-mcp/server.py"],
      "env": {
        "FATHOM_API_KEY": "your-api-key-here"
      }
    }
  }
}

GitHub Copilot (VS Code)

{
  "servers": {
    "fathom": {
      "command": "python",
      "args": ["path/to/fathom-mcp/server.py"],
      "env": {
        "FATHOM_API_KEY": "your-api-key-here"
      }
    }
  }
}

Roo Code

{
  "mcp": {
    "servers": {
      "fathom": {
        "command": "uv",
        "args": [
          "--directory",
          "/mcp_path/fathom-mcp",
          "run",
          "fathom-mcp"
        ],
        "env": {
          "FATHOM_API_KEY": "your-api-key-here"
        }
      }
    }
  }
}

Output Format

The server supports three output formats configured via the OUTPUT_FORMAT environment variable:

Mode

content (text)

structured_content

Description

hybrid (default)

TOON

JSON dict

Both TOON for token-efficient LLM reading and structured data for programmatic access

toon

TOON

{ "toon": toonText }

Pure TOON (Token-Optimized Object Notation) with no dual-format overhead

json

JSON string

JSON dict

Standard FastMCP JSON output

All output is filtered to remove empty, null, or redundant information for improved efficiency.

Error Handling

The server provides comprehensive error handling:

  • 401 Unauthorized: Invalid API key

  • 404 Not Found: Resource not found

  • 429 Rate Limited: Too many requests

  • 500 Server Error: Fathom API issues

All errors are logged via MCP context with appropriate severity levels.

Security

  • API keys are loaded from environment variables

  • No sensitive data is logged

  • HTTPS is used for all API requests

  • Error messages don't expose internal details

License

MIT License.

Available Tools

6 tools
get_meeting_detailsA
Read-only

Retrieve comprehensive meeting details including summary and metadata (without transcript).

Example: get_meeting_details([recording_id])

Inputs: recording_id (required). Returns: object

get_meeting_transcriptB
Read-only

Retrieve meeting transcript with essential metadata (id, title, participants, dates).

Example: get_meeting_transcript([recording_id])

Inputs: recording_id (required). Returns: object

list_meetingsA
Read-only

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

Inputs: teams, cursor, per_page, recorded_by, +6 more. Returns: object

list_team_membersA
Read-only

Retrieve paginated team members with optional team filtering.

Examples: list_team_members_tool() # Get all team members across all teams list_team_members_tool(team="Engineering") # Filter members by team name list_team_members_tool(cursor="def456") # Paginate through member list

Inputs: team, cursor, per_page. Returns: object

list_teamsA
Read-only

Retrieve paginated list of teams with organizational structure.

Examples: list_teams_tool() # Get first page of teams list_teams_tool(cursor="abc123") # Get next page using cursor

Inputs: cursor, per_page. Returns: object

search_meetingsA
Read-only

Search meetings by keyword across metadata fields and optionally transcripts.

This tool searches meeting metadata (titles, attendees, teams, topics, summaries) and optionally full transcript content. Uses fuzzy matching to handle partial matches, plurals, and case-insensitive search.

By default, transcripts are NOT searched or included to optimize performance. Set include_transcript=True to search within and return transcript data.

Fetches all meetings (with pagination) and returns those matching the search query.

Examples: search_meetings("McDonalds") # Search metadata only search_meetings("budget discussion", include_transcript=True) # Search including transcripts search_meetings("engineering") # Find meetings related to engineering

Inputs: query (required), include_transcript. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: search, list, get details, get transcript for meetings, and list teams and team members. There is no ambiguity or overlap.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern in snake_case (e.g., search_meetings, list_teams). The minor pluralization difference between 'list_teams' and 'list_team_members' is natural and acceptable.

    Tool Count5/5

    The server has 6 tools, which is well-scoped for a simple meeting and team management server. Each tool serves a necessary function without being redundant or excessive.

    Completeness4/5

    The tool set covers all read operations for meetings (search, list, details, transcript) and teams (list teams, members). However, it lacks any write operations (create, update, delete), which may be intended but is a minor gap for a full lifecycle.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers