create_webhook
Set up automated webhook notifications for Fathom meeting recordings. Configure which recordings trigger events and customize payload content like transcripts, summaries, and action items.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| destination_url | Yes | URL to receive webhook events | |
| include_transcript | No | Include transcript in webhook payload | |
| include_summary | No | Include summary in webhook payload | |
| include_action_items | No | Include action items in webhook payload | |
| include_crm_matches | No | Include CRM matches in webhook payload | |
| triggered_for | No | Which recordings trigger the webhook |
Implementation Reference
- src/index.ts:398-416 (handler)MCP tool handler for 'create_webhook' that invokes FathomClient.createWebhook and formats a markdown response with webhook details including ID, URL, and secret.async ({ destination_url, include_transcript, include_summary, include_action_items, include_crm_matches, triggered_for }) => { console.error(`Creating webhook for ${destination_url}...`); const webhook = await fathom.createWebhook({ destination_url, include_transcript, include_summary, include_action_items, include_crm_matches, triggered_for, }); const markdown = `# Webhook Created Successfully\n\n| Field | Value |\n|-------|-------|\n| **ID** | ${webhook.id} |\n| **URL** | ${webhook.url} |\n| **Secret** | \`${webhook.secret}\` |\n| **Include Transcript** | ${webhook.include_transcript} |\n| **Include Summary** | ${webhook.include_summary} |\n| **Include Action Items** | ${webhook.include_action_items} |\n| **Include CRM Matches** | ${webhook.include_crm_matches} |\n| **Triggered For** | ${webhook.triggered_for.join(', ')} |\n\n**Important:** Save the webhook secret securely - you'll need it to verify incoming webhooks.`; console.error(`Webhook created: ${webhook.id}`); return { content: [{ type: 'text', text: markdown }], }; }
- src/index.ts:390-397 (schema)Zod input schema defining parameters for the 'create_webhook' MCP tool.{ destination_url: z.string().describe('URL to receive webhook events'), include_transcript: z.boolean().optional().describe('Include transcript in webhook payload'), include_summary: z.boolean().optional().describe('Include summary in webhook payload'), include_action_items: z.boolean().optional().describe('Include action items in webhook payload'), include_crm_matches: z.boolean().optional().describe('Include CRM matches in webhook payload'), triggered_for: z.array(z.enum(['my_recordings', 'shared_external_recordings', 'my_shared_with_team_recordings', 'shared_team_recordings'])).optional().describe('Which recordings trigger the webhook'), },
- src/index.ts:388-417 (registration)Registration of the 'create_webhook' tool using McpServer.tool() with name, input schema, and handler function.server.tool( 'create_webhook', { destination_url: z.string().describe('URL to receive webhook events'), include_transcript: z.boolean().optional().describe('Include transcript in webhook payload'), include_summary: z.boolean().optional().describe('Include summary in webhook payload'), include_action_items: z.boolean().optional().describe('Include action items in webhook payload'), include_crm_matches: z.boolean().optional().describe('Include CRM matches in webhook payload'), triggered_for: z.array(z.enum(['my_recordings', 'shared_external_recordings', 'my_shared_with_team_recordings', 'shared_team_recordings'])).optional().describe('Which recordings trigger the webhook'), }, async ({ destination_url, include_transcript, include_summary, include_action_items, include_crm_matches, triggered_for }) => { console.error(`Creating webhook for ${destination_url}...`); const webhook = await fathom.createWebhook({ destination_url, include_transcript, include_summary, include_action_items, include_crm_matches, triggered_for, }); const markdown = `# Webhook Created Successfully\n\n| Field | Value |\n|-------|-------|\n| **ID** | ${webhook.id} |\n| **URL** | ${webhook.url} |\n| **Secret** | \`${webhook.secret}\` |\n| **Include Transcript** | ${webhook.include_transcript} |\n| **Include Summary** | ${webhook.include_summary} |\n| **Include Action Items** | ${webhook.include_action_items} |\n| **Include CRM Matches** | ${webhook.include_crm_matches} |\n| **Triggered For** | ${webhook.triggered_for.join(', ')} |\n\n**Important:** Save the webhook secret securely - you'll need it to verify incoming webhooks.`; console.error(`Webhook created: ${webhook.id}`); return { content: [{ type: 'text', text: markdown }], }; } );
- src/fathom-client.ts:313-318 (helper)FathomClient helper method that sends POST request to Fathom API to create a webhook.async createWebhook(params: CreateWebhookParams): Promise<Webhook> { return this.request<Webhook>('/webhooks', { method: 'POST', body: JSON.stringify(params), }); }
- src/fathom-client.ts:160-167 (schema)TypeScript interface defining parameters for FathomClient.createWebhook method.export interface CreateWebhookParams { destination_url: string; include_transcript?: boolean; include_summary?: boolean; include_action_items?: boolean; include_crm_matches?: boolean; triggered_for?: ('my_recordings' | 'shared_external_recordings' | 'my_shared_with_team_recordings' | 'shared_team_recordings')[]; }