MCP server for Fathom AI meeting API integration
The server provides a single tool, search_meetings, with a well-structured schema and detailed description. The description is comprehensive (350+ chars) and explains visibility rules, search mechanics, and parameter behavior clearly. The input schema uses proper JSON Schema with types, descriptions, and defaults for most parameters. However, several parameter descriptions contain implementation details and examples that could confuse LLMs, and the output schema is not documented. The tool follows verb_noun naming convention and is read-only, which is appropriate. No error handling guidance is provided in the response schema.
Find Fathom meetings by company/domain/email/keyword in titles/attendees. Fathom has no native text search — uses a bounded date scan. days_back: recent→14, month→30, quarter→90. Visibility: (1) No Team Visibility is always hidden (voluntary hide) unless include_private=true; (2) Executive/Personal hosts only appear when Visible to All Teams; (3) other teams appear for any non-private visibility.
Output schema not documented. LLMs cannot predict what fields will be returned (e.g., meeting structure, pagination format) or plan downstream tool calls. The tool returns enriched meetings with transcripts/summaries, but the response structure is invisible to callers.
Parameter descriptions contain implementation details and example values that LLMs may reuse literally. For example, 'arkema' and 'cecile.dourthe@arkema.com' in search_term description risk the LLM passing these exact values in real calls. 'recent→14, month→30, quarter→90' in days_back suggests specific magic values LLMs should infer from user intent, not hardcode.
No error handling guidance in tool definition. Callers cannot predict failure modes (e.g., rate limits, no results found, invalid API key). The tool lacks a 'recovery' or error classification pattern to guide LLM retry logic.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 74 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 34 | - | v1 |
Deprecated parameter 'exclude_private' coexists with 'include_private', creating ambiguity. The description says 'Prefer include_private' but both are exposed. LLMs may pass both, causing undefined behavior.
days_back parameter has a complex decision tree in the description ('recent→14, month→30, quarter→90') that requires the LLM to infer user intent semantically. This is fragile. A clearer approach: require explicit days_back values or provide separate discovery tool (e.g., 'list_date_presets') that returns valid ranges.
calendar_invitees and calendar_invitees_domains parameters accept arrays but lack cardinality constraints. No min/max length specified. Description says 'Prefer putting the company/domain in search_term first', this dependency should be explicit in both parameter descriptions.