@mindstone-engineering/mcp-server-fathom
Advanced tools
+4
-1
@@ -0,7 +1,10 @@ | ||
| import { createRequire } from 'node:module'; | ||
| import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; | ||
| import { registerConfigureTools, registerMeetingTools, registerTeamTools, } from './tools/index.js'; | ||
| const require = createRequire(import.meta.url); | ||
| const pkg = require('../package.json'); | ||
| export function createServer() { | ||
| const server = new McpServer({ | ||
| name: 'fathom-mcp-server', | ||
| version: '0.1.0', | ||
| version: pkg.version, | ||
| }); | ||
@@ -8,0 +11,0 @@ registerConfigureTools(server); |
@@ -14,3 +14,3 @@ import { z } from 'zod'; | ||
| }), | ||
| annotations: { readOnlyHint: false, destructiveHint: false }, | ||
| annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: false }, | ||
| }, withErrorHandling(async (args) => { | ||
@@ -17,0 +17,0 @@ const trimmedKey = args.api_key.trim(); |
@@ -87,3 +87,3 @@ import { z } from 'zod'; | ||
| }), | ||
| annotations: { readOnlyHint: true }, | ||
| annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, | ||
| }, withErrorHandling(async (args) => { | ||
@@ -153,3 +153,3 @@ if (!isConfigured()) | ||
| }), | ||
| annotations: { readOnlyHint: true }, | ||
| annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, | ||
| }, withErrorHandling(async (args) => { | ||
@@ -229,3 +229,3 @@ if (!isConfigured()) | ||
| }), | ||
| annotations: { readOnlyHint: true }, | ||
| annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, | ||
| }, withErrorHandling(async (args) => { | ||
@@ -285,3 +285,45 @@ if (!isConfigured()) | ||
| })); | ||
| server.registerTool('get_fathom_meeting_participants', { | ||
| description: `Get the list of participants for a Fathom meeting by its recording_id. | ||
| Returns an array of calendar invitees including their name, email, email domain, | ||
| and whether they are an external attendee. | ||
| Note: Searches through up to 10 pages of recent meetings to find the meeting | ||
| if it is not in the first page. For older meetings, use list_fathom_meetings | ||
| with created_after/created_before date filters first. | ||
| Rate limit: May use 1-11 API calls depending on meeting position in history.`, | ||
| inputSchema: z.object({ | ||
| recording_id: z.number().int().positive().describe('The recording ID of the meeting (from list_fathom_meetings)'), | ||
| }), | ||
| annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, | ||
| }, withErrorHandling(async (args) => { | ||
| if (!isConfigured()) | ||
| return noApiKeyError(); | ||
| const recordingId = args.recording_id; | ||
| const meeting = await findMeetingByRecordingId(recordingId); | ||
| if (!meeting) { | ||
| return JSON.stringify({ | ||
| ok: false, | ||
| error: 'Meeting not found', | ||
| recordingId, | ||
| resolution: 'The meeting may not exist, may not be accessible, or may be older than the search limit. ' + | ||
| 'Try list_fathom_meetings with created_after/created_before date filters to find older meetings.', | ||
| }); | ||
| } | ||
| const participants = (meeting.calendar_invitees || []).map((invitee) => ({ | ||
| name: invitee.name || null, | ||
| email: invitee.email, | ||
| email_domain: invitee.email_domain || null, | ||
| is_external: invitee.is_external ?? false, | ||
| })); | ||
| return JSON.stringify({ | ||
| ok: true, | ||
| recording_id: recordingId, | ||
| title: meeting.title, | ||
| participants, | ||
| count: participants.length, | ||
| }); | ||
| })); | ||
| } | ||
| //# sourceMappingURL=meetings.js.map |
@@ -22,3 +22,3 @@ import { z } from 'zod'; | ||
| inputSchema: z.object({}), | ||
| annotations: { readOnlyHint: true }, | ||
| annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, | ||
| }, withErrorHandling(async () => { | ||
@@ -57,3 +57,3 @@ if (!isConfigured()) | ||
| }), | ||
| annotations: { readOnlyHint: true }, | ||
| annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true }, | ||
| }, withErrorHandling(async (args) => { | ||
@@ -60,0 +60,0 @@ if (!isConfigured()) |
+3
-3
@@ -9,3 +9,3 @@ # Functional Source License, Version 1.1, MIT Future License | ||
| Copyright 2026 Mindstone Engineering | ||
| Copyright 2026 Mindstone Learning Limited | ||
@@ -18,3 +18,3 @@ ## Terms and Conditions | ||
| **Licensor**: Mindstone Engineering | ||
| **Licensor**: Mindstone Learning Limited | ||
@@ -95,3 +95,3 @@ ### The Software | ||
| |---|---| | ||
| | Licensor | Mindstone Engineering | | ||
| | Licensor | Mindstone Learning Limited | | ||
| | Software | Fathom MCP Server | | ||
@@ -98,0 +98,0 @@ | Use Limitation | Competing Use | |
+1
-1
| { | ||
| "name": "@mindstone-engineering/mcp-server-fathom", | ||
| "version": "0.2.1", | ||
| "version": "0.2.2", | ||
| "description": "Fathom AI meeting transcription MCP server for Model Context Protocol hosts", | ||
@@ -5,0 +5,0 @@ "license": "FSL-1.1-MIT", |
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Unidentified License
LicenseSomething that seems like a license was found, but its contents could not be matched with a known license.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Unidentified License
LicenseSomething that seems like a license was found, but its contents could not be matched with a known license.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
41967
5.99%821
5.53%7
16.67%