Skip to main content
Glama
Dot-Fun

Fathom AI MCP Server

by Dot-Fun

Fathom AI MCP Server

License: MIT Python 3.10+ FastMCP

A Model Context Protocol (MCP) server for interacting with the Fathom AI API. This server provides tools for accessing meeting recordings, summaries, transcripts, teams, and webhooks.

Quick Start

git clone https://github.com/Dot-Fun/fathom-mcp.git
cd fathom-mcp
uv pip install fastmcp httpx pydantic
export FATHOM_API_KEY="your_api_key_here"
fastmcp run server.py

Related MCP server: Fathom AI MCP Server

Features

Tools

  • list_meetings: List meetings with advanced filtering (by participants, date ranges, teams) and optional inclusion of transcripts, summaries, action items, and CRM matches

  • get_summary: Retrieve meeting summaries (supports async delivery)

  • get_transcript: Retrieve meeting transcripts with speaker information and timestamps (supports async delivery)

  • list_teams: List all accessible teams

  • list_team_members: List team members with optional team filtering

  • create_webhook: Create webhooks for meeting notifications with customizable triggers and content inclusion

  • delete_webhook: Delete webhooks by ID

Resources

  • fathom://api/info: API information and available endpoints

  • fathom://api/rate-limits: Rate limiting information and best practices

Installation

  1. Clone this repository or copy the files to your local machine

  2. Install dependencies using uv (recommended) or pip:

# Using uv (recommended)
uv pip install -e .

# Or using pip
pip install -e .
  1. Set up your Fathom API key:

Create a .env file in the project root:

FATHOM_API_KEY=your_api_key_here

The server auto-loads .env for local usage.

Get your API key from the Fathom settings page.

Usage

Running the Server

Local Development (stdio)

# Using fastmcp CLI
fastmcp run server.py

# Or directly with Python
python server.py

HTTP Server

# Modify server.py to run as HTTP server
if __name__ == "__main__":
    mcp.run(transport="http", host="0.0.0.0", port=8000)

Integrating with Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "fathom": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/fathom-mcp",
        "run",
        "fastmcp",
        "run",
        "server.py"
      ],
      "env": {
        "FATHOM_API_KEY": "your_api_key_here"
      }
    }
  }
}

Integrating with Codex (alternative)

Add this block to your Codex config (~/.codex/config.toml):

[mcp_servers.fathom]
command = "uv"
args = ["--directory", "/path/to/fathom-mcp", "run", "fastmcp", "run", "server.py"]

Then restart Codex (or reload MCP servers) and verify:

codex mcp list

API Reference

Authentication

All requests require the FATHOM_API_KEY environment variable. API keys are user-level and can access:

  • Meetings recorded by the user

  • Meetings shared to the user's team

Rate Limits

  • Global limit: 60 API calls per 60-second window

  • Rate-limited requests return HTTP 429

  • Monitor rate limit headers: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset

Tool Examples

List Recent Meetings

# List meetings with transcripts from the last week
result = await list_meetings(
    created_after="2024-01-01T00:00:00Z",
    include_transcript=True,
    include_summary=True
)

Get Meeting Summary

# Get summary for a specific recording
summary = await get_summary(recording_id=123456789)

Create a Webhook

# Create webhook for team recordings with all content
webhook = await create_webhook(
    destination_url="https://your-app.com/webhook",
    triggered_for=["my_recordings", "shared_team_recordings"],
    include_transcript=True,
    include_summary=True,
    include_action_items=True,
    include_crm_matches=True
)
# Returns webhook ID, URL, and secret for signature verification

Filter Meetings by Participants

# Find meetings with specific participants
meetings = await list_meetings(
    calendar_invitees=["alice@acme.com", "bob@acme.com"],
    include_action_items=True
)

List Team Members

# Get all members of the Sales team
members = await list_team_members(team="Sales")

Error Handling

The server handles common API errors:

  • 401 Unauthorized: Invalid or missing API key

  • 400 Bad Request: Invalid parameters

  • 404 Not Found: Resource doesn't exist

  • 429 Rate Limited: Too many requests (includes reset time)

Development

Project Structure

fathom-mcp/
├── server.py           # Main MCP server implementation
├── pyproject.toml      # Project configuration and dependencies
├── Dockerfile          # Container configuration for deployment
├── package.json        # Package metadata
├── README.md           # This file
├── .env                # Environment variables (API key)
└── .dockerignore       # Docker build exclusions

Code Quality

The project uses Ruff for linting and formatting:

# Install dev dependencies
uv pip install -e ".[dev]"

# Run linter
ruff check .

# Auto-fix issues
ruff check --fix .

# Format code
ruff format .

Testing

The server has been tested with real Fathom API data. See TEST_RESULTS.md for detailed test results.

To test manually:

# Set your API key
export FATHOM_API_KEY="your_api_key_here"

# Test server loads
python -c "from server import mcp; print('✓ Server ready')"

# Test API connectivity
python -c "
import asyncio
from server import make_request
asyncio.run(make_request('GET', '/meetings'))
"

API Documentation

For complete API documentation, visit:

License

This project is open source and available under the MIT License.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

Acknowledgments

Built with FastMCP - The fast, Pythonic way to build MCP servers.

Repository

GitHub: https://github.com/Dot-Fun/fathom-mcp

Available Tools

7 tools
create_webhookA

Create a new webhook for receiving meeting notifications.

At least one of the include_* flags must be true. The webhook will be triggered for the specified recording types and will include the requested content.

Returns the webhook ID, URL, secret (for signature verification), and configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
triggered_forYesArray of recording types that trigger this webhook. Options: 'my_recordings', 'shared_external_recordings', 'my_shared_with_team_recordings', 'shared_team_recordings'
destination_urlYesThe URL where webhook events will be sent
include_summaryNo
include_transcriptNo
include_crm_matchesNo
include_action_itemsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
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. It discloses the validation rule (at least one include_* flag), the triggering behavior for specified recording types, and the return value including the secret for signature verification. This adds meaningful behavioral context beyond the schema, though it omits potential side effects or prerequisites.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence. It is compact, containing only four sentences that cover the essential details: purpose, validation constraint, trigger behavior, and return value. No filler or redundancy.

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

Completeness4/5

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

Given the tool has an output schema (so return values are covered), the description is complete for a creation tool. It covers the main action, a key constraint, trigger conditions, and the content included. It does not mention prerequisites like existing meetings or error handling, but these are not critical for basic use and the schema covers parameter specifics.

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?

Schema description coverage is low (33%), with only destination_url and triggered_for described. The description adds value by grouping the include_* flags and stating they control requested content, plus requiring at least one true. However, it does not explain what each flag individually does; their names are self-explanatory, but the description does not explicitly compensate for the low schema coverage.

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 opens with a clear, specific verb and resource: 'Create a new webhook for receiving meeting notifications.' This distinguishes it from sibling tools like delete_webhook and clarifies its domain. The additional details about triggering and return values reinforce the purpose.

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: this is for creating a webhook to receive meeting notifications. It includes a critical usage constraint: 'At least one of the include_* flags must be true.' However, it does not explicitly mention when not to use this tool or name alternatives, such as delete_webhook for removal.

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

delete_webhookA

Delete a webhook by its ID.

Returns a success message if the webhook was deleted successfully.

ParametersJSON Schema
NameRequiredDescriptionDefault
webhook_idYesThe ID of the webhook to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description carries the burden of behavioral disclosure. While it states that a success message is returned, it does not mention permissions required, irreversibility of deletion, side effects on dependent resources, or error behavior. For a destructive operation, this is insufficient.

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

Conciseness5/5

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

The description is concise and front-loaded with the main action, followed by a brief return-value note. Both sentences are purposeful with no redundancy or filler.

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

Completeness4/5

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

For a simple one-parameter delete operation with an output schema, the description provides the essential purpose and return behavior. It does not elaborate on prerequisites or side effects, but the low complexity keeps the description reasonably complete. However, without annotations, a bit more detail on destructive effects would be beneficial.

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?

Schema coverage is 100%, and the parameter description 'The ID of the webhook to delete' is self-explanatory. The tool description adds no additional semantic value beyond the schema, so the baseline of 3 is appropriate.

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 action (delete), the resource (webhook), and the required identifier (ID). It distinguishes from siblings like create_webhook by using the opposite verb. The return behavior is also briefly mentioned, reinforcing the purpose.

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

Usage Guidelines3/5

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

Usage is implied by the tool's name and description: it is used to delete a webhook. However, there is no explicit guidance on when to choose this tool over alternatives, such as when to avoid deleting or whether other operations (like updating) should be considered. The presence of create_webhook as a sibling suggests inverse usage but is not explicitly stated.

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

get_summaryA

Get the summary for a specific meeting recording.

If destination_url is provided, the summary will be delivered asynchronously to that URL. Otherwise, the summary is returned directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
recording_idYesThe ID of the meeting recording
destination_urlNoOptional URL for async summary delivery

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It reveals a key behavior: if destination_url is provided, the summary is delivered asynchronously; otherwise it is returned directly. This adds meaningful context beyond the raw schema, though it omits further details like error handling or permissions.

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

Conciseness5/5

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

Two concise sentences with information front-loaded. Every phrase earns its place, explaining both the primary purpose and the key conditional behavior without redundancy.

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?

With an output schema present, return values need no explanation. The description covers the core purpose and the only behavioral nuance (async vs direct), making it complete for a tool of this simplicity.

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

Parameters4/5

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

Schema coverage is 100%, providing baseline 3. The description adds value by explaining the conditional effect of destination_url (async vs direct delivery), which is not fully explicit in the schema. This helps the agent understand the parameter's role in selecting behavior.

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 action ('Get') and the specific resource ('summary for a specific meeting recording'), distinguishing it from sibling tools like get_transcript. It also clarifies the scope (specific recording), leaving no ambiguity.

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 on when to use this tool (to retrieve a summary for a given recording) and explains behavior with destination_url. It does not explicitly mention alternatives or exclusions, but the context is sufficient for an agent to decide.

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

get_transcriptA

Get the transcript for a specific meeting recording.

If destination_url is provided, the transcript will be delivered asynchronously to that URL. Otherwise, the transcript is returned directly. The transcript includes speaker information, text, and timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
recording_idYesThe ID of the meeting recording
destination_urlNoOptional URL for async transcript delivery

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full disclosure burden. It explicitly reveals the asynchronous delivery behavior when destination_url is provided, versus synchronous return otherwise, and describes the transcript contents. This is valuable behavioral context beyond basic operation, though it does not cover potential errors or prerequisites.

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

Conciseness5/5

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

The description is two sentences, front-loads the primary purpose, and efficiently explains the conditional behavior. Every sentence earns its place with no fluff or repetition.

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

Completeness4/5

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

Given the tool's low complexity and presence of an output schema (though not shown), the description sufficiently explains the return content and the async option. It could mention error conditions or required permissions, but for a focused transcript retrieval tool, the information is reasonably complete.

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

Parameters4/5

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

The input schema covers 100% of parameters with descriptions, so baseline is 3. The description adds meaningful semantics by explaining that providing destination_url changes delivery mode to asynchronous, which is not evident from the schema alone. This elevates the score.

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 retrieves a transcript for a specific meeting recording, using the verb 'Get' and identifying the resource (transcript). It distinguishes from siblings like get_summary by specifying transcript content including speaker information, text, and timestamps.

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 when to use the tool: when a transcript is needed, and clarifies two usage modes based on destination_url (async vs sync). It does not explicitly mention alternatives or exclusions, but the context signals and sibling names make the purpose distinct enough.

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

list_meetingsA

List meetings recorded by or shared with the authenticated user.

Supports pagination via cursor and various filtering options including participants, date ranges, recording users, and teams. Can optionally include action items, CRM matches, summaries, and transcripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamsNoList of team names to filter by
cursorNo
recorded_byNoList of user emails who recorded the meetings
created_afterNoISO 8601 timestamp to filter meetings created after this date
created_beforeNoISO 8601 timestamp to filter meetings created before this date
include_summaryNo
calendar_inviteesNoList of email addresses to filter by
include_transcriptNo
include_crm_matchesNo
include_action_itemsNo
calendar_invitees_domainsNoList of company domains to filter by
calendar_invitees_domains_typeNoFilter by external/internal meetings: 'only_internal' or 'one_or_more_external'

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It adds useful context: the meetings are scoped to the authenticated user, pagination is available, and certain fields are optional includes. However, it does not mention authentication requirements, rate limits, default pagination size, or potential errors. Since this is a read-only list operation, the lack of side-effect disclosure is less critical, but the description still leaves significant behavioral aspects unspecified.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and followed by a concise summary of capabilities. Every sentence earns its place with no fluff or redundancy. It is appropriately sized for a tool with 12 parameters, giving a high-level overview without excessive detail.

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

Completeness4/5

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

Given the tool's complexity (12 parameters, output schema, multiple optional includes), the description provides a solid overview: it states the scope (user's meetings), lists the main filter dimensions, mentions pagination, and notes optional enrichments. The output schema further covers return values, so the description does not need to detail them. It lacks some specifics like default ordering or pagination limits, but these are less critical for an initial invocation. Overall, it is sufficiently complete for an agent to understand the tool's role and basic usage.

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

Parameters4/5

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

Schema description coverage is 58%, leaving several parameters (cursor, include_* booleans) without individual descriptions. The tool description compensates by explaining that cursor is for pagination and that the boolean flags control optional includes (action items, CRM matches, summaries, transcripts). It also groups filter types (participants, date ranges, recording users, teams), adding semantic structure beyond the raw schema. This meaningfully helps an agent understand how to use the 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 function with a specific verb ('List') and resource ('meetings'), and adds an important scope qualifier ('recorded by or shared with the authenticated user'). This distinguishes it from sibling tools like get_summary and get_transcript, which fetch specific artifacts, and list_teams/list_team_members, which list other resources.

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

Usage Guidelines3/5

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

The description implies usage by describing capabilities (pagination, filters, optional includes), but does not explicitly state when to prefer this tool over alternatives. For example, it mentions optional includes for summaries and transcripts, which suggests it could replace get_summary/get_transcript in some cases, but it does not give explicit guidance on when to use those tools instead. The usage is implied but not articulated.

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

list_team_membersA

List team members accessible to the authenticated user.

Can be filtered by team name. Returns member names, emails, and creation dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoTeam name to filter by
cursorNoCursor for pagination

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral transparency. It discloses the operation (list) and the returned fields (member names, emails, creation dates). However, it does not describe pagination behavior or any potential side effects, and 'authenticated user' implies access control without detailing permissions.

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

Conciseness5/5

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

The description is highly concise: two sentences that state purpose, filtering capability, and output fields. No filler or redundant information, making it easy for an agent to quickly grasp the tool.

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

Completeness4/5

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

For a simple list operation with two optional parameters and an output schema, the description is sufficiently complete. It covers what the tool returns and the main filter option. Minor gap: it does not explain cursor-based pagination, but the schema describes the cursor parameter, so an agent can infer its use.

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?

Input schema has 100% coverage with descriptions for both parameters (team and cursor). The description adds minimal overhead by reiterating that filtering by team is possible, but does not enrich the parameter meanings beyond what the schema already provides. Baseline of 3 is appropriate.

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 function: listing team members accessible to the authenticated user. It distinguishes itself from siblings like list_teams by specifying the resource (members) and the scope (accessible to the user).

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 when to use the tool (to list team members) and mentions the optional team filter. It does not explicitly exclude when not to use it or name alternative tools, but the sibling list_teams handles a different resource, so the purpose is unambiguous.

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

list_teamsA

List all teams accessible to the authenticated user.

Returns a paginated list of teams with their names and creation dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoCursor for pagination

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Without annotations, the description carries the full burden, and it discloses pagination, the returned fields (names and creation dates), and the authentication scope ('accessible to the authenticated user'). It does not mention edge cases like empty lists or rate limits, but provides solid behavioral context.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the action and scope. Every sentence adds value with no fluff or redundancy.

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?

The description covers the essential aspects: what the tool does, pagination behavior, and the returned data. With an output schema present (as indicated), the description does not need to explain return value details further. It is complete for a simple list tool.

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?

The schema description coverage is 100% for the only parameter (cursor), and the tool description adds little beyond what the schema already states about pagination. The description's mention of pagination aligns with the schema, but does not add significant new meaning.

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 lists teams accessible to the authenticated user, using a specific verb and resource. It distinguishes itself from siblings like list_meetings and list_team_members by explicitly focusing on teams.

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

Usage Guidelines3/5

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

The description implies the tool is for listing teams, but it does not explicitly compare with alternatives or state when to use this tool over list_team_members. The context is clear for the primary use case, but no exclusions or alternative guidance is provided.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv1.0.0
    • First observedcreate_webhook
    • First observeddelete_webhook
    • First observedget_summary
    • First observedget_transcript
    • First observedlist_meetings
    • First observedlist_team_members
    • First observedlist_teams

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: meetings, summaries, transcripts, teams, team members, and webhooks. Even though get_summary and get_transcript both retrieve meeting content, their purposes are clearly different and list_meetings can include optional content without overlapping directly.

Naming Consistency5/5

All tool names follow the verb_noun pattern with lowercase and underscores, such as list_meetings, get_summary, and create_webhook. There are no mixed conventions or vague verbs, making the API predictable.

Tool Count5/5

The 7 tools are well-scoped for a meeting AI assistant covering the core actions of browsing meetings, retrieving content, listing teams, and managing webhooks. The count is neither too sparse nor excessive.

Completeness4/5

The core workflow of listing meetings and retrieving summaries/transcripts is well-covered, along with team management and webhook lifecycle. Minor gaps exist, such as no explicit list_webhooks or update_meeting, but these are not critical for the primary use case.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables access to Fathom.video meeting data including AI-generated transcripts, summaries, and action items. Supports searching meetings, exporting to markdown, and managing webhooks through natural language in Cursor IDE.
    11
    21
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes the Fathom AI meeting intelligence API to Claude, allowing users to list meetings, fetch transcripts, and retrieve summaries. It also enables management of teams and members through the Model Context Protocol.
    52
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants access to Fathom meeting recordings, summaries, and transcripts via tools like list_meetings, get_meeting_summary, and get_meeting_transcript.
    MIT

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/Dot-Fun/fathom-mcp'

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