@mseep/mcp-agent-social 1.1.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.
Files changed (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/bin/mcp-agent-social +30 -0
  4. package/dist/api-client.d.ts +31 -0
  5. package/dist/api-client.d.ts.map +1 -0
  6. package/dist/api-client.js +212 -0
  7. package/dist/api-client.js.map +1 -0
  8. package/dist/config.d.ts +19 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +79 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/hooks/index.d.ts +38 -0
  13. package/dist/hooks/index.d.ts.map +1 -0
  14. package/dist/hooks/index.js +253 -0
  15. package/dist/hooks/index.js.map +1 -0
  16. package/dist/hooks/types.d.ts +35 -0
  17. package/dist/hooks/types.d.ts.map +1 -0
  18. package/dist/hooks/types.js +4 -0
  19. package/dist/hooks/types.js.map +1 -0
  20. package/dist/http-server.d.ts +38 -0
  21. package/dist/http-server.d.ts.map +1 -0
  22. package/dist/http-server.js +210 -0
  23. package/dist/http-server.js.map +1 -0
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +186 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/logger.d.ts +44 -0
  29. package/dist/logger.d.ts.map +1 -0
  30. package/dist/logger.js +281 -0
  31. package/dist/logger.js.map +1 -0
  32. package/dist/metrics.d.ts +47 -0
  33. package/dist/metrics.d.ts.map +1 -0
  34. package/dist/metrics.js +178 -0
  35. package/dist/metrics.js.map +1 -0
  36. package/dist/middleware/error-handler.d.ts +74 -0
  37. package/dist/middleware/error-handler.d.ts.map +1 -0
  38. package/dist/middleware/error-handler.js +218 -0
  39. package/dist/middleware/error-handler.js.map +1 -0
  40. package/dist/middleware/index.d.ts +55 -0
  41. package/dist/middleware/index.d.ts.map +1 -0
  42. package/dist/middleware/index.js +91 -0
  43. package/dist/middleware/index.js.map +1 -0
  44. package/dist/middleware/timeout.d.ts +52 -0
  45. package/dist/middleware/timeout.d.ts.map +1 -0
  46. package/dist/middleware/timeout.js +189 -0
  47. package/dist/middleware/timeout.js.map +1 -0
  48. package/dist/middleware/validator.d.ts +25 -0
  49. package/dist/middleware/validator.d.ts.map +1 -0
  50. package/dist/middleware/validator.js +186 -0
  51. package/dist/middleware/validator.js.map +1 -0
  52. package/dist/prompts/analyze.d.ts +46 -0
  53. package/dist/prompts/analyze.d.ts.map +1 -0
  54. package/dist/prompts/analyze.js +351 -0
  55. package/dist/prompts/analyze.js.map +1 -0
  56. package/dist/prompts/generate.d.ts +48 -0
  57. package/dist/prompts/generate.d.ts.map +1 -0
  58. package/dist/prompts/generate.js +177 -0
  59. package/dist/prompts/generate.js.map +1 -0
  60. package/dist/prompts/index.d.ts +23 -0
  61. package/dist/prompts/index.d.ts.map +1 -0
  62. package/dist/prompts/index.js +69 -0
  63. package/dist/prompts/index.js.map +1 -0
  64. package/dist/prompts/summarize.d.ts +32 -0
  65. package/dist/prompts/summarize.d.ts.map +1 -0
  66. package/dist/prompts/summarize.js +182 -0
  67. package/dist/prompts/summarize.js.map +1 -0
  68. package/dist/prompts/types.d.ts +34 -0
  69. package/dist/prompts/types.d.ts.map +1 -0
  70. package/dist/prompts/types.js +24 -0
  71. package/dist/prompts/types.js.map +1 -0
  72. package/dist/resources/agents.d.ts +17 -0
  73. package/dist/resources/agents.d.ts.map +1 -0
  74. package/dist/resources/agents.js +139 -0
  75. package/dist/resources/agents.js.map +1 -0
  76. package/dist/resources/feed.d.ts +19 -0
  77. package/dist/resources/feed.d.ts.map +1 -0
  78. package/dist/resources/feed.js +138 -0
  79. package/dist/resources/feed.js.map +1 -0
  80. package/dist/resources/index.d.ts +19 -0
  81. package/dist/resources/index.d.ts.map +1 -0
  82. package/dist/resources/index.js +146 -0
  83. package/dist/resources/index.js.map +1 -0
  84. package/dist/resources/posts.d.ts +17 -0
  85. package/dist/resources/posts.d.ts.map +1 -0
  86. package/dist/resources/posts.js +151 -0
  87. package/dist/resources/posts.js.map +1 -0
  88. package/dist/resources/types.d.ts +91 -0
  89. package/dist/resources/types.d.ts.map +1 -0
  90. package/dist/resources/types.js +12 -0
  91. package/dist/resources/types.js.map +1 -0
  92. package/dist/roots/index.d.ts +43 -0
  93. package/dist/roots/index.d.ts.map +1 -0
  94. package/dist/roots/index.js +131 -0
  95. package/dist/roots/index.js.map +1 -0
  96. package/dist/roots/types.d.ts +31 -0
  97. package/dist/roots/types.d.ts.map +1 -0
  98. package/dist/roots/types.js +4 -0
  99. package/dist/roots/types.js.map +1 -0
  100. package/dist/session-manager.d.ts +50 -0
  101. package/dist/session-manager.d.ts.map +1 -0
  102. package/dist/session-manager.js +127 -0
  103. package/dist/session-manager.js.map +1 -0
  104. package/dist/tools/create-post.d.ts +45 -0
  105. package/dist/tools/create-post.d.ts.map +1 -0
  106. package/dist/tools/create-post.js +119 -0
  107. package/dist/tools/create-post.js.map +1 -0
  108. package/dist/tools/index.d.ts +13 -0
  109. package/dist/tools/index.d.ts.map +1 -0
  110. package/dist/tools/index.js +44 -0
  111. package/dist/tools/index.js.map +1 -0
  112. package/dist/tools/login.d.ts +35 -0
  113. package/dist/tools/login.d.ts.map +1 -0
  114. package/dist/tools/login.js +132 -0
  115. package/dist/tools/login.js.map +1 -0
  116. package/dist/tools/read-posts.d.ts +48 -0
  117. package/dist/tools/read-posts.d.ts.map +1 -0
  118. package/dist/tools/read-posts.js +93 -0
  119. package/dist/tools/read-posts.js.map +1 -0
  120. package/dist/types.d.ts +88 -0
  121. package/dist/types.d.ts.map +1 -0
  122. package/dist/types.js +4 -0
  123. package/dist/types.js.map +1 -0
  124. package/dist/utils/json.d.ts +13 -0
  125. package/dist/utils/json.d.ts.map +1 -0
  126. package/dist/utils/json.js +48 -0
  127. package/dist/utils/json.js.map +1 -0
  128. package/dist/validation.d.ts +58 -0
  129. package/dist/validation.d.ts.map +1 -0
  130. package/dist/validation.js +223 -0
  131. package/dist/validation.js.map +1 -0
  132. package/package.json +70 -0
  133. package/src/api-client.ts +292 -0
  134. package/src/config.ts +92 -0
  135. package/src/hooks/index.ts +304 -0
  136. package/src/hooks/types.ts +44 -0
  137. package/src/http-server.ts +243 -0
  138. package/src/index.ts +213 -0
  139. package/src/logger.ts +326 -0
  140. package/src/metrics.ts +235 -0
  141. package/src/middleware/error-handler.ts +252 -0
  142. package/src/middleware/index.ts +112 -0
  143. package/src/middleware/timeout.ts +216 -0
  144. package/src/middleware/validator.ts +216 -0
  145. package/src/prompts/analyze.ts +404 -0
  146. package/src/prompts/generate.ts +217 -0
  147. package/src/prompts/index.ts +121 -0
  148. package/src/prompts/summarize.ts +217 -0
  149. package/src/prompts/types.ts +44 -0
  150. package/src/resources/agents.ts +165 -0
  151. package/src/resources/feed.ts +169 -0
  152. package/src/resources/index.ts +210 -0
  153. package/src/resources/posts.ts +179 -0
  154. package/src/resources/types.ts +104 -0
  155. package/src/roots/index.ts +166 -0
  156. package/src/roots/types.ts +36 -0
  157. package/src/session-manager.ts +149 -0
  158. package/src/tools/create-post.ts +154 -0
  159. package/src/tools/index.ts +70 -0
  160. package/src/tools/login.ts +169 -0
  161. package/src/tools/read-posts.ts +120 -0
  162. package/src/types.ts +107 -0
  163. package/src/utils/json.ts +46 -0
  164. package/src/validation.ts +322 -0
  165. package/tsconfig.json +22 -0
@@ -0,0 +1,351 @@
1
+ // ABOUTME: Analysis prompts for social media insights
2
+ // ABOUTME: Provides templates for sentiment analysis and trend detection
3
+ import { z } from 'zod';
4
+ import { config } from '../config.js';
5
+ import { logger } from '../logger.js';
6
+ const analyzeSentimentArgsSchema = {
7
+ scope: z.string().describe('Scope of analysis: thread, agent, tag, or recent'),
8
+ target: z.string().optional().describe('Target ID (thread_id, agent_name, or tag)'),
9
+ };
10
+ export async function analyzeSentimentPrompt(args, _extra, context) {
11
+ try {
12
+ logger.debug('Generating sentiment analysis prompt', {
13
+ scope: args.scope,
14
+ target: args.target,
15
+ });
16
+ let posts;
17
+ let description = '';
18
+ // Fetch posts based on scope
19
+ switch (args.scope) {
20
+ case 'thread': {
21
+ if (!args.target) {
22
+ return {
23
+ description: 'Thread ID required',
24
+ messages: [
25
+ {
26
+ role: 'user',
27
+ content: {
28
+ type: 'text',
29
+ text: 'Thread ID is required for thread sentiment analysis',
30
+ },
31
+ },
32
+ ],
33
+ };
34
+ }
35
+ const threadResponse = await context.apiClient.fetchPosts(config.teamName, {
36
+ thread_id: args.target,
37
+ limit: 100,
38
+ offset: 0,
39
+ });
40
+ posts = threadResponse.posts;
41
+ description = `Thread ${args.target}`;
42
+ break;
43
+ }
44
+ case 'agent': {
45
+ if (!args.target) {
46
+ return {
47
+ description: 'Agent name required',
48
+ messages: [
49
+ {
50
+ role: 'user',
51
+ content: {
52
+ type: 'text',
53
+ text: 'Agent name is required for agent sentiment analysis',
54
+ },
55
+ },
56
+ ],
57
+ };
58
+ }
59
+ const agentResponse = await context.apiClient.fetchPosts(config.teamName, {
60
+ agent_filter: args.target,
61
+ limit: 50,
62
+ offset: 0,
63
+ });
64
+ posts = agentResponse.posts;
65
+ description = `Agent ${args.target}'s posts`;
66
+ break;
67
+ }
68
+ case 'tag': {
69
+ if (!args.target) {
70
+ return {
71
+ description: 'Tag required',
72
+ messages: [
73
+ {
74
+ role: 'user',
75
+ content: {
76
+ type: 'text',
77
+ text: 'Tag is required for tag sentiment analysis',
78
+ },
79
+ },
80
+ ],
81
+ };
82
+ }
83
+ const tagResponse = await context.apiClient.fetchPosts(config.teamName, {
84
+ tag_filter: args.target,
85
+ limit: 50,
86
+ offset: 0,
87
+ });
88
+ posts = tagResponse.posts;
89
+ description = `Posts tagged with #${args.target}`;
90
+ break;
91
+ }
92
+ default: {
93
+ const recentResponse = await context.apiClient.fetchPosts(config.teamName, {
94
+ limit: 30,
95
+ offset: 0,
96
+ });
97
+ posts = recentResponse.posts;
98
+ description = 'Recent posts';
99
+ }
100
+ }
101
+ if (!posts || posts.length === 0) {
102
+ return {
103
+ description: 'No posts found',
104
+ messages: [
105
+ {
106
+ role: 'user',
107
+ content: {
108
+ type: 'text',
109
+ text: `No posts found for ${description}`,
110
+ },
111
+ },
112
+ ],
113
+ };
114
+ }
115
+ const postSample = posts
116
+ .slice(0, 20)
117
+ .map((p) => `${p.author_name}: "${p.content}"`)
118
+ .join('\n\n');
119
+ return {
120
+ description: `Analyze sentiment of ${description}`,
121
+ messages: [
122
+ {
123
+ role: 'user',
124
+ content: {
125
+ type: 'text',
126
+ text: `Please analyze the sentiment of the following social media posts from ${description}:
127
+
128
+ Total posts: ${posts.length}
129
+ Sample analyzed: ${Math.min(20, posts.length)}
130
+
131
+ Posts:
132
+ ${postSample}
133
+
134
+ Please provide:
135
+ 1. Overall sentiment (positive, negative, neutral, mixed)
136
+ 2. Sentiment distribution (% positive, negative, neutral)
137
+ 3. Key emotional themes detected
138
+ 4. Notable sentiment shifts or patterns
139
+ 5. Specific posts that exemplify the dominant sentiment
140
+ 6. Any concerning or notably positive trends`,
141
+ },
142
+ },
143
+ ],
144
+ };
145
+ }
146
+ catch (error) {
147
+ logger.error('Error generating sentiment analysis prompt', { error, scope: args.scope });
148
+ return {
149
+ description: 'Error generating prompt',
150
+ messages: [
151
+ {
152
+ role: 'user',
153
+ content: {
154
+ type: 'text',
155
+ text: `Error fetching data: ${error instanceof Error ? error.message : 'Unknown error'}`,
156
+ },
157
+ },
158
+ ],
159
+ };
160
+ }
161
+ }
162
+ const findRelatedArgsSchema = {
163
+ topic: z.string().describe('The topic or keywords to search for'),
164
+ limit: z.string().optional().describe('Maximum number of results (default: 10)'),
165
+ };
166
+ export async function findRelatedDiscussionsPrompt(args, _extra, context) {
167
+ try {
168
+ const limit = args.limit ? Number.parseInt(args.limit, 10) : 10;
169
+ logger.debug('Generating related discussions prompt', { topic: args.topic, limit });
170
+ // Fetch recent posts to search through
171
+ const response = await context.apiClient.fetchPosts(config.teamName, {
172
+ limit: 100,
173
+ offset: 0,
174
+ });
175
+ // Simple keyword matching (in a real system, this would be more sophisticated)
176
+ const keywords = args.topic.toLowerCase().split(' ');
177
+ const relevantPosts = response.posts.filter((post) => {
178
+ const content = post.content.toLowerCase();
179
+ return keywords.some((keyword) => content.includes(keyword));
180
+ });
181
+ if (relevantPosts.length === 0) {
182
+ return {
183
+ description: 'No related discussions found',
184
+ messages: [
185
+ {
186
+ role: 'user',
187
+ content: {
188
+ type: 'text',
189
+ text: `No discussions found related to "${args.topic}"`,
190
+ },
191
+ },
192
+ ],
193
+ };
194
+ }
195
+ const discussions = relevantPosts
196
+ .slice(0, limit)
197
+ .map((p) => `[${p.id}] ${p.author_name}: "${p.content}"${p.tags?.length ? ` [${p.tags.join(', ')}]` : ''}`)
198
+ .join('\n\n');
199
+ return {
200
+ description: `Find discussions related to "${args.topic}"`,
201
+ messages: [
202
+ {
203
+ role: 'user',
204
+ content: {
205
+ type: 'text',
206
+ text: `Analyze the following posts related to "${args.topic}":
207
+
208
+ Found ${relevantPosts.length} related posts (showing ${Math.min(limit, relevantPosts.length)}):
209
+
210
+ ${discussions}
211
+
212
+ Please provide:
213
+ 1. A summary of how these posts relate to "${args.topic}"
214
+ 2. Common themes or perspectives across the discussions
215
+ 3. Any conflicting viewpoints or debates
216
+ 4. Key insights or conclusions from the community
217
+ 5. Recommendations for which threads to explore further
218
+ 6. Suggested follow-up questions or topics`,
219
+ },
220
+ },
221
+ ],
222
+ };
223
+ }
224
+ catch (error) {
225
+ logger.error('Error generating related discussions prompt', { error, topic: args.topic });
226
+ return {
227
+ description: 'Error generating prompt',
228
+ messages: [
229
+ {
230
+ role: 'user',
231
+ content: {
232
+ type: 'text',
233
+ text: `Error searching for discussions: ${error instanceof Error ? error.message : 'Unknown error'}`,
234
+ },
235
+ },
236
+ ],
237
+ };
238
+ }
239
+ }
240
+ const engagementReportArgsSchema = {
241
+ time_period: z.string().optional().describe('Time period: today, week, month (default: week)'),
242
+ focus: z.string().optional().describe('Focus area: posts, replies, tags, agents'),
243
+ };
244
+ export async function generateEngagementReportPrompt(args, _extra, context) {
245
+ try {
246
+ const period = args.time_period || 'week';
247
+ const focus = args.focus || 'general';
248
+ logger.debug('Generating engagement report prompt', { period, focus });
249
+ // Fetch posts (in a real system, would filter by time)
250
+ const response = await context.apiClient.fetchPosts(config.teamName, {
251
+ limit: 100,
252
+ offset: 0,
253
+ });
254
+ // Analyze engagement patterns
255
+ const posts = response.posts;
256
+ const authors = new Set(posts.map((p) => p.author_name));
257
+ const threads = new Set(posts.filter((p) => p.parent_post_id).map((p) => p.parent_post_id));
258
+ const tags = posts.flatMap((p) => p.tags || []);
259
+ const tagCounts = tags.reduce((acc, tag) => {
260
+ acc[tag] = (acc[tag] || 0) + 1;
261
+ return acc;
262
+ }, {});
263
+ const topTags = Object.entries(tagCounts)
264
+ .sort(([, a], [, b]) => b - a)
265
+ .slice(0, 5)
266
+ .map(([tag, count]) => `#${tag} (${count} uses)`)
267
+ .join(', ');
268
+ const originalPosts = posts.filter((p) => !p.parent_post_id).length;
269
+ const replies = posts.filter((p) => p.parent_post_id).length;
270
+ return {
271
+ description: `Generate ${period} engagement report`,
272
+ messages: [
273
+ {
274
+ role: 'user',
275
+ content: {
276
+ type: 'text',
277
+ text: `Generate an engagement report for the ${period} with focus on ${focus}:
278
+
279
+ Data Summary:
280
+ - Total Posts: ${posts.length}
281
+ - Original Posts: ${originalPosts}
282
+ - Replies: ${replies}
283
+ - Active Users: ${authors.size}
284
+ - Active Threads: ${threads.size}
285
+ - Top Tags: ${topTags || 'none'}
286
+
287
+ Time Range: ${posts[posts.length - 1]?.timestamp} to ${posts[0]?.timestamp}
288
+
289
+ Please create a comprehensive engagement report including:
290
+
291
+ 1. Executive Summary
292
+ - Key metrics and trends
293
+ - Engagement rate (replies vs original posts)
294
+ - User participation levels
295
+
296
+ 2. Content Analysis
297
+ - Most discussed topics
298
+ - Popular content types
299
+ - Viral posts or threads
300
+
301
+ 3. User Behavior
302
+ - Most active contributors
303
+ - New vs returning users
304
+ - Engagement patterns
305
+
306
+ 4. Insights & Recommendations
307
+ - What's working well
308
+ - Areas for improvement
309
+ - Suggested actions to increase engagement
310
+
311
+ 5. ${focus === 'general' ? 'Overall trends' : `Specific ${focus} analysis`}`,
312
+ },
313
+ },
314
+ ],
315
+ };
316
+ }
317
+ catch (error) {
318
+ logger.error('Error generating engagement report prompt', { error });
319
+ return {
320
+ description: 'Error generating prompt',
321
+ messages: [
322
+ {
323
+ role: 'user',
324
+ content: {
325
+ type: 'text',
326
+ text: `Error generating report: ${error instanceof Error ? error.message : 'Unknown error'}`,
327
+ },
328
+ },
329
+ ],
330
+ };
331
+ }
332
+ }
333
+ // Export schemas for registration
334
+ export const analyzePrompts = {
335
+ analyzeSentiment: {
336
+ description: 'Analyze sentiment of posts by thread, agent, tag, or recent',
337
+ argsSchema: analyzeSentimentArgsSchema,
338
+ handler: analyzeSentimentPrompt,
339
+ },
340
+ findRelatedDiscussions: {
341
+ description: 'Find discussions related to a specific topic',
342
+ argsSchema: findRelatedArgsSchema,
343
+ handler: findRelatedDiscussionsPrompt,
344
+ },
345
+ generateEngagementReport: {
346
+ description: 'Generate engagement analytics and insights',
347
+ argsSchema: engagementReportArgsSchema,
348
+ handler: generateEngagementReportPrompt,
349
+ },
350
+ };
351
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/prompts/analyze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
2
+ import type { GetPromptResult, ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
3
+ import { z } from 'zod';
4
+ import type { IApiClient } from '../api-client.js';
5
+ import type { SessionManager } from '../session-manager.js';
6
+ export interface GeneratePromptContext {
7
+ apiClient: IApiClient;
8
+ sessionManager: SessionManager;
9
+ }
10
+ export declare function draftReplyPrompt(args: {
11
+ post_id: string;
12
+ tone?: string;
13
+ }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>, context: GeneratePromptContext): Promise<GetPromptResult>;
14
+ export declare function generateHashtagsPrompt(args: {
15
+ content: string;
16
+ style?: string;
17
+ }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>, _context: GeneratePromptContext): Promise<GetPromptResult>;
18
+ export declare function createEngagementPostPrompt(args: {
19
+ topic: string;
20
+ post_type?: string;
21
+ }, _extra: RequestHandlerExtra<ServerRequest, ServerNotification>, context: GeneratePromptContext): Promise<GetPromptResult>;
22
+ export declare const generatePrompts: {
23
+ draftReply: {
24
+ description: string;
25
+ argsSchema: {
26
+ post_id: z.ZodString;
27
+ tone: z.ZodOptional<z.ZodString>;
28
+ };
29
+ handler: typeof draftReplyPrompt;
30
+ };
31
+ generateHashtags: {
32
+ description: string;
33
+ argsSchema: {
34
+ content: z.ZodString;
35
+ style: z.ZodOptional<z.ZodString>;
36
+ };
37
+ handler: typeof generateHashtagsPrompt;
38
+ };
39
+ createEngagementPost: {
40
+ description: string;
41
+ argsSchema: {
42
+ topic: z.ZodString;
43
+ post_type: z.ZodOptional<z.ZodString>;
44
+ };
45
+ handler: typeof createEngagementPostPrompt;
46
+ };
47
+ };
48
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/prompts/generate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,UAAU,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;CAChC;AAUD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,MAAM,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAC9D,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAmF1B;AAOD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACzC,MAAM,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAC9D,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAOD,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3C,MAAM,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAC9D,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAiC1B;AAGD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;CAgB3B,CAAC"}
@@ -0,0 +1,177 @@
1
+ // ABOUTME: Generation prompts for creating social media content
2
+ // ABOUTME: Provides templates for drafting posts and replies
3
+ import { z } from 'zod';
4
+ import { config } from '../config.js';
5
+ import { logger } from '../logger.js';
6
+ const draftReplyArgsSchema = {
7
+ post_id: z.string().describe('The ID of the post to reply to'),
8
+ tone: z
9
+ .string()
10
+ .optional()
11
+ .describe('Desired tone: friendly, professional, casual, enthusiastic'),
12
+ };
13
+ export async function draftReplyPrompt(args, _extra, context) {
14
+ try {
15
+ logger.debug('Generating reply draft prompt', { postId: args.post_id });
16
+ // Get current session to know who's replying
17
+ const session = context.sessionManager.getSession('global-session');
18
+ const agentName = session?.agentName || 'Anonymous';
19
+ // Fetch the specific post and its context
20
+ const response = await context.apiClient.fetchPosts(config.teamName, {
21
+ limit: 50,
22
+ offset: 0,
23
+ });
24
+ const post = response.posts.find((p) => p.id === args.post_id);
25
+ if (!post) {
26
+ return {
27
+ description: 'Post not found',
28
+ messages: [
29
+ {
30
+ role: 'user',
31
+ content: {
32
+ type: 'text',
33
+ text: `Unable to find post with ID: ${args.post_id}`,
34
+ },
35
+ },
36
+ ],
37
+ };
38
+ }
39
+ // If it's part of a thread, get context
40
+ let threadContext = '';
41
+ if (post.parent_post_id) {
42
+ const parentPost = response.posts.find((p) => p.id === post.parent_post_id);
43
+ if (parentPost) {
44
+ threadContext = `\n\nOriginal post by ${parentPost.author_name}: "${parentPost.content}"`;
45
+ }
46
+ }
47
+ const tone = args.tone || 'friendly';
48
+ return {
49
+ description: 'Draft a contextual reply to a social media post',
50
+ messages: [
51
+ {
52
+ role: 'user',
53
+ content: {
54
+ type: 'text',
55
+ text: `You are ${agentName}, drafting a reply to a social media post.
56
+
57
+ Post to reply to:
58
+ Author: ${post.author_name}
59
+ Content: "${post.content}"
60
+ Tags: ${post.tags?.join(', ') || 'none'}${threadContext}
61
+
62
+ Please draft a ${tone} reply that:
63
+ 1. Acknowledges the author's point or question
64
+ 2. Adds value to the conversation
65
+ 3. Maintains a ${tone} tone
66
+ 4. Is concise and engaging (under 280 characters if possible)
67
+ 5. Uses relevant hashtags if appropriate
68
+
69
+ Draft 3 different reply options.`,
70
+ },
71
+ },
72
+ ],
73
+ };
74
+ }
75
+ catch (error) {
76
+ logger.error('Error generating reply draft prompt', { error, postId: args.post_id });
77
+ return {
78
+ description: 'Error generating prompt',
79
+ messages: [
80
+ {
81
+ role: 'user',
82
+ content: {
83
+ type: 'text',
84
+ text: `Error fetching post data: ${error instanceof Error ? error.message : 'Unknown error'}`,
85
+ },
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ }
91
+ const generateHashtagsArgsSchema = {
92
+ content: z.string().describe('The post content to generate hashtags for'),
93
+ style: z.string().optional().describe('Hashtag style: trending, professional, casual, minimal'),
94
+ };
95
+ export async function generateHashtagsPrompt(args, _extra, _context) {
96
+ const style = args.style || 'trending';
97
+ return {
98
+ description: 'Generate relevant hashtags for social media content',
99
+ messages: [
100
+ {
101
+ role: 'user',
102
+ content: {
103
+ type: 'text',
104
+ text: `Generate hashtags for the following social media post:
105
+
106
+ "${args.content}"
107
+
108
+ Style preference: ${style}
109
+
110
+ Please suggest:
111
+ 1. 3-5 highly relevant hashtags
112
+ 2. 2-3 trending or popular related hashtags
113
+ 3. 1-2 unique/creative hashtags
114
+
115
+ Format the response as a list of hashtags with brief explanations for each choice.
116
+ Consider the content's topic, tone, and potential audience.`,
117
+ },
118
+ },
119
+ ],
120
+ };
121
+ }
122
+ const createEngagementPostArgsSchema = {
123
+ topic: z.string().describe('The topic or theme for the post'),
124
+ post_type: z.string().optional().describe('Type: question, poll, discussion, announcement'),
125
+ };
126
+ export async function createEngagementPostPrompt(args, _extra, context) {
127
+ const postType = args.post_type || 'discussion';
128
+ const session = context.sessionManager.getSession('global-session');
129
+ const agentName = session?.agentName || 'AI Assistant';
130
+ return {
131
+ description: 'Create an engaging social media post to drive conversation',
132
+ messages: [
133
+ {
134
+ role: 'user',
135
+ content: {
136
+ type: 'text',
137
+ text: `You are ${agentName}, creating an engaging ${postType} post about "${args.topic}".
138
+
139
+ Create a social media post that:
140
+ 1. Sparks conversation and encourages responses
141
+ 2. Is relevant to ${args.topic}
142
+ 3. Fits the ${postType} format
143
+ 4. Includes a clear call-to-action
144
+ 5. Uses appropriate emojis and formatting
145
+ 6. Stays under 280 characters if possible
146
+
147
+ Additional guidelines by post type:
148
+ - question: Ask an open-ended, thought-provoking question
149
+ - poll: Present 2-4 clear options for people to choose from
150
+ - discussion: Share an interesting perspective and invite opinions
151
+ - announcement: Share news/updates in an exciting, engaging way
152
+
153
+ Generate 3 different versions of the post.`,
154
+ },
155
+ },
156
+ ],
157
+ };
158
+ }
159
+ // Export schemas for registration
160
+ export const generatePrompts = {
161
+ draftReply: {
162
+ description: 'Draft contextual replies to social media posts',
163
+ argsSchema: draftReplyArgsSchema,
164
+ handler: draftReplyPrompt,
165
+ },
166
+ generateHashtags: {
167
+ description: 'Generate relevant hashtags for post content',
168
+ argsSchema: generateHashtagsArgsSchema,
169
+ handler: generateHashtagsPrompt,
170
+ },
171
+ createEngagementPost: {
172
+ description: 'Create posts designed to drive engagement',
173
+ argsSchema: createEngagementPostArgsSchema,
174
+ handler: createEngagementPostPrompt,
175
+ },
176
+ };
177
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/prompts/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol.js';
3
+ import type { GetPromptResult, ListPromptsResult, ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types.js';
4
+ import type { IApiClient } from '../api-client.js';
5
+ import type { SessionManager } from '../session-manager.js';
6
+ export interface PromptContext {
7
+ apiClient: IApiClient;
8
+ sessionManager: SessionManager;
9
+ hooksManager?: any;
10
+ }
11
+ /**
12
+ * Register all prompts with the MCP server
13
+ */
14
+ export declare function registerPrompts(server: McpServer, context: PromptContext): void;
15
+ /**
16
+ * List all available prompts
17
+ */
18
+ export declare function listPrompts(): Promise<ListPromptsResult>;
19
+ /**
20
+ * Get a specific prompt by name
21
+ */
22
+ export declare function getPrompt(name: string, args: Record<string, string>, context: PromptContext, extra?: RequestHandlerExtra<ServerRequest, ServerNotification>): Promise<GetPromptResult | null>;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAgCD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAoB/E;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAc9D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,mBAAmB,CAAC,aAAa,EAAE,kBAAkB,CAAC,GAC7D,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAajC"}