@shashwatgtmalpha/craft-content-mcp 1.0.1 → 2.0.1

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.
Files changed (44) hide show
  1. package/README.md +150 -123
  2. package/dist/case-study-generator.d.ts +12 -0
  3. package/dist/case-study-generator.d.ts.map +1 -0
  4. package/dist/case-study-generator.js +373 -0
  5. package/dist/case-study-generator.js.map +1 -0
  6. package/dist/content-improver.d.ts +8 -0
  7. package/dist/content-improver.d.ts.map +1 -0
  8. package/dist/content-improver.js +238 -0
  9. package/dist/content-improver.js.map +1 -0
  10. package/dist/content-repurposer.d.ts +8 -0
  11. package/dist/content-repurposer.d.ts.map +1 -0
  12. package/dist/content-repurposer.js +423 -0
  13. package/dist/content-repurposer.js.map +1 -0
  14. package/dist/index.js +86 -1236
  15. package/dist/index.js.map +1 -1
  16. package/dist/newsletter-builder.d.ts +10 -0
  17. package/dist/newsletter-builder.d.ts.map +1 -0
  18. package/dist/newsletter-builder.js +411 -0
  19. package/dist/newsletter-builder.js.map +1 -0
  20. package/dist/sales-enablement.d.ts +11 -0
  21. package/dist/sales-enablement.d.ts.map +1 -0
  22. package/dist/sales-enablement.js +455 -0
  23. package/dist/sales-enablement.js.map +1 -0
  24. package/dist/testimonial-capture.d.ts +11 -0
  25. package/dist/testimonial-capture.d.ts.map +1 -0
  26. package/dist/testimonial-capture.js +424 -0
  27. package/dist/testimonial-capture.js.map +1 -0
  28. package/dist/thought-leadership.d.ts +10 -0
  29. package/dist/thought-leadership.d.ts.map +1 -0
  30. package/dist/thought-leadership.js +475 -0
  31. package/dist/thought-leadership.js.map +1 -0
  32. package/dist/tools.d.ts +3 -0
  33. package/dist/tools.d.ts.map +1 -0
  34. package/dist/tools.js +210 -0
  35. package/dist/tools.js.map +1 -0
  36. package/dist/utils.d.ts +40 -0
  37. package/dist/utils.d.ts.map +1 -0
  38. package/dist/utils.js +289 -0
  39. package/dist/utils.js.map +1 -0
  40. package/dist/webinar-script.d.ts +11 -0
  41. package/dist/webinar-script.d.ts.map +1 -0
  42. package/dist/webinar-script.js +457 -0
  43. package/dist/webinar-script.js.map +1 -0
  44. package/package.json +47 -49
package/dist/index.js CHANGED
@@ -1,1244 +1,94 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
5
- const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
- const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
- const server = new index_js_1.Server({ name: "craft-content-mcp", version: "1.0.0" }, { capabilities: { tools: {} } });
8
- server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
9
- tools: [
10
- {
11
- name: "case_study_generator",
12
- description: "Generate complete B2B case study with Challenge-Solution-Results structure, customer quotes, metrics callouts, plus one-pager and social snippets.",
13
- inputSchema: {
14
- type: "object",
15
- properties: {
16
- customer_name: { type: "string", description: "Customer company name" },
17
- customer_industry: { type: "string", description: "Customer's industry" },
18
- customer_size: { type: "string", description: "Company size" },
19
- challenge: { type: "string", description: "Business challenge faced" },
20
- solution: { type: "string", description: "How your product solved it" },
21
- results: { type: "string", description: "Quantified outcomes" },
22
- quote: { type: "string", description: "Customer quote" },
23
- your_product: { type: "string", description: "Your product name" }
24
- },
25
- required: ["customer_name", "challenge", "solution", "results", "your_product"]
26
- }
27
- },
28
- {
29
- name: "newsletter_builder",
30
- description: "Generate complete newsletter with hook, sections, CTAs, and 10 subject line options.",
31
- inputSchema: {
32
- type: "object",
33
- properties: {
34
- newsletter_name: { type: "string", description: "Newsletter name" },
35
- topic: { type: "string", description: "Main topic" },
36
- key_points: { type: "string", description: "3-5 key points" },
37
- audience: { type: "string", description: "Target audience" },
38
- cta: { type: "string", description: "Call-to-action" },
39
- tone: { type: "string", description: "Tone: professional, conversational" }
40
- },
41
- required: ["newsletter_name", "topic", "key_points", "audience"]
42
- }
43
- },
44
- {
45
- name: "webinar_script",
46
- description: "Generate complete webinar script with slides outline, speaker notes, Q&A prep, and engagement prompts.",
47
- inputSchema: {
48
- type: "object",
49
- properties: {
50
- title: { type: "string", description: "Webinar title" },
51
- topic: { type: "string", description: "Main topic" },
52
- duration: { type: "string", description: "Duration: 30, 45, 60 min" },
53
- speakers: { type: "string", description: "Speaker names and titles" },
54
- audience: { type: "string", description: "Target audience" },
55
- key_takeaways: { type: "string", description: "3-5 takeaways" },
56
- cta: { type: "string", description: "End CTA" }
57
- },
58
- required: ["title", "topic", "duration", "speakers", "key_takeaways"]
59
- }
60
- },
61
- {
62
- name: "content_repurposer",
63
- description: "Transform one piece into 10+ formats: LinkedIn, Twitter, email, blog, video script, infographic, podcast.",
64
- inputSchema: {
65
- type: "object",
66
- properties: {
67
- source_content: { type: "string", description: "Original content" },
68
- source_type: { type: "string", description: "Type: blog, webinar, podcast" },
69
- key_message: { type: "string", description: "Core message" },
70
- audience: { type: "string", description: "Target audience" },
71
- brand_voice: { type: "string", description: "Brand voice" }
72
- },
73
- required: ["source_content", "source_type", "key_message"]
74
- }
75
- },
76
- {
77
- name: "thought_leadership_series",
78
- description: "Generate 5-post LinkedIn series with interconnected themes, hooks, and engagement prompts.",
79
- inputSchema: {
80
- type: "object",
81
- properties: {
82
- topic: { type: "string", description: "Overarching topic" },
83
- perspective: { type: "string", description: "Your unique angle" },
84
- author_role: { type: "string", description: "Author title and expertise" },
85
- audience: { type: "string", description: "Target audience" },
86
- goal: { type: "string", description: "Goal: awareness, leads, thought leadership" },
87
- controversial_take: { type: "string", description: "Contrarian view to include" }
88
- },
89
- required: ["topic", "perspective", "author_role", "audience"]
90
- }
91
- },
92
- {
93
- name: "testimonial_capture",
94
- description: "Generate testimonial request emails, interview questions, and formatted output templates.",
95
- inputSchema: {
96
- type: "object",
97
- properties: {
98
- customer_name: { type: "string", description: "Customer contact name" },
99
- customer_company: { type: "string", description: "Customer company" },
100
- relationship_context: { type: "string", description: "Relationship context" },
101
- use_case: { type: "string", description: "Use case to highlight" },
102
- format_needed: { type: "string", description: "Formats: quote, video, case study" },
103
- your_name: { type: "string", description: "Your name" },
104
- your_company: { type: "string", description: "Your company" }
105
- },
106
- required: ["customer_name", "customer_company", "use_case", "your_company"]
107
- }
108
- },
109
- {
110
- name: "sales_enablement_content",
111
- description: "Generate pitch scripts (30s/2min/5min), objection handlers, discovery questions, competitive responses.",
112
- inputSchema: {
113
- type: "object",
114
- properties: {
115
- product: { type: "string", description: "Product name" },
116
- value_props: { type: "string", description: "Key value propositions" },
117
- target_persona: { type: "string", description: "Target buyer" },
118
- common_objections: { type: "string", description: "Common objections" },
119
- competitors: { type: "string", description: "Main competitors" },
120
- price_range: { type: "string", description: "Pricing context" },
121
- key_metrics: { type: "string", description: "Success metrics" }
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import { tools } from "./tools.js";
6
+ import { generateCaseStudy } from "./case-study-generator.js";
7
+ import { generateNewsletter } from "./newsletter-builder.js";
8
+ import { generateWebinarScript } from "./webinar-script.js";
9
+ import { generateContentRepurposer } from "./content-repurposer.js";
10
+ import { generateThoughtLeadership } from "./thought-leadership.js";
11
+ import { generateTestimonialCapture } from "./testimonial-capture.js";
12
+ import { generateSalesEnablement } from "./sales-enablement.js";
13
+ import { generateContentImprover } from "./content-improver.js";
14
+ // ============================================================================
15
+ // SERVER SETUP
16
+ // ============================================================================
17
+ const server = new Server({
18
+ name: "@shashwatgtm/craft-content-mcp",
19
+ version: "2.0.0",
20
+ }, {
21
+ capabilities: {
22
+ tools: {},
23
+ },
24
+ });
25
+ // List tools handler
26
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
27
+ return { tools };
28
+ });
29
+ // Call tool handler
30
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
31
+ const { name, arguments: args } = request.params;
32
+ try {
33
+ let result;
34
+ switch (name) {
35
+ case "case_study_generator":
36
+ result = generateCaseStudy(args);
37
+ break;
38
+ case "newsletter_builder":
39
+ result = generateNewsletter(args);
40
+ break;
41
+ case "webinar_script":
42
+ result = generateWebinarScript(args);
43
+ break;
44
+ case "content_repurposer":
45
+ result = generateContentRepurposer(args);
46
+ break;
47
+ case "thought_leadership_series":
48
+ result = generateThoughtLeadership(args);
49
+ break;
50
+ case "testimonial_capture":
51
+ result = generateTestimonialCapture(args);
52
+ break;
53
+ case "sales_enablement_content":
54
+ result = generateSalesEnablement(args);
55
+ break;
56
+ case "craft_content_improver":
57
+ result = generateContentImprover(args);
58
+ break;
59
+ default:
60
+ throw new Error(`Unknown tool: ${name}`);
61
+ }
62
+ return {
63
+ content: [
64
+ {
65
+ type: "text",
66
+ text: result,
122
67
  },
123
- required: ["product", "value_props", "target_persona", "common_objections"]
124
- }
125
- },
126
- {
127
- name: "craft_content_improver",
128
- description: "Analyze and improve any content using CRAFT principles. Returns score and improved version.",
129
- inputSchema: {
130
- type: "object",
131
- properties: {
132
- content: { type: "string", description: "Content to improve" },
133
- content_type: { type: "string", description: "Type: email, blog, social" },
134
- goal: { type: "string", description: "Content goal" },
135
- audience: { type: "string", description: "Target audience" },
136
- constraints: { type: "string", description: "Constraints" }
68
+ ],
69
+ };
70
+ }
71
+ catch (error) {
72
+ const errorMessage = error instanceof Error ? error.message : String(error);
73
+ return {
74
+ content: [
75
+ {
76
+ type: "text",
77
+ text: `Error executing ${name}: ${errorMessage}`,
137
78
  },
138
- required: ["content", "content_type", "goal"]
139
- }
140
- }
141
- ]
142
- }));
143
- server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
144
- const { name, arguments: args } = request.params;
145
- const a = args;
146
- const tools = {
147
- case_study_generator: () => generateCaseStudy(a),
148
- newsletter_builder: () => generateNewsletter(a),
149
- webinar_script: () => generateWebinar(a),
150
- content_repurposer: () => repurposeContent(a),
151
- thought_leadership_series: () => generateThoughtLeadership(a),
152
- testimonial_capture: () => generateTestimonialKit(a),
153
- sales_enablement_content: () => generateSalesContent(a),
154
- craft_content_improver: () => improveContent(a)
155
- };
156
- const output = tools[name]?.() || `Unknown tool: ${name}`;
157
- return { content: [{ type: "text", text: output }] };
79
+ ],
80
+ isError: true,
81
+ };
82
+ }
158
83
  });
159
- function generateCaseStudy(a) {
160
- return `# 📊 CASE STUDY: ${a.customer_name}
161
-
162
- | **Customer** | ${a.customer_name} | **Industry** | ${a.customer_industry || "Technology"} |
163
- |-------------|-------------------|-------------|-----------------|
164
- | **Size** | ${a.customer_size || "N/A"} | **Product** | ${a.your_product} |
165
-
166
- ---
167
-
168
- # FULL CASE STUDY
169
-
170
- ## Executive Summary
171
- ${a.customer_name} faced ${a.challenge.toLowerCase()}. After implementing ${a.your_product}, they achieved ${a.results}.
172
-
173
- ## The Challenge
174
- ${a.challenge}
175
-
176
- **Impact Before:**
177
- - Pain point 1: [Quantify]
178
- - Pain point 2: [Quantify]
179
-
180
- > "${a.quote || `${a.challenge} was costing us significant time and resources.`}"
181
- > — [Champion], [Title], ${a.customer_name}
182
-
183
- ## The Solution
184
- **Why ${a.your_product}:**
185
- ${a.solution}
186
-
187
- **Key Features Used:**
188
- - Feature 1: [How it helped]
189
- - Feature 2: [How it helped]
190
-
191
- ## The Results
192
- ${a.results}
193
-
194
- | Metric | Before | After | Improvement |
195
- |--------|--------|-------|-------------|
196
- | [Metric 1] | | | |
197
- | [Metric 2] | | | |
198
-
199
- > "${a.your_product} transformed our operations. ${a.results}"
200
- > — [Champion], [Title], ${a.customer_name}
201
-
202
- ---
203
-
204
- # ONE-PAGER
205
-
206
- ## ${a.customer_name} + ${a.your_product}
207
-
208
- **Challenge:** ${a.challenge}
209
- **Solution:** ${a.solution}
210
- **Results:** ${a.results}
211
-
212
- > "${a.quote || 'Quote placeholder'}"
213
-
214
- **[CTA Button]**
215
-
216
- ---
217
-
218
- # SOCIAL SNIPPETS
219
-
220
- ## LinkedIn (Long)
221
- 🎯 How ${a.customer_name} achieved ${a.results.split('.')[0]}
222
-
223
- The challenge: ${a.challenge}
224
-
225
- The solution: ${a.your_product}
226
-
227
- 📈 Results: ${a.results}
228
-
229
- Full story: [Link]
230
-
231
- #CustomerSuccess #CaseStudy
232
-
233
- ## LinkedIn (Short)
234
- ${a.customer_name} was struggling with ${a.challenge.substring(0, 50)}...
235
-
236
- After ${a.your_product}:
237
- → ${a.results.split('.')[0]}
238
-
239
- Sometimes the right tool makes all the difference.
240
-
241
- ## Twitter Thread
242
- 1/ How @${a.customer_name.replace(/\s/g, '')} solved ${a.challenge.substring(0, 50)}... 🧵
243
-
244
- 2/ Problem: ${a.challenge}
245
-
246
- 3/ Solution: ${a.your_product}
247
-
248
- 4/ Results: ${a.results}
249
-
250
- 5/ Full story: [Link]
251
-
252
- ---
253
- *Generated by CRAFT Content MCP | gtmexpert.com*`;
254
- }
255
- function generateNewsletter(a) {
256
- return `# 📧 NEWSLETTER: ${a.newsletter_name}
257
-
258
- **Topic:** ${a.topic}
259
- **Audience:** ${a.audience}
260
- **Tone:** ${a.tone || "Professional"}
261
- **CTA:** ${a.cta || "Not specified"}
262
-
263
- ## Key Points
264
- ${a.key_points}
265
-
266
- ---
267
-
268
- # SUBJECT LINES (10 Options)
269
-
270
- 1. "${a.topic}: What You Need to Know"
271
- 2. "The Truth About ${a.topic}"
272
- 3. "Why Most Get ${a.topic} Wrong"
273
- 4. "The ${a.topic} Mistake Costing You"
274
- 5. "How to Master ${a.topic}"
275
- 6. "3 Ways ${a.topic} Can Transform [Outcome]"
276
- 7. "5 ${a.topic} Insights That Changed Everything"
277
- 8. "${a.topic} - A Guide for ${a.audience}"
278
- 9. "What Nobody Tells You About ${a.topic}"
279
- 10. "The Fast Track to [Result] with ${a.topic}"
280
-
281
- ---
282
-
283
- # NEWSLETTER CONTENT
284
-
285
- ## Preview Text
286
- "${a.topic} insights you won't find anywhere else..."
287
-
288
- ---
289
-
290
- ## HOOK (Choose One)
291
-
292
- ### Option 1: Question
293
- Have you wondered why ${a.topic.toLowerCase()} seems complicated? This week, I'm breaking it down.
294
-
295
- ### Option 2: Story
296
- Last week, I learned something that changed how I think about ${a.topic.toLowerCase()}...
297
-
298
- ### Option 3: Stat
299
- Did you know [statistic about ${a.topic}]? That's why this issue is dedicated to ${a.topic.toLowerCase()}.
300
-
301
- ### Option 4: Contrarian
302
- Everything you've heard about ${a.topic.toLowerCase()} might be wrong. Let me explain...
303
-
304
- ---
305
-
306
- ## SECTION 1: The Big Idea
307
-
308
- ### ${a.key_points.split('\n')[0] || "Key Point 1"}
309
-
310
- [Expand - 150 words]
311
-
312
- **Takeaway:** [One sentence]
313
-
314
- ---
315
-
316
- ## SECTION 2: Deep Dive
317
-
318
- ### ${a.key_points.split('\n')[1] || "Key Point 2"}
319
-
320
- [Expand - 150 words]
321
-
322
- What this means:
323
- - Point A
324
- - Point B
325
- - Point C
326
-
327
- ---
328
-
329
- ## SECTION 3: Practical Application
330
-
331
- ### ${a.key_points.split('\n')[2] || "Key Point 3"}
332
-
333
- [Practical advice - 100 words]
334
-
335
- **Action item:** [Specific action for today]
336
-
337
- ---
338
-
339
- ## QUICK HITS (Optional)
340
- - 📖 [Resource 1]: [Why it's valuable]
341
- - 🎧 [Resource 2]: [Why it's valuable]
342
- - 🛠️ [Tool]: [Why it's valuable]
343
-
344
- ---
345
-
346
- ## CTA SECTION
347
-
348
- ${a.cta || "[Primary CTA]"}
349
-
350
- ---
351
-
352
- ## SIGN-OFF
353
-
354
- That's it for this week. Forward to someone who'd benefit.
355
-
356
- See you next week,
357
- [Your name]
358
-
359
- P.S. [Teaser or secondary CTA]
360
-
361
- ---
362
-
363
- # ENGAGEMENT ELEMENTS
364
-
365
- **Question:** "What's your biggest challenge with ${a.topic.toLowerCase()}? Reply and let me know."
366
-
367
- **Social Proof:** "Join [X,XXX] ${a.audience.toLowerCase()} who read ${a.newsletter_name} weekly."
368
-
369
- ---
370
- *Generated by CRAFT Content MCP | gtmexpert.com*`;
371
- }
372
- function generateWebinar(a) {
373
- const duration = parseInt(a.duration) || 45;
374
- return `# 🎬 WEBINAR: ${a.title}
375
-
376
- | **Topic** | ${a.topic} | **Duration** | ${duration} min |
377
- |-----------|------------|-------------|-----------------|
378
- | **Speakers** | ${a.speakers} | **Audience** | ${a.audience || "N/A"} |
379
- | **CTA** | ${a.cta || "Demo/Trial"} | | |
380
-
381
- ## Key Takeaways
382
- ${a.key_takeaways}
383
-
384
- ---
385
-
386
- # SLIDE-BY-SLIDE SCRIPT
387
-
388
- ## SLIDE 1: Title (30 sec)
389
- **Visual:** Title, speakers, logo
390
-
391
- ---
392
-
393
- ## SLIDE 2: Welcome (2 min)
394
- > "Welcome to ${a.title}. I'm ${a.speakers}.
395
- >
396
- > Housekeeping: Recording will be sent, use Q&A for questions, say hi in chat.
397
- >
398
- > By the end, you'll know:
399
- > ${a.key_takeaways.split('\n').map(t => `> - ${t}`).join('\n')}"
400
-
401
- ---
402
-
403
- ## SLIDE 3: Why This Matters (3 min)
404
- > "Let me explain why ${a.topic} matters now.
405
- >
406
- > [Share relevant stat]
407
- >
408
- > If you're like most ${a.audience || "professionals"}, you've experienced [pain]."
409
-
410
- **Engagement:** "How many have experienced [challenge]? Drop 1 in chat."
411
-
412
- ---
413
-
414
- ## SLIDE 4: Agenda (1 min)
415
- > "Here's our roadmap:
416
- > 1. [Section 1]
417
- > 2. [Section 2]
418
- > 3. [Section 3]
419
- > 4. Q&A
420
- >
421
- > Let's go."
422
-
423
- ---
424
-
425
- ## SLIDES 5-8: Section 1 (${Math.floor(duration * 0.25)} min)
426
-
427
- > "[First key teaching point]
428
- >
429
- > Here's why this matters: [connection to pain]
430
- >
431
- > For example: [case study/example]"
432
-
433
- **Visual:** Concept diagram, data
434
-
435
- ---
436
-
437
- ## SLIDES 9-13: Section 2 (${Math.floor(duration * 0.35)} min)
438
-
439
- > "Now let's get practical.
440
- >
441
- > **Step 1:** [Explain]
442
- > **Step 2:** [Explain]
443
- > **Step 3:** [Explain]
444
- >
445
- > Let me show you..."
446
-
447
- **Visual:** Steps, screenshots, demo
448
-
449
- ---
450
-
451
- ## SLIDES 14-15: Section 3 (${Math.floor(duration * 0.15)} min)
452
-
453
- > "For those ready to go further:
454
- >
455
- > [Advanced tip 1]
456
- > [Advanced tip 2]
457
- >
458
- > The key insight: [takeaway]"
459
-
460
- ---
461
-
462
- ## SLIDE 16: Recap (2 min)
463
- > "Let's recap:
464
- > ${a.key_takeaways.split('\n').map((t, i) => `> ${i + 1}. ${t}`).join('\n')}
465
- >
466
- > Remember: [most important point]"
467
-
468
- ---
469
-
470
- ## SLIDE 17: CTA (2 min)
471
- > "Ready to ${a.cta || "take action"}?
472
- >
473
- > [Explain offer]
474
- >
475
- > Link is in chat now."
476
-
477
- ---
478
-
479
- ## SLIDE 18: Q&A (${Math.floor(duration * 0.15)} min)
480
- > "Let's take your questions..."
481
-
482
- ---
483
-
484
- ## SLIDE 19: Close (1 min)
485
- > "Thank you! Recording coming within 24 hours. Connect on LinkedIn. Have a great day!"
486
-
487
- ---
488
-
489
- # Q&A PREP
490
-
491
- | Question | Answer |
492
- |----------|--------|
493
- | [Common Q1]? | [Prepared answer] |
494
- | [Common Q2]? | [Prepared answer] |
495
- | [Common Q3]? | [Prepared answer] |
496
-
497
- ---
498
-
499
- # ENGAGEMENT PROMPTS
500
-
501
- - "Where are you joining from?"
502
- - "Drop 👋 if [experience]"
503
- - "What's your biggest challenge?"
504
- - "Type YES if you want [resource]"
505
-
506
- ---
507
-
508
- # PRE-WEBINAR CHECKLIST
509
-
510
- - [ ] Audio/video tested
511
- - [ ] Slides loaded
512
- - [ ] Screen share ready
513
- - [ ] Recording enabled
514
- - [ ] Links ready for chat
515
- - [ ] Water nearby
516
-
517
- ---
518
- *Generated by CRAFT Content MCP | gtmexpert.com*`;
519
- }
520
- function repurposeContent(a) {
521
- return `# 🔄 CONTENT REPURPOSING KIT
522
-
523
- **Source Type:** ${a.source_type}
524
- **Key Message:** ${a.key_message}
525
- **Audience:** ${a.audience || "Not specified"}
526
- **Voice:** ${a.brand_voice || "Professional"}
527
-
528
- ## Source Content
529
- \`\`\`
530
- ${a.source_content.substring(0, 300)}...
531
- \`\`\`
532
-
533
- ---
534
-
535
- # 10+ REPURPOSED FORMATS
536
-
537
- ## 1. LINKEDIN (Long)
538
-
539
- ${a.key_message}
540
-
541
- Here's what I've learned:
542
-
543
- → **Point 1:** [Extract]
544
- → **Point 2:** [Extract]
545
- → **Point 3:** [Extract]
546
-
547
- The bottom line: [Key takeaway]
548
-
549
- What's your experience? 👇
550
-
551
- ---
552
-
553
- ## 2. LINKEDIN (Short)
554
-
555
- Hot take: ${a.key_message}
556
-
557
- Most think [common belief].
558
- Data shows [counter-point].
559
-
560
- Agree or disagree?
561
-
562
- ---
563
-
564
- ## 3. LINKEDIN CAROUSEL
565
-
566
- **Slide 1:** "${a.key_message.substring(0, 50)}..."
567
- **Slide 2:** [Problem]
568
- **Slides 3-8:** [Key points]
569
- **Slide 9:** Summary
570
- **Slide 10:** CTA
571
-
572
- ---
573
-
574
- ## 4. TWITTER THREAD
575
-
576
- 1/ ${a.key_message} 🧵
577
-
578
- 2/ [First key point]
579
-
580
- 3/ [Second point]
581
-
582
- 4/ [Third point]
583
-
584
- 5/ TL;DR:
585
- • Point 1
586
- • Point 2
587
- • Point 3
588
-
589
- 6/ RT if helpful. Follow for more.
590
-
591
- ---
592
-
593
- ## 5. SINGLE TWEET
594
-
595
- ${a.key_message.substring(0, 200)}
596
-
597
- [Key insight]
598
-
599
- [Question/CTA]
600
-
601
- ---
602
-
603
- ## 6. EMAIL SECTION
604
-
605
- ### ${a.key_message.split('.')[0]}
606
-
607
- [2-3 paragraph summary]
608
-
609
- **Takeaway:** [One sentence]
610
-
611
- [Read more: Link]
612
-
613
- ---
614
-
615
- ## 7. BLOG OUTLINE
616
-
617
- # ${a.key_message}
618
-
619
- ## Introduction
620
- - Hook
621
- - Why it matters
622
- - What you'll learn
623
-
624
- ## Section 1: [Topic]
625
- ## Section 2: [Topic]
626
- ## Section 3: [Topic]
627
-
628
- ## Conclusion
629
- - Summary
630
- - CTA
631
-
632
- ---
633
-
634
- ## 8. VIDEO SCRIPT (2-3 min)
635
-
636
- **HOOK (0:00):** "${a.key_message}"
637
-
638
- **INTRO (0:15):** "In this video..."
639
-
640
- **CONTENT (0:30-2:00):**
641
- - Point 1
642
- - Point 2
643
- - Point 3
644
-
645
- **CTA (2:00):** "Subscribe/like/comment"
646
-
647
- ---
648
-
649
- ## 9. INFOGRAPHIC
650
-
651
- **Title:** ${a.key_message}
652
- **Section 1:** [Icon] + Point 1
653
- **Section 2:** [Icon] + Point 2
654
- **Section 3:** [Icon] + Point 3
655
- **Footer:** Logo + CTA
656
-
657
- ---
658
-
659
- ## 10. PODCAST POINTS
660
-
661
- **Episode:** ${a.key_message}
662
-
663
- **Discussion (15-20 min):**
664
- - Context/background
665
- - Insight 1
666
- - Insight 2
667
- - Insight 3
668
- - Common mistakes
669
- - What to do instead
670
-
671
- **Takeaways:** Action items
672
-
673
- ---
674
-
675
- ## 11. SALES SNIPPET
676
-
677
- "Great question. ${a.key_message}
678
-
679
- We've found [key insight].
680
-
681
- For example, [specific example].
682
-
683
- How does this compare to what you're seeing?"
684
-
685
- ---
686
-
687
- ## 12. QUOTE GRAPHICS
688
-
689
- 1. "${a.key_message.split('.')[0]}."
690
- 2. "[Impactful line from content]"
691
- 3. "[Stat-based quote]"
692
-
693
- ---
694
-
695
- # DISTRIBUTION SCHEDULE
696
-
697
- | Day | Platform | Format | Time |
698
- |-----|----------|--------|------|
699
- | Mon | LinkedIn | Long | 9 AM |
700
- | Tue | Twitter | Thread | 12 PM |
701
- | Wed | Email | Section | 8 AM |
702
- | Thu | LinkedIn | Short | 10 AM |
703
- | Fri | Twitter | Tweet | 2 PM |
704
-
705
- ---
706
- *Generated by CRAFT Content MCP | gtmexpert.com*`;
707
- }
708
- function generateThoughtLeadership(a) {
709
- return `# 💡 THOUGHT LEADERSHIP SERIES
710
-
711
- **Topic:** ${a.topic}
712
- **Perspective:** ${a.perspective}
713
- **Author:** ${a.author_role}
714
- **Audience:** ${a.audience}
715
- **Goal:** ${a.goal || "Thought leadership"}
716
-
717
- ---
718
-
719
- # 5-POST LINKEDIN SERIES
720
-
721
- ## POST 1: The Problem Statement
722
-
723
- I've spent [X years] in ${a.topic.toLowerCase()}.
724
-
725
- One thing keeps me up at night:
726
-
727
- ${a.perspective}
728
-
729
- Most ${a.audience.toLowerCase()} think [common belief].
730
-
731
- Reality: [contrarian truth].
732
-
733
- I've seen this play out:
734
- • [Example 1]
735
- • [Example 2]
736
- • [Example 3]
737
-
738
- Cost of getting it wrong: [Consequence]
739
-
740
- Over the next weeks, I'm sharing everything I've learned.
741
-
742
- Follow along if you want to [benefit].
743
-
744
- What's your experience? 👇
745
-
746
- ---
747
-
748
- ## POST 2: The Counterintuitive Insight
749
-
750
- Unpopular opinion about ${a.topic.toLowerCase()}:
751
-
752
- ${a.controversial_take || "[Your contrarian take]"}
753
-
754
- Everyone says [conventional wisdom].
755
-
756
- After [experience], I've found the opposite.
757
-
758
- **What everyone does:**
759
- [Common approach]
760
-
761
- **Why it fails:**
762
- • Reason 1
763
- • Reason 2
764
- • Reason 3
765
-
766
- **What actually works:**
767
- [Your approach]
768
-
769
- Which camp are you in?
770
-
771
- ---
772
-
773
- ## POST 3: The Framework
774
-
775
- After [experience] with ${a.topic.toLowerCase()}, I developed a framework.
776
-
777
- I call it [Framework Name].
778
-
779
- **Step 1: [Name]**
780
- [Explanation]
781
-
782
- **Step 2: [Name]**
783
- [Explanation]
784
-
785
- **Step 3: [Name]**
786
- [Explanation]
787
-
788
- **Step 4: [Name]**
789
- [Explanation]
790
-
791
- This isn't theory. I've used it to [results].
792
-
793
- Save this post.
794
-
795
- ---
796
-
797
- ## POST 4: The Case Study
798
-
799
- Let me tell you about [person/company].
800
-
801
- They struggled with ${a.topic.toLowerCase()}.
802
-
803
- Nothing worked:
804
- ❌ [Failed approach 1]
805
- ❌ [Failed approach 2]
806
- ❌ [Failed approach 3]
807
-
808
- Then they [key change].
809
-
810
- Results:
811
- 📈 [Result 1]
812
- 📈 [Result 2]
813
- 📈 [Result 3]
814
-
815
- The lesson: ${a.perspective}
816
-
817
- What would results like this mean for you?
818
-
819
- ---
820
-
821
- ## POST 5: The Call to Action
822
-
823
- After 4 posts on ${a.topic.toLowerCase()}, remember:
824
-
825
- **1.** [Summary from Post 1]
826
- **2.** [Summary from Post 2]
827
- **3.** [Summary from Post 3]
828
- **4.** [Summary from Post 4]
829
-
830
- Knowledge without action is useless.
831
-
832
- My challenge: Pick ONE thing and implement it this week.
833
-
834
- Come back and tell me what happened.
835
-
836
- I read every comment. Let's go. 🚀
837
-
838
- ---
839
-
840
- # ENGAGEMENT STRATEGY
841
-
842
- **Best Times:** Tue-Thu, 8-10 AM
843
- **Spacing:** 2-3 days apart
844
- **Comments:** Reply within 2 hours
845
-
846
- **Hashtags:** #${a.topic.replace(/\s/g, '')} #ThoughtLeadership #${a.audience.replace(/\s/g, '')}
847
-
848
- ---
849
- *Generated by CRAFT Content MCP | gtmexpert.com*`;
850
- }
851
- function generateTestimonialKit(a) {
852
- return `# ⭐ TESTIMONIAL CAPTURE KIT
853
-
854
- **Contact:** ${a.customer_name}
855
- **Company:** ${a.customer_company}
856
- **Context:** ${a.relationship_context || "Current customer"}
857
- **Use Case:** ${a.use_case}
858
- **Format:** ${a.format_needed || "Quote, case study"}
859
-
860
- ---
861
-
862
- # EMAIL 1: Initial Request
863
-
864
- **Subject:** Quick favor? Share your ${a.your_company} experience
865
-
866
- Hi ${a.customer_name},
867
-
868
- Hope you're well! I'm reaching out because you've been a great partner, and I'd love to feature ${a.customer_company}'s success.
869
-
870
- Your results with ${a.use_case} have been impressive.
871
-
872
- Would you be open to:
873
- • A brief testimonial (15-20 min)
874
- • Providing a written quote
875
- • A G2/Capterra review
876
-
877
- I'll make it easy - just 15-20 minutes, and I handle all writing/editing.
878
-
879
- Interested?
880
-
881
- ${a.your_name || "[Your name]"}
882
-
883
- ---
884
-
885
- # EMAIL 2: Questions
886
-
887
- **Subject:** Re: Your questions
888
-
889
- Hi ${a.customer_name},
890
-
891
- Thanks for agreeing! Here are the questions:
892
-
893
- **Before ${a.your_company}:**
894
- 1. What challenge were you facing?
895
- 2. What did you try before?
896
- 3. What was the impact?
897
-
898
- **Experience:**
899
- 4. Why did you choose ${a.your_company}?
900
- 5. How was implementation?
901
- 6. What features do you use most?
902
-
903
- **Results:**
904
- 7. What results have you achieved?
905
- 8. How has this impacted your team?
906
- 9. What would you tell someone considering ${a.your_company}?
907
-
908
- Quick answers are fine - I'll polish them!
909
-
910
- ${a.your_name || "[Your name]"}
911
-
912
- ---
913
-
914
- # INTERVIEW GUIDE
915
-
916
- ## Opening (2 min)
917
- - Thank them
918
- - Explain process
919
- - Confirm consent
920
-
921
- ## Background (3 min)
922
- 1. "Tell me about your role."
923
- 2. "What does your team focus on?"
924
-
925
- ## Challenge (5 min)
926
- 3. "What challenge led you to ${a.your_company}?"
927
- 4. "What was the impact?"
928
- 5. "What did you try before?"
929
-
930
- ## Solution (5 min)
931
- 6. "Why ${a.your_company}?"
932
- 7. "How was implementation?"
933
- 8. "Key features?"
934
-
935
- ## Results (5 min)
936
- 9. "What results have you seen?"
937
- 10. "Specific metrics?"
938
- 11. "Team impact?"
939
-
940
- ## Recommendation (3 min)
941
- 12. "What would you tell someone considering us?"
942
- 13. "Advice for getting the most value?"
943
-
944
- ---
945
-
946
- # FORMATTED OUTPUTS
947
-
948
- ## Short Quote
949
- > "${a.your_company} has [outcome]. We've seen [result] since implementing."
950
- > — ${a.customer_name}, [Title], ${a.customer_company}
951
-
952
- ## Long Quote
953
- > "Before ${a.your_company}, we struggled with [challenge]. Since implementing, we've achieved [result 1] and [result 2]. I'd recommend ${a.your_company} to any company dealing with [similar challenge]."
954
- > — ${a.customer_name}, [Title], ${a.customer_company}
955
-
956
- ## Social Proof
957
- "${a.customer_company} achieved [result] with ${a.your_company}." ★★★★★
958
-
959
- ## Website Block
960
- **${a.customer_company}**
961
- "[Powerful 1-2 sentence quote]"
962
- **${a.customer_name}**, [Title]
963
- **Result:** [Key metric]
964
-
965
- ---
966
- *Generated by CRAFT Content MCP | gtmexpert.com*`;
967
- }
968
- function generateSalesContent(a) {
969
- return `# 💼 SALES ENABLEMENT CONTENT
970
-
971
- **Product:** ${a.product}
972
- **Target:** ${a.target_persona}
973
- **Competitors:** ${a.competitors || "N/A"}
974
- **Price:** ${a.price_range || "N/A"}
975
-
976
- ## Value Props
977
- ${a.value_props}
978
-
979
- ## Objections
980
- ${a.common_objections}
981
-
982
- ## Success Metrics
983
- ${a.key_metrics || "N/A"}
984
-
985
- ---
986
-
987
- # PITCH VARIATIONS
988
-
989
- ## 30-Second
990
- "${a.product} helps ${a.target_persona.toLowerCase()} [primary outcome].
991
-
992
- Unlike alternatives, we [differentiator].
993
-
994
- Customers see [key metric].
995
-
996
- Worth 15 minutes to explore?"
997
-
998
- ---
999
-
1000
- ## 2-Minute
1001
-
1002
- "Let me tell you about ${a.product}.
1003
-
1004
- **Problem:** [Pain point for ${a.target_persona.toLowerCase()}]
1005
-
1006
- Most solutions [limitation].
1007
-
1008
- **Our Approach:** ${a.product} [difference].
1009
-
1010
- **Results:**
1011
- ${a.value_props.split('\n').map(v => `• ${v}`).join('\n')}
1012
-
1013
- For example, [customer] saw [result].
1014
-
1015
- **Next:** 30 minutes to show how this works for you?"
1016
-
1017
- ---
1018
-
1019
- ## 5-Minute
1020
-
1021
- "Thanks for the time.
1022
-
1023
- **The Problem:**
1024
- ${a.target_persona} typically struggle with [challenge]. Cost: [impact].
1025
-
1026
- **What Most Do:**
1027
- [Common approach] - but [limitation].
1028
-
1029
- **Our Solution:**
1030
- ${a.product}:
1031
- ${a.value_props.split('\n').map(v => `• ${v}`).join('\n')}
1032
-
1033
- **Proof:**
1034
- ${a.key_metrics || "[Results]"}
1035
-
1036
- **Investment:**
1037
- ${a.price_range || "[Pricing]"}
1038
-
1039
- **Next:**
1040
- Based on what you've shared, I see potential. Want to explore a pilot?"
1041
-
1042
- ---
1043
-
1044
- # OBJECTION HANDLERS
1045
-
1046
- ${a.common_objections.split('\n').map(obj => `
1047
- ## "${obj.trim()}"
1048
-
1049
- **Acknowledge:** "I understand. [Validation]"
1050
-
1051
- **Respond:** "[Counter-point with evidence]"
1052
-
1053
- **Redirect:** "What would change your mind?"`).join('\n')}
1054
-
1055
- ---
1056
-
1057
- ## Price Objection
1058
-
1059
- "I hear you. Let's break it down.
1060
-
1061
- Currently, [problem] costs [amount].
1062
- ${a.product}: [price].
1063
- ROI: [timeframe].
1064
-
1065
- Most see [X]x return. Can I show the ROI calculator?"
1066
-
1067
- ---
1068
-
1069
- ## Competitor Objection
1070
-
1071
- "They're solid. Our customers found:
1072
- • [Advantage 1]
1073
- • [Advantage 2]
1074
- • [Advantage 3]
1075
-
1076
- What's most important to you?"
1077
-
1078
- ---
1079
-
1080
- # DISCOVERY QUESTIONS
1081
-
1082
- **Situation:**
1083
- 1. "Tell me about your current [process]."
1084
- 2. "What tools are you using?"
1085
-
1086
- **Problem:**
1087
- 3. "What's working? Not working?"
1088
- 4. "What happens when [problem] occurs?"
1089
- 5. "How much does this cost?"
1090
-
1091
- **Implication:**
1092
- 6. "How does this impact [broader goal]?"
1093
- 7. "What if nothing changes?"
1094
-
1095
- **Need-Payoff:**
1096
- 8. "What would solving this mean?"
1097
- 9. "How would you measure success?"
1098
-
1099
- **Decision:**
1100
- 10. "Who else is involved?"
1101
- 11. "Timeline for change?"
1102
- 12. "What makes this a no-brainer?"
1103
-
1104
- ---
1105
-
1106
- # ROI TALK TRACK
1107
-
1108
- "Let me walk through the value.
1109
-
1110
- **Current:**
1111
- • Time on [task]: ___hrs/week
1112
- • Cost of [problem]: $___/month
1113
-
1114
- **With ${a.product}:**
1115
- • Time saved: ___hrs/week
1116
- • Cost reduction: $___/month
1117
-
1118
- **ROI:** [X]x return in [timeframe]
1119
-
1120
- Does this align with your goals?"
1121
-
1122
- ---
1123
- *Generated by CRAFT Content MCP | gtmexpert.com*`;
1124
- }
1125
- function improveContent(a) {
1126
- return `# ✨ CRAFT CONTENT IMPROVER
1127
-
1128
- **Type:** ${a.content_type}
1129
- **Goal:** ${a.goal}
1130
- **Audience:** ${a.audience || "N/A"}
1131
- **Constraints:** ${a.constraints || "None"}
1132
-
1133
- ## Original
1134
- \`\`\`
1135
- ${a.content.substring(0, 300)}...
1136
- \`\`\`
1137
-
1138
- ---
1139
-
1140
- # CRAFT ANALYSIS
1141
-
1142
- ## C - CHARACTER (Voice)
1143
- | Aspect | Score |
1144
- |--------|-------|
1145
- | Clear voice | ___/10 |
1146
- | Authority | ___/10 |
1147
- | Authenticity | ___/10 |
1148
-
1149
- **Issues:**
1150
- **Improvements:**
1151
-
1152
- ---
1153
-
1154
- ## R - RESULT (Outcome)
1155
- | Aspect | Score |
1156
- |--------|-------|
1157
- | Clear goal | ___/10 |
1158
- | Actionable | ___/10 |
1159
- | Measurable | ___/10 |
1160
-
1161
- **Issues:**
1162
- **Improvements:**
1163
-
1164
- ---
1165
-
1166
- ## A - ARTIFACT (Quality)
1167
- | Aspect | Score |
1168
- |--------|-------|
1169
- | Structure | ___/10 |
1170
- | Formatting | ___/10 |
1171
- | Polish | ___/10 |
1172
-
1173
- **Issues:**
1174
- **Improvements:**
1175
-
1176
- ---
1177
-
1178
- ## F - FRAME (Context)
1179
- | Aspect | Score |
1180
- |--------|-------|
1181
- | Audience fit | ___/10 |
1182
- | Relevance | ___/10 |
1183
-
1184
- **Issues:**
1185
- **Improvements:**
1186
-
1187
- ---
1188
-
1189
- ## T - TIMELINE (Flow)
1190
- | Aspect | Score |
1191
- |--------|-------|
1192
- | Flow | ___/10 |
1193
- | Pacing | ___/10 |
1194
- | CTA timing | ___/10 |
1195
-
1196
- **Issues:**
1197
- **Improvements:**
1198
-
1199
- ---
1200
-
1201
- # SCORE: ___/100
1202
-
1203
- | Dimension | Score |
1204
- |-----------|-------|
1205
- | Character | ___/20 |
1206
- | Result | ___/20 |
1207
- | Artifact | ___/20 |
1208
- | Frame | ___/20 |
1209
- | Timeline | ___/20 |
1210
-
1211
- ---
1212
-
1213
- # IMPROVED VERSION
1214
-
1215
- [Rewritten content with CRAFT improvements]
1216
-
1217
- ---
1218
-
1219
- # KEY CHANGES
1220
-
1221
- 1. **Character:** [Changed]
1222
- 2. **Result:** [Changed]
1223
- 3. **Artifact:** [Changed]
1224
- 4. **Frame:** [Changed]
1225
- 5. **Timeline:** [Changed]
1226
-
1227
- ---
1228
-
1229
- # A/B TESTS
1230
-
1231
- **Test 1:** [Alt headline]
1232
- **Test 2:** [Alt CTA]
1233
- **Test 3:** [Alt structure]
1234
-
1235
- ---
1236
- *Generated by CRAFT Content MCP | gtmexpert.com*`;
1237
- }
84
+ // Main function
1238
85
  async function main() {
1239
- const transport = new stdio_js_1.StdioServerTransport();
86
+ const transport = new StdioServerTransport();
1240
87
  await server.connect(transport);
1241
- console.error("CRAFT Content MCP Server running");
88
+ console.error("CRAFT Content MCP Server v2.0.0 running on stdio");
1242
89
  }
1243
- main().catch(console.error);
90
+ main().catch((error) => {
91
+ console.error("Fatal error in main():", error);
92
+ process.exit(1);
93
+ });
1244
94
  //# sourceMappingURL=index.js.map