Complete API overhaul with modular architecture#2
Open
BeneStem wants to merge 2 commits into
Open
Conversation
Architecture Refactor: - Split monolithic index.ts into modular structure - Add tools/ directory (meetings, recording, teams, webhooks) - Add utils/ for date, formatting, and retry helpers - Extract Zod schemas to tools/schemas.ts - Add constants.ts for configuration values Type System: - Fix calendar_invitees, recorded_by, transcript, action_items types - Add Team, TeamMember, Webhook type definitions - Add duration_minutes calculated from recording timestamps New Tools: - list_teams: discover available team names - list_team_members: discover team membership - create_webhook/delete_webhook: webhook management Enhanced Features: - Rename limit → response_limit for clarity - Auto-cursor pagination via listMeetingsWithLimit() - Date range shortcuts (today, yesterday, last_week, last_month, last_quarter) - Configurable transcript_search_limit (was hardcoded to 5) - Brief mode for ~80% token reduction - Response truncation (max_summary_length, max_transcript_entries) Bug Fixes: - URL encoding for teams filter (special chars like &) Error Handling: - Rate limit retry with exponential backoff - Improved error responses Safeguards: - Transcript access requires response_limit=1 - Webhook creation requires at least one include_* option Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6ea4ea6 to
47f0e2b
Compare
…erver instructions Differences vs official Fathom MCP (https://api.fathom.ai/mcp) drove this pass. Closed two gaps and stole two ideas while preserving this server's wins (share URLs, webhooks, list_team_members, inline batch fetching, date_range). Tools: - search_meetings: rename search_term -> query; AND-logic across whitespace words; default search_summary=true; add max_pages (default 10 ~= 250 meetings); report scanned_meetings in response - list_meetings: surface next_cursor when results were truncated; accept max_pages as alias for response_limit for parity with official MCP - get_meeting_transcript: accept url param to emit [MM:SS](url?timestamp=N) markdown deep-links per speaker entry - find_person (new): aggregates team_members + calendar invitees from recent meetings; description honestly states it does NOT search the transcript-speaker index like the official MCP Server: - Pass instructions field on init covering grounding, scope (user-scoped API key, no "anyone"), tool composition, find_person caveat, and webhook confirmation policy Tests: - tests/format.test.ts pins share_url preference at format.ts:79 using built-in node:test runner; npm run test:unit README: - Rewritten around six concrete differentiators vs the official MCP plus one honest limitation (find_person scope) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Complete rewrite of the MCP Fathom server with modular architecture, new tools, enhanced features, and bug fixes.
Architecture Refactor
index.tsinto clean modular structureType System Fixes
calendar_invitees:string[]→ rich objects (name/email/is_external)recorded_by:string→ object (name/email/team)transcript:string→ speaker-tagged entries with timestampsaction_items:string[]→ objects with assignee/completion statusduration_minutescalculated from recording timestampsNew Tools
list_teamslist_team_memberscreate_webhookdelete_webhookEnhanced Features
listMeetingsWithLimit()limit→response_limitfor claritytoday,yesterday,last_week,last_month,last_quartertranscript_search_limit(was hardcoded to 5)max_summary_length,max_transcript_entriesBug Fixes
&)Error Handling
Safeguards
response_limit=1include_*optionTest plan
npm run buildpasseslist_meetingswithresponse_limit=1returns 1 meetinglist_meetingswithdate_range=last_weekfilters correctlylist_teamsreturns available teamslist_team_membersreturns team membershipcreate_webhookwith valid URL and include option succeedsbrief_mode=truereturns minimal fields🤖 Generated with Claude Code