@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,295 @@
1
+ /**
2
+ * Transcript formatting utilities for markdown export
3
+ * Adapted from the reference TranscriptFormatter pattern
4
+ */
5
+ export class TranscriptFormatter {
6
+ /**
7
+ * Generate YAML frontmatter with rich metadata
8
+ */
9
+ static generateFrontmatter(call) {
10
+ const date = call.date ? new Date(call.date).toISOString() : '';
11
+ const internalParticipants = this.extractParticipantsByAffiliation(call, 'internal');
12
+ const externalParticipants = this.extractParticipantsByAffiliation(call, 'external');
13
+ const topics = call.topics ?? this.extractTopics(call);
14
+ const duration = call.duration ? `${Math.round(call.duration / 60)} minutes` : 'Unknown';
15
+ return `---
16
+ Call_Title: "${call.title ?? 'Untitled Call'}"
17
+ Call_ID: "${call.id}"
18
+ Call_Date_UTC: "${date}"
19
+ Call_Gong_URL: "${call.url ?? `https://app.gong.io/call?id=${call.id}`}"
20
+ Call_Duration: "${duration}"
21
+
22
+ Call_External_Entities: [${this.extractExternalEntities(call).map(e => `"${e}"`).join(',')}]
23
+ Call_Party_Status: "${call.partyStatus ?? 'Unknown'}"
24
+
25
+ Internal_Participants: [${internalParticipants.map(p => `"${p}"`).join(',')}]
26
+ External_Participants: [${externalParticipants.map(p => `"${p}"`).join(',')}]
27
+ Total_Participants: ${call.participantCount ?? internalParticipants.length + externalParticipants.length}
28
+
29
+ AI_Analysis_Source: "From Gong AI"
30
+ content_brief: "${call.summary ?? ''}"
31
+ content_highlights: "${call.highlights ?? ''}"
32
+
33
+ authors: Claude
34
+ type: sales-call-transcript
35
+ topics: [${topics.map(t => `"${t}"`).join(', ')}]
36
+ tags: ["gong-export","call/${date.substring(0, 7)}"]
37
+ transcript_length: ${call.transcriptLength ?? 0}
38
+ has_transcript: ${call.hasTranscript !== false}
39
+ ---`;
40
+ }
41
+ /**
42
+ * Generate markdown body content
43
+ */
44
+ static generateMarkdownBody(call, includeFullTranscript) {
45
+ let body = '';
46
+ const gongUrl = call.url ?? `https://app.gong.io/call?id=${call.id}`;
47
+ // AI Summary section (always show if available)
48
+ body += '\n## AI Summary\n\n';
49
+ if (call.summary) {
50
+ body += `${call.summary}\n\n`;
51
+ }
52
+ else {
53
+ body += '*No AI summary available*\n\n';
54
+ }
55
+ // Topics section
56
+ const topics = call.topics ?? this.extractTopics(call);
57
+ if (topics.length > 0) {
58
+ body += '### Topics Discussed\n';
59
+ topics.forEach((topic) => {
60
+ body += `- ${topic}\n`;
61
+ });
62
+ body += '\n';
63
+ }
64
+ // Key Points section
65
+ if (call.keyPoints && call.keyPoints.length > 0) {
66
+ body += '### Key Points\n';
67
+ call.keyPoints.forEach((point) => {
68
+ body += `- ${point}\n`;
69
+ });
70
+ body += '\n';
71
+ }
72
+ // Highlights section
73
+ body += '## Highlights\n\n';
74
+ if (call.highlights) {
75
+ body += `${call.highlights}\n\n`;
76
+ }
77
+ else {
78
+ body += '*No highlights available*\n\n';
79
+ }
80
+ // Outcomes section
81
+ body += '## Outcomes\n\n';
82
+ body += `**Call Result**: ${call.callOutcome ?? 'Call completed'}\n\n`;
83
+ // Next Steps section (primary, from Gong AI)
84
+ body += '## Next Steps\n\n';
85
+ if (call.nextSteps && call.nextSteps.length > 0) {
86
+ call.nextSteps.forEach((step) => {
87
+ body += `- [ ] ${step}\n`;
88
+ });
89
+ body += '\n';
90
+ }
91
+ else if (call.actionItems && call.actionItems.length > 0) {
92
+ // Fallback to action items if no next steps
93
+ call.actionItems.forEach((item) => {
94
+ body += `- [ ] ${item}\n`;
95
+ });
96
+ body += '\n';
97
+ }
98
+ else {
99
+ body += '*No next steps identified*\n\n';
100
+ }
101
+ // Gong link
102
+ body += `---\n\n*View in Gong: [Full Recording](${gongUrl})*\n\n`;
103
+ // Full Transcript section (only if requested)
104
+ if (includeFullTranscript && call.utterances && call.utterances.length > 0) {
105
+ body += '## Full Transcript\n\n';
106
+ for (const utterance of call.utterances) {
107
+ // Format with Gong timestamp link
108
+ const timestamp = utterance.timestamp ?? (utterance.order ?? 0) * 30;
109
+ const gongLink = `[Gong](https://app.gong.io/embedded-call?call-id=${call.id}&from=${timestamp})`;
110
+ body += `**${utterance.speaker}:** ${utterance.text} ${gongLink}\n\n`;
111
+ }
112
+ body += `\n*Complete transcript with ${call.utterances.length} utterances*\n\n`;
113
+ }
114
+ return body;
115
+ }
116
+ /**
117
+ * Generate complete markdown content (frontmatter + body)
118
+ */
119
+ static generateCompleteMarkdown(call, includeFullTranscript) {
120
+ const frontmatter = this.generateFrontmatter(call);
121
+ const body = this.generateMarkdownBody(call, includeFullTranscript);
122
+ return `${frontmatter}\n${body}`;
123
+ }
124
+ /**
125
+ * Generate safe filename for exports
126
+ */
127
+ static generateFileName(call, extension = 'md') {
128
+ const date = call.date ? new Date(call.date).toISOString().split('T')[0] : 'undated';
129
+ const title = (call.title ?? 'Untitled')
130
+ .replace(/[^a-z0-9\s-]/gi, '')
131
+ .replace(/\s+/g, '_')
132
+ .substring(0, 50);
133
+ return `${date}_${title}_${call.id.substring(0, 8)}.${extension}`;
134
+ }
135
+ // Helper methods
136
+ static extractParticipantsByAffiliation(call, affiliation) {
137
+ if (call.utterances) {
138
+ const speakerSet = new Set();
139
+ call.utterances.forEach((u) => {
140
+ if (u.affiliation === affiliation) {
141
+ speakerSet.add(u.speaker);
142
+ }
143
+ });
144
+ return Array.from(speakerSet);
145
+ }
146
+ if (call.speakerDetails) {
147
+ return call.speakerDetails
148
+ .filter(s => s.affiliation === affiliation)
149
+ .map(s => s.name);
150
+ }
151
+ return [];
152
+ }
153
+ static extractExternalEntities(call) {
154
+ const entities = [];
155
+ if (call.title) {
156
+ // Look for patterns like "Company x YourCompany" or "YourCompany x Company"
157
+ const companyName = process.env.COMPANY_NAME ?? 'YourCompany';
158
+ const pattern = new RegExp(`(?:${companyName}\\s*x\\s*|x\\s*${companyName}\\s*|with\\s+)([^|,]+)`, 'i');
159
+ const match = call.title.match(pattern);
160
+ if (match && match[1]) {
161
+ entities.push(match[1].trim());
162
+ }
163
+ }
164
+ return entities;
165
+ }
166
+ static extractTopics(call) {
167
+ const topics = [];
168
+ if (call.title) {
169
+ const titleLower = call.title.toLowerCase();
170
+ if (titleLower.includes('pricing'))
171
+ topics.push('pricing');
172
+ if (titleLower.includes('demo'))
173
+ topics.push('demo');
174
+ if (titleLower.includes('qbr') || titleLower.includes('quarterly'))
175
+ topics.push('quarterly business review');
176
+ if (titleLower.includes('renewal'))
177
+ topics.push('renewal');
178
+ if (titleLower.includes('onboarding'))
179
+ topics.push('onboarding');
180
+ if (titleLower.includes('check-in') || titleLower.includes('checkin'))
181
+ topics.push('check-in');
182
+ if (titleLower.includes('introduction') || titleLower.includes('intro'))
183
+ topics.push('introduction');
184
+ if (titleLower.includes('platform overview'))
185
+ topics.push('platform overview');
186
+ }
187
+ return topics.length > 0 ? topics : ['general discussion'];
188
+ }
189
+ }
190
+ /**
191
+ * Transform Gong API data into CallData format for the formatter
192
+ */
193
+ export function buildCallData(callDetails, transcript, summary) {
194
+ // Build party lookup for speaker names and affiliations
195
+ const partyMap = new Map();
196
+ for (const party of callDetails.parties ?? []) {
197
+ if (party.speakerId) {
198
+ partyMap.set(party.speakerId, party);
199
+ }
200
+ }
201
+ // Transform transcript entries to utterances
202
+ const utterances = [];
203
+ if (transcript?.transcript) {
204
+ let order = 0;
205
+ for (const entry of transcript.transcript) {
206
+ const party = partyMap.get(entry.speakerId);
207
+ const speakerName = party?.name ?? `Speaker ${entry.speakerId}`;
208
+ const affiliation = party?.affiliation?.toLowerCase() ?? 'unknown';
209
+ for (const sentence of entry.sentences) {
210
+ utterances.push({
211
+ speaker: speakerName,
212
+ text: sentence.text,
213
+ affiliation,
214
+ timestamp: Math.floor(sentence.start / 1000), // Convert ms to seconds
215
+ order: order++,
216
+ });
217
+ }
218
+ }
219
+ }
220
+ // Extract speaker details
221
+ const speakerDetails = [];
222
+ for (const party of callDetails.parties ?? []) {
223
+ if (party.name) {
224
+ speakerDetails.push({
225
+ name: party.name,
226
+ affiliation: party.affiliation?.toLowerCase() ?? 'unknown',
227
+ });
228
+ }
229
+ }
230
+ // Extract key points
231
+ const keyPoints = summary?.keyPoints?.map(kp => kp.text) ?? [];
232
+ // Extract highlights text
233
+ const highlightsText = summary?.highlights?.map(h => h.text).join('\n') ?? '';
234
+ // Extract topics from summary
235
+ const topics = summary?.topics?.map(t => t.name) ?? [];
236
+ // Extract next steps from outline (look for "Next Steps" or similar sections)
237
+ const nextSteps = [];
238
+ if (summary?.outline) {
239
+ for (const section of summary.outline) {
240
+ const sectionLower = section.section.toLowerCase();
241
+ if (sectionLower.includes('next step') ||
242
+ sectionLower.includes('action item') ||
243
+ sectionLower.includes('follow up') ||
244
+ sectionLower.includes('follow-up') ||
245
+ sectionLower.includes('to do') ||
246
+ sectionLower.includes('todo')) {
247
+ if (section.items) {
248
+ nextSteps.push(...section.items);
249
+ }
250
+ }
251
+ }
252
+ }
253
+ // Count participants by affiliation
254
+ let internalCount = 0;
255
+ let externalCount = 0;
256
+ for (const party of callDetails.parties ?? []) {
257
+ if (party.affiliation === 'Internal')
258
+ internalCount++;
259
+ else if (party.affiliation === 'External')
260
+ externalCount++;
261
+ }
262
+ const result = {
263
+ id: callDetails.id,
264
+ url: callDetails.url,
265
+ hasTranscript: utterances.length > 0,
266
+ transcriptLength: utterances.length,
267
+ highlights: highlightsText,
268
+ utterances,
269
+ keyPoints,
270
+ speakerDetails,
271
+ topics,
272
+ internalCount,
273
+ externalCount,
274
+ participantCount: (callDetails.parties ?? []).length,
275
+ };
276
+ // Add next steps if found
277
+ if (nextSteps.length > 0) {
278
+ result.nextSteps = nextSteps;
279
+ }
280
+ // Only set optional properties if they have values
281
+ if (callDetails.title)
282
+ result.title = callDetails.title;
283
+ if (callDetails.started)
284
+ result.date = callDetails.started;
285
+ else if (callDetails.scheduled)
286
+ result.date = callDetails.scheduled;
287
+ if (callDetails.duration !== undefined)
288
+ result.duration = callDetails.duration;
289
+ if (summary?.brief)
290
+ result.summary = summary.brief;
291
+ if (summary?.callOutcome)
292
+ result.callOutcome = summary.callOutcome;
293
+ return result;
294
+ }
295
+ //# sourceMappingURL=transcript-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-formatter.js","sourceRoot":"","sources":["../src/transcript-formatter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@shawnfroos/gong-lite",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for Gong.io - Access meeting transcripts, summaries, and analytics via Claude",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "gong-lite": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*.js",
12
+ "dist/**/*.d.ts",
13
+ "dist/**/*.js.map",
14
+ "dist/**/*.d.ts.map",
15
+ "!dist/**/*.test.*",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "start": "node dist/index.js",
22
+ "dev": "tsc --watch",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "test:coverage": "vitest run --coverage",
26
+ "prepublishOnly": "npm run build && npm test"
27
+ },
28
+ "keywords": [
29
+ "mcp",
30
+ "gong",
31
+ "model-context-protocol",
32
+ "claude",
33
+ "anthropic",
34
+ "ai",
35
+ "transcripts",
36
+ "meetings"
37
+ ],
38
+ "author": "Anthropic",
39
+ "license": "MIT",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/anthropics/gong-lite.git"
43
+ },
44
+ "homepage": "https://github.com/anthropics/gong-lite#readme",
45
+ "bugs": {
46
+ "url": "https://github.com/anthropics/gong-lite/issues"
47
+ },
48
+ "dependencies": {
49
+ "@modelcontextprotocol/sdk": "^1.0.0",
50
+ "dotenv": "^16.4.0",
51
+ "zod": "^3.22.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^22.0.0",
55
+ "typescript": "^5.7.0",
56
+ "vitest": "^2.1.0"
57
+ },
58
+ "engines": {
59
+ "node": ">=20.0.0"
60
+ }
61
+ }