@shawnfroos/gong-lite 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,231 @@
1
+ // Tool handlers extracted for testability
2
+ import { ListCallsInputSchema, GetCallInputSchema, GetCallSummaryInputSchema, GetCallAnalyticsInputSchema, SearchCallsInputSchema, SearchSummariesInputSchema, ExportCallMarkdownInputSchema, ExportSummariesCsvInputSchema, } from './tools.js';
3
+ import { TranscriptFormatter, buildCallData } from './transcript-formatter.js';
4
+ import { buildSummaryRow, generateSummariesCsv } from './csv-utils.js';
5
+ export async function handleListCalls(client, args) {
6
+ const input = ListCallsInputSchema.parse(args);
7
+ const options = {};
8
+ if (input.fromDate)
9
+ options.fromDateTime = input.fromDate;
10
+ if (input.toDate)
11
+ options.toDateTime = input.toDate;
12
+ if (input.participantEmail)
13
+ options.participantEmails = [input.participantEmail];
14
+ if (input.limit)
15
+ options.maxRecords = input.limit;
16
+ const result = await client.listCalls(options);
17
+ const response = {
18
+ calls: result.records,
19
+ totalFetched: result.totalFetched,
20
+ truncated: result.truncated,
21
+ };
22
+ return {
23
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
24
+ };
25
+ }
26
+ export async function handleGetCall(client, args) {
27
+ const input = GetCallInputSchema.parse(args);
28
+ const call = await client.getCall(input.callId);
29
+ if (!call) {
30
+ return {
31
+ content: [{ type: 'text', text: `Call not found: ${input.callId}` }],
32
+ isError: true,
33
+ };
34
+ }
35
+ return {
36
+ content: [{ type: 'text', text: JSON.stringify(call, null, 2) }],
37
+ };
38
+ }
39
+ export async function handleGetTranscript(client, args) {
40
+ const input = GetCallInputSchema.parse(args);
41
+ const transcripts = await client.getTranscripts([input.callId]);
42
+ const transcript = transcripts[0];
43
+ if (!transcript) {
44
+ return {
45
+ content: [{ type: 'text', text: `Transcript not found: ${input.callId}` }],
46
+ isError: true,
47
+ };
48
+ }
49
+ return {
50
+ content: [{ type: 'text', text: JSON.stringify(transcript, null, 2) }],
51
+ };
52
+ }
53
+ export async function handleListUsers(client) {
54
+ const result = await client.listUsers();
55
+ const response = {
56
+ users: result.records,
57
+ totalFetched: result.totalFetched,
58
+ truncated: result.truncated,
59
+ };
60
+ return {
61
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
62
+ };
63
+ }
64
+ export async function handleSearchCalls(client, args) {
65
+ const input = SearchCallsInputSchema.parse(args);
66
+ const options = {
67
+ query: input.query,
68
+ };
69
+ if (input.fromDate)
70
+ options.fromDateTime = input.fromDate;
71
+ if (input.toDate)
72
+ options.toDateTime = input.toDate;
73
+ if (input.limit)
74
+ options.maxRecords = input.limit;
75
+ const result = await client.searchCalls(options);
76
+ const response = {
77
+ results: result.records,
78
+ totalFetched: result.totalFetched,
79
+ truncated: result.truncated,
80
+ };
81
+ return {
82
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
83
+ };
84
+ }
85
+ export async function handleGetCallSummary(client, args) {
86
+ const input = GetCallSummaryInputSchema.parse(args);
87
+ const summary = await client.getCallSummary(input.callId);
88
+ if (!summary) {
89
+ return {
90
+ content: [{ type: 'text', text: `Call not found: ${input.callId}` }],
91
+ isError: true,
92
+ };
93
+ }
94
+ return {
95
+ content: [{ type: 'text', text: JSON.stringify(summary, null, 2) }],
96
+ };
97
+ }
98
+ export async function handleGetCallAnalytics(client, args) {
99
+ const input = GetCallAnalyticsInputSchema.parse(args);
100
+ const analytics = await client.getCallAnalytics(input.callId);
101
+ if (!analytics) {
102
+ return {
103
+ content: [{ type: 'text', text: `Call not found: ${input.callId}` }],
104
+ isError: true,
105
+ };
106
+ }
107
+ return {
108
+ content: [{ type: 'text', text: JSON.stringify(analytics, null, 2) }],
109
+ };
110
+ }
111
+ export async function handleExportCallMarkdown(client, args) {
112
+ const input = ExportCallMarkdownInputSchema.parse(args);
113
+ const includeFullTranscript = input.format !== 'summary';
114
+ // Fetch call details
115
+ const callDetails = await client.getCall(input.callId);
116
+ if (!callDetails) {
117
+ return {
118
+ content: [{ type: 'text', text: `Call not found: ${input.callId}` }],
119
+ isError: true,
120
+ };
121
+ }
122
+ // Fetch transcript if needed
123
+ let transcript = null;
124
+ if (includeFullTranscript) {
125
+ const transcripts = await client.getTranscripts([input.callId]);
126
+ transcript = transcripts[0] ?? null;
127
+ }
128
+ // Fetch AI summary
129
+ const summary = await client.getCallSummary(input.callId);
130
+ // Build call data and generate markdown
131
+ const callData = buildCallData(callDetails, transcript, summary);
132
+ const markdown = TranscriptFormatter.generateCompleteMarkdown(callData, includeFullTranscript);
133
+ const filename = TranscriptFormatter.generateFileName(callData);
134
+ return {
135
+ content: [
136
+ { type: 'text', text: `# Suggested filename: ${filename}\n\n${markdown}` },
137
+ ],
138
+ };
139
+ }
140
+ export async function handleExportSummariesCsv(client, args) {
141
+ const input = ExportSummariesCsvInputSchema.parse(args);
142
+ const maxCalls = input.limit ?? 100;
143
+ // Fetch calls within date range
144
+ const listOptions = {
145
+ maxRecords: maxCalls,
146
+ };
147
+ if (input.fromDate)
148
+ listOptions.fromDateTime = input.fromDate;
149
+ if (input.toDate)
150
+ listOptions.toDateTime = input.toDate;
151
+ if (input.participantEmail)
152
+ listOptions.participantEmails = [input.participantEmail];
153
+ const callsResult = await client.listCalls(listOptions);
154
+ if (callsResult.records.length === 0) {
155
+ return {
156
+ content: [{ type: 'text', text: 'No calls found matching the criteria.' }],
157
+ };
158
+ }
159
+ // Fetch details and summaries for each call
160
+ const rows = [];
161
+ for (const call of callsResult.records) {
162
+ const details = await client.getCall(call.id);
163
+ const summary = await client.getCallSummary(call.id);
164
+ rows.push(buildSummaryRow(call, details, summary));
165
+ }
166
+ const csv = generateSummariesCsv(rows);
167
+ return {
168
+ content: [
169
+ { type: 'text', text: csv },
170
+ ],
171
+ };
172
+ }
173
+ export async function handleSearchSummaries(client, args) {
174
+ const input = SearchSummariesInputSchema.parse(args);
175
+ const options = {
176
+ query: input.query,
177
+ };
178
+ if (input.fromDate)
179
+ options.fromDateTime = input.fromDate;
180
+ if (input.toDate)
181
+ options.toDateTime = input.toDate;
182
+ if (input.limit)
183
+ options.maxRecords = input.limit;
184
+ const result = await client.searchSummaries(options);
185
+ const response = {
186
+ results: result.records,
187
+ totalFetched: result.totalFetched,
188
+ truncated: result.truncated,
189
+ };
190
+ return {
191
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
192
+ };
193
+ }
194
+ export async function handleToolCall(client, name, args) {
195
+ try {
196
+ switch (name) {
197
+ case 'list_calls':
198
+ return await handleListCalls(client, args);
199
+ case 'get_call':
200
+ return await handleGetCall(client, args);
201
+ case 'get_transcript':
202
+ return await handleGetTranscript(client, args);
203
+ case 'list_users':
204
+ return await handleListUsers(client);
205
+ case 'search_calls':
206
+ return await handleSearchCalls(client, args);
207
+ case 'get_call_summary':
208
+ return await handleGetCallSummary(client, args);
209
+ case 'get_call_analytics':
210
+ return await handleGetCallAnalytics(client, args);
211
+ case 'export_call_markdown':
212
+ return await handleExportCallMarkdown(client, args);
213
+ case 'export_summaries_csv':
214
+ return await handleExportSummariesCsv(client, args);
215
+ case 'search_summaries':
216
+ return await handleSearchSummaries(client, args);
217
+ default:
218
+ return {
219
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
220
+ isError: true,
221
+ };
222
+ }
223
+ }
224
+ catch (error) {
225
+ return {
226
+ content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
227
+ isError: true,
228
+ };
229
+ }
230
+ }
231
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAOvE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAsG,EAAE,CAAC;IACtH,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1D,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IACpD,IAAI,KAAK,CAAC,gBAAgB;QAAE,OAAO,CAAC,iBAAiB,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACjF,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,OAAO;QACrB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,OAAO;QACrB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAuF;QAClG,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;IACF,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1D,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IACpD,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,6BAA6B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;IAEzD,qBAAqB;IACrB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,6BAA6B;IAC7B,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE1D,wCAAwC;IACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,wBAAwB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEhE,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,QAAQ,OAAO,QAAQ,EAAE,EAAE;SAC3E;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,6BAA6B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC;IAEpC,gCAAgC;IAChC,MAAM,WAAW,GAAsG;QACrH,UAAU,EAAE,QAAQ;KACrB,CAAC;IACF,IAAI,KAAK,CAAC,QAAQ;QAAE,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC9D,IAAI,KAAK,CAAC,MAAM;QAAE,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IACxD,IAAI,KAAK,CAAC,gBAAgB;QAAE,WAAW,CAAC,iBAAiB,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAErF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAExD,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uCAAuC,EAAE,CAAC;SAC3E,CAAC;IACJ,CAAC;IAED,4CAA4C;IAC5C,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEvC,OAAO;QACL,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAkB,EAClB,IAAa;IAEb,MAAM,KAAK,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAuF;QAClG,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;IACF,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC1D,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IACpD,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAkB,EAClB,IAAY,EACZ,IAAa;IAEb,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,YAAY;gBACf,OAAO,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7C,KAAK,UAAU;gBACb,OAAO,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3C,KAAK,gBAAgB;gBACnB,OAAO,MAAM,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjD,KAAK,YAAY;gBACf,OAAO,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;YACvC,KAAK,cAAc;gBACjB,OAAO,MAAM,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/C,KAAK,kBAAkB;gBACrB,OAAO,MAAM,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClD,KAAK,oBAAoB;gBACvB,OAAO,MAAM,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACpD,KAAK,sBAAsB;gBACzB,OAAO,MAAM,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtD,KAAK,sBAAsB;gBACzB,OAAO,MAAM,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtD,KAAK,kBAAkB;gBACrB,OAAO,MAAM,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnD;gBACE,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;oBAC1D,OAAO,EAAE,IAAI;iBACd,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACrG,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,251 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
4
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
5
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
6
+ import { createGongClient } from './gong-client.js';
7
+ import { tools, ListCallsInputSchema, GetCallInputSchema, GetCallSummaryInputSchema, GetCallAnalyticsInputSchema, SearchCallsInputSchema, SearchSummariesInputSchema, ExportCallMarkdownInputSchema, ExportSummariesCsvInputSchema, } from './tools.js';
8
+ import { TranscriptFormatter, buildCallData } from './transcript-formatter.js';
9
+ import { buildSummaryRow, generateSummariesCsv } from './csv-utils.js';
10
+ // Validate required environment variables
11
+ const GONG_ACCESS_KEY = process.env.GONG_ACCESS_KEY;
12
+ const GONG_SECRET_KEY = process.env.GONG_SECRET_KEY;
13
+ if (!GONG_ACCESS_KEY || !GONG_SECRET_KEY) {
14
+ console.error('Missing required environment variables: GONG_ACCESS_KEY and GONG_SECRET_KEY');
15
+ process.exit(1);
16
+ }
17
+ // Initialize Gong client
18
+ const gongClient = createGongClient({
19
+ accessKey: GONG_ACCESS_KEY,
20
+ secretKey: GONG_SECRET_KEY,
21
+ });
22
+ // Initialize MCP server
23
+ const server = new Server({
24
+ name: 'gong',
25
+ version: '1.0.0',
26
+ }, {
27
+ capabilities: {
28
+ tools: {},
29
+ },
30
+ });
31
+ // Register tools list handler
32
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
33
+ return { tools: [...tools] };
34
+ });
35
+ // Register tool call handler
36
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
37
+ const { name, arguments: args } = request.params;
38
+ try {
39
+ switch (name) {
40
+ case 'list_calls': {
41
+ const input = ListCallsInputSchema.parse(args);
42
+ const options = {};
43
+ if (input.fromDate)
44
+ options.fromDateTime = input.fromDate;
45
+ if (input.toDate)
46
+ options.toDateTime = input.toDate;
47
+ if (input.participantEmail)
48
+ options.participantEmails = [input.participantEmail];
49
+ if (input.limit)
50
+ options.maxRecords = input.limit;
51
+ const result = await gongClient.listCalls(options);
52
+ const response = {
53
+ calls: result.records,
54
+ totalFetched: result.totalFetched,
55
+ truncated: result.truncated,
56
+ };
57
+ return {
58
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
59
+ };
60
+ }
61
+ case 'get_call': {
62
+ const input = GetCallInputSchema.parse(args);
63
+ const call = await gongClient.getCall(input.callId);
64
+ if (!call) {
65
+ return {
66
+ content: [{ type: 'text', text: `Call not found: ${input.callId}` }],
67
+ isError: true,
68
+ };
69
+ }
70
+ return {
71
+ content: [{ type: 'text', text: JSON.stringify(call, null, 2) }],
72
+ };
73
+ }
74
+ case 'get_transcript': {
75
+ const input = GetCallInputSchema.parse(args);
76
+ const transcripts = await gongClient.getTranscripts([input.callId]);
77
+ const transcript = transcripts[0];
78
+ if (!transcript) {
79
+ return {
80
+ content: [{ type: 'text', text: `Transcript not found: ${input.callId}` }],
81
+ isError: true,
82
+ };
83
+ }
84
+ return {
85
+ content: [{ type: 'text', text: JSON.stringify(transcript, null, 2) }],
86
+ };
87
+ }
88
+ case 'list_users': {
89
+ const result = await gongClient.listUsers();
90
+ const response = {
91
+ users: result.records,
92
+ totalFetched: result.totalFetched,
93
+ truncated: result.truncated,
94
+ };
95
+ return {
96
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
97
+ };
98
+ }
99
+ case 'search_calls': {
100
+ const input = SearchCallsInputSchema.parse(args);
101
+ const options = {
102
+ query: input.query,
103
+ };
104
+ if (input.fromDate)
105
+ options.fromDateTime = input.fromDate;
106
+ if (input.toDate)
107
+ options.toDateTime = input.toDate;
108
+ if (input.limit)
109
+ options.maxRecords = input.limit;
110
+ const result = await gongClient.searchCalls(options);
111
+ const response = {
112
+ results: result.records,
113
+ totalFetched: result.totalFetched,
114
+ truncated: result.truncated,
115
+ };
116
+ return {
117
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
118
+ };
119
+ }
120
+ case 'get_call_summary': {
121
+ const input = GetCallSummaryInputSchema.parse(args);
122
+ const summary = await gongClient.getCallSummary(input.callId);
123
+ if (!summary) {
124
+ return {
125
+ content: [{ type: 'text', text: `Call not found: ${input.callId}` }],
126
+ isError: true,
127
+ };
128
+ }
129
+ return {
130
+ content: [{ type: 'text', text: JSON.stringify(summary, null, 2) }],
131
+ };
132
+ }
133
+ case 'get_call_analytics': {
134
+ const input = GetCallAnalyticsInputSchema.parse(args);
135
+ const analytics = await gongClient.getCallAnalytics(input.callId);
136
+ if (!analytics) {
137
+ return {
138
+ content: [{ type: 'text', text: `Call not found: ${input.callId}` }],
139
+ isError: true,
140
+ };
141
+ }
142
+ return {
143
+ content: [{ type: 'text', text: JSON.stringify(analytics, null, 2) }],
144
+ };
145
+ }
146
+ case 'export_call_markdown': {
147
+ const input = ExportCallMarkdownInputSchema.parse(args);
148
+ const includeFullTranscript = input.format !== 'summary';
149
+ // Fetch call details
150
+ const callDetails = await gongClient.getCall(input.callId);
151
+ if (!callDetails) {
152
+ return {
153
+ content: [{ type: 'text', text: `Call not found: ${input.callId}` }],
154
+ isError: true,
155
+ };
156
+ }
157
+ // Fetch transcript if needed
158
+ let transcript = null;
159
+ if (includeFullTranscript) {
160
+ const transcripts = await gongClient.getTranscripts([input.callId]);
161
+ transcript = transcripts[0] ?? null;
162
+ }
163
+ // Fetch AI summary
164
+ const summary = await gongClient.getCallSummary(input.callId);
165
+ // Build call data and generate markdown
166
+ const callData = buildCallData(callDetails, transcript, summary);
167
+ const markdown = TranscriptFormatter.generateCompleteMarkdown(callData, includeFullTranscript);
168
+ const filename = TranscriptFormatter.generateFileName(callData);
169
+ return {
170
+ content: [
171
+ { type: 'text', text: `# Suggested filename: ${filename}\n\n${markdown}` },
172
+ ],
173
+ };
174
+ }
175
+ case 'export_summaries_csv': {
176
+ const input = ExportSummariesCsvInputSchema.parse(args);
177
+ const maxCalls = input.limit ?? 100;
178
+ // Fetch calls within date range
179
+ const listOptions = {
180
+ maxRecords: maxCalls,
181
+ };
182
+ if (input.fromDate)
183
+ listOptions.fromDateTime = input.fromDate;
184
+ if (input.toDate)
185
+ listOptions.toDateTime = input.toDate;
186
+ if (input.participantEmail)
187
+ listOptions.participantEmails = [input.participantEmail];
188
+ const callsResult = await gongClient.listCalls(listOptions);
189
+ if (callsResult.records.length === 0) {
190
+ return {
191
+ content: [{ type: 'text', text: 'No calls found matching the criteria.' }],
192
+ };
193
+ }
194
+ // Fetch details and summaries for each call
195
+ const rows = [];
196
+ for (const call of callsResult.records) {
197
+ const details = await gongClient.getCall(call.id);
198
+ const summaryData = await gongClient.getCallSummary(call.id);
199
+ rows.push(buildSummaryRow(call, details, summaryData));
200
+ }
201
+ const csv = generateSummariesCsv(rows);
202
+ return {
203
+ content: [{ type: 'text', text: csv }],
204
+ };
205
+ }
206
+ case 'search_summaries': {
207
+ const input = SearchSummariesInputSchema.parse(args);
208
+ const options = {
209
+ query: input.query,
210
+ };
211
+ if (input.fromDate)
212
+ options.fromDateTime = input.fromDate;
213
+ if (input.toDate)
214
+ options.toDateTime = input.toDate;
215
+ if (input.limit)
216
+ options.maxRecords = input.limit;
217
+ const result = await gongClient.searchSummaries(options);
218
+ const response = {
219
+ results: result.records,
220
+ totalFetched: result.totalFetched,
221
+ truncated: result.truncated,
222
+ };
223
+ return {
224
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
225
+ };
226
+ }
227
+ default:
228
+ return {
229
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
230
+ isError: true,
231
+ };
232
+ }
233
+ }
234
+ catch (error) {
235
+ return {
236
+ content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
237
+ isError: true,
238
+ };
239
+ }
240
+ });
241
+ // Start the server
242
+ async function main() {
243
+ const transport = new StdioServerTransport();
244
+ await server.connect(transport);
245
+ console.error('Gong MCP server started');
246
+ }
247
+ main().catch((error) => {
248
+ console.error('Server error:', error);
249
+ process.exit(1);
250
+ });
251
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}