Install dependencies:
uv sync
uv run python -c "from server import mcp; print('Server ready!')"python server.pyfastmcp run server.pyuv run --with fastmcp fastmcp run server.pyIf you created a .env file with FATHOM_API_KEY=..., it is auto-loaded by server.py.
Add this configuration to your Claude Desktop config file:
Location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Configuration:
{
"mcpServers": {
"fathom": {
"command": "uv",
"args": [
"--directory",
"/path/to/fathom-mcp",
"run",
"fastmcp",
"run",
"server.py"
],
"env": {
"FATHOM_API_KEY": "your_api_key_here"
}
}
}
}After adding the configuration, restart Claude Desktop.
List meetings with advanced filtering options.
Example prompts for Claude:
- "Show me all meetings from the past week"
- "List meetings with alice@acme.com as a participant"
- "Find meetings with external participants"
- "Show me meetings recorded by bob@acme.com with transcripts"
Parameters:
cursor: For paginationcalendar_invitees: Filter by participant emailscalendar_invitees_domains: Filter by company domainscalendar_invitees_domains_type: Filter by internal/externalcreated_after/created_before: Date range filteringrecorded_by: Filter by recording userteams: Filter by team namesinclude_action_items: Include action items in responseinclude_crm_matches: Include CRM datainclude_summary: Include meeting summaryinclude_transcript: Include full transcript
Get the summary for a specific meeting recording.
Example prompts:
- "Get the summary for recording 93339249"
- "Show me what was discussed in meeting 93339249"
Parameters:
recording_id: The meeting recording ID (required)destination_url: Optional URL for async delivery
Get the transcript for a meeting with speaker information and timestamps.
Example prompts:
- "Get the transcript for recording 93339249"
- "Show me the full transcript with timestamps for meeting 93339249"
Parameters:
recording_id: The meeting recording ID (required)destination_url: Optional URL for async delivery
List all teams you have access to.
Example prompts:
- "List all my teams"
- "Show me available teams"
Parameters:
cursor: For pagination
List members of a specific team or all team members.
Example prompts:
- "List all members of the Sales team"
- "Show me who is on my teams"
Parameters:
cursor: For paginationteam: Filter by specific team name
Create a webhook for receiving meeting notifications.
Example prompts:
- "Create a webhook for my recordings at https://myapp.com/webhook"
- "Set up a webhook that includes transcripts and summaries"
Parameters:
destination_url: Where to send webhook events (required)triggered_for: Array of recording types (required)- Options:
my_recordings,shared_external_recordings,my_shared_with_team_recordings,shared_team_recordings
- Options:
include_action_items: Include action items (boolean)include_crm_matches: Include CRM matches (boolean)include_summary: Include summary (boolean)include_transcript: Include transcript (boolean)
Note: At least one include_* flag must be true.
Delete a webhook by its ID.
Example prompts:
- "Delete webhook abc123"
- "Remove the webhook with ID abc123"
Parameters:
webhook_id: The webhook ID (required)
Get information about the Fathom API, available endpoints, and authentication.
Example prompts:
- "Show me info about the Fathom API"
- "What endpoints are available?"
Get information about API rate limits and best practices.
Example prompts:
- "What are the rate limits for Fathom API?"
- "How many requests can I make?"
- "List my meetings from the past 7 days with summaries"
- Claude will call
list_meetingswithcreated_afterparameter - Review the summaries directly in the response
- "List my recent meetings"
- Note the
recording_idof interest - "Get the full transcript for recording 93339249"
- "Get the summary for recording 93339249"
- "Create a webhook at https://myapp.com/fathom-webhook that includes transcripts and summaries for my recordings"
- Claude will call
create_webhookwith appropriate parameters - Note the returned
webhook_idandsecretfor signature verification
- "List all my teams"
- "Show me members of the Sales team"
- "List all meetings with the Sales team in the past month"
You can test the server directly with Python:
import asyncio
import os
from server import make_request
async def test():
# List meetings
meetings = await make_request("GET", "/meetings", params={"limit": 5})
print(f"Found {len(meetings['items'])} meetings")
# Get a summary
if meetings['items']:
recording_id = meetings['items'][0]['recording_id']
summary = await make_request("GET", f"/recordings/{recording_id}/summary")
print(f"Summary: {summary}")
asyncio.run(test())Error: "FATHOM_API_KEY environment variable is required"
Solution: Make sure the API key is set in your environment or .env file
Error: "Rate limit exceeded. Reset in X seconds." Solution: The API allows 60 requests per 60 seconds. Wait for the reset time or implement exponential backoff.
Error: "Authentication failed. Please check your FATHOM_API_KEY." Solution: Verify your API key is correct and hasn't been revoked. Get a new key from Fathom Settings.
Error: "Resource not found." Solution: Check that the recording ID or webhook ID exists and you have permission to access it.
- Rate Limit: 60 requests per 60 seconds
- Access Scope: API keys can only access meetings you recorded or meetings shared with your team
- Admin Keys: Admin API keys do NOT automatically grant access to all users' meetings
For issues with:
- This MCP server: Check the README.md or open an issue on GitHub
- Fathom API: Visit Fathom Developer Documentation or contact Fathom support