@pegasusheavy/threads-mcp 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.
Files changed (44) hide show
  1. package/.cursorrules/no-summaries.mdc +1 -0
  2. package/.cursorrules/update-website.mdc +8 -0
  3. package/.husky/README.md +37 -0
  4. package/.husky/commit-msg +3 -0
  5. package/.husky/pre-commit +12 -0
  6. package/.husky/pre-push +31 -0
  7. package/CHANGELOG.md +49 -0
  8. package/LICENSE +22 -0
  9. package/README.md +336 -0
  10. package/commitlint.config.js +27 -0
  11. package/dist/client/enhanced-threads-client.d.ts +49 -0
  12. package/dist/client/enhanced-threads-client.d.ts.map +1 -0
  13. package/dist/client/enhanced-threads-client.js +175 -0
  14. package/dist/client/enhanced-threads-client.js.map +1 -0
  15. package/dist/client/threads-client.d.ts +23 -0
  16. package/dist/client/threads-client.d.ts.map +1 -0
  17. package/dist/client/threads-client.js +208 -0
  18. package/dist/client/threads-client.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +41 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/server.d.ts +10 -0
  24. package/dist/server.d.ts.map +1 -0
  25. package/dist/server.js +382 -0
  26. package/dist/server.js.map +1 -0
  27. package/dist/types/threads.d.ts +298 -0
  28. package/dist/types/threads.d.ts.map +1 -0
  29. package/dist/types/threads.js +76 -0
  30. package/dist/types/threads.js.map +1 -0
  31. package/dist/utils/cache.d.ts +42 -0
  32. package/dist/utils/cache.d.ts.map +1 -0
  33. package/dist/utils/cache.js +147 -0
  34. package/dist/utils/cache.js.map +1 -0
  35. package/dist/utils/rate-limiter.d.ts +31 -0
  36. package/dist/utils/rate-limiter.d.ts.map +1 -0
  37. package/dist/utils/rate-limiter.js +99 -0
  38. package/dist/utils/rate-limiter.js.map +1 -0
  39. package/dist/utils/webhook.d.ts +67 -0
  40. package/dist/utils/webhook.d.ts.map +1 -0
  41. package/dist/utils/webhook.js +187 -0
  42. package/dist/utils/webhook.js.map +1 -0
  43. package/llms.txt +197 -0
  44. package/package.json +65 -0
package/dist/server.js ADDED
@@ -0,0 +1,382 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
+ import { z } from 'zod';
5
+ const GetProfileSchema = z.object({
6
+ fields: z.array(z.string()).optional(),
7
+ });
8
+ const GetThreadsSchema = z.object({
9
+ limit: z.number().min(1).max(100).optional(),
10
+ fields: z.array(z.string()).optional(),
11
+ });
12
+ const GetThreadSchema = z.object({
13
+ threadId: z.string().min(1),
14
+ fields: z.array(z.string()).optional(),
15
+ });
16
+ const CreateThreadSchema = z.object({
17
+ text: z.string().optional(),
18
+ imageUrl: z.string().url().optional(),
19
+ videoUrl: z.string().url().optional(),
20
+ replyToId: z.string().optional(),
21
+ replyControl: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only']).optional(),
22
+ });
23
+ const GetInsightsSchema = z.object({
24
+ threadId: z.string().optional(),
25
+ metrics: z.array(z.string()).min(1),
26
+ since: z.number().optional(),
27
+ until: z.number().optional(),
28
+ });
29
+ const GetRepliesSchema = z.object({
30
+ threadId: z.string().min(1),
31
+ fields: z.array(z.string()).optional(),
32
+ reverse: z.boolean().optional(),
33
+ });
34
+ const GetConversationSchema = z.object({
35
+ threadId: z.string().min(1),
36
+ fields: z.array(z.string()).optional(),
37
+ reverse: z.boolean().optional(),
38
+ });
39
+ const ReplyToThreadSchema = z.object({
40
+ threadId: z.string().min(1),
41
+ text: z.string().min(1),
42
+ replyControl: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only']).optional(),
43
+ });
44
+ export class ThreadsMCPServer {
45
+ server;
46
+ client = null;
47
+ constructor() {
48
+ this.server = new Server({
49
+ name: 'threads-mcp',
50
+ version: '1.0.0',
51
+ }, {
52
+ capabilities: {
53
+ tools: {},
54
+ },
55
+ });
56
+ this.setupHandlers();
57
+ }
58
+ setupHandlers() {
59
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
60
+ const tools = [
61
+ {
62
+ name: 'threads_get_profile',
63
+ description: 'Get the authenticated user\'s Threads profile including username, name, bio, and profile picture',
64
+ inputSchema: {
65
+ type: 'object',
66
+ properties: {
67
+ fields: {
68
+ type: 'array',
69
+ items: { type: 'string' },
70
+ description: 'Optional fields to retrieve. Defaults to id, username, name, threads_profile_picture_url, threads_biography',
71
+ },
72
+ },
73
+ },
74
+ },
75
+ {
76
+ name: 'threads_get_threads',
77
+ description: 'Get the authenticated user\'s threads (posts) with pagination support',
78
+ inputSchema: {
79
+ type: 'object',
80
+ properties: {
81
+ limit: {
82
+ type: 'number',
83
+ description: 'Number of threads to retrieve (1-100, default: 25)',
84
+ minimum: 1,
85
+ maximum: 100,
86
+ },
87
+ fields: {
88
+ type: 'array',
89
+ items: { type: 'string' },
90
+ description: 'Optional fields to retrieve for each thread',
91
+ },
92
+ },
93
+ },
94
+ },
95
+ {
96
+ name: 'threads_get_thread',
97
+ description: 'Get a specific thread by its ID',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ threadId: {
102
+ type: 'string',
103
+ description: 'The ID of the thread to retrieve',
104
+ },
105
+ fields: {
106
+ type: 'array',
107
+ items: { type: 'string' },
108
+ description: 'Optional fields to retrieve',
109
+ },
110
+ },
111
+ required: ['threadId'],
112
+ },
113
+ },
114
+ {
115
+ name: 'threads_create_thread',
116
+ description: 'Create a new thread (post) with text, image, or video. Can also be used to reply to another thread.',
117
+ inputSchema: {
118
+ type: 'object',
119
+ properties: {
120
+ text: {
121
+ type: 'string',
122
+ description: 'The text content of the thread',
123
+ },
124
+ imageUrl: {
125
+ type: 'string',
126
+ description: 'URL of an image to include (must be publicly accessible)',
127
+ },
128
+ videoUrl: {
129
+ type: 'string',
130
+ description: 'URL of a video to include (must be publicly accessible)',
131
+ },
132
+ replyToId: {
133
+ type: 'string',
134
+ description: 'ID of the thread to reply to',
135
+ },
136
+ replyControl: {
137
+ type: 'string',
138
+ enum: ['everyone', 'accounts_you_follow', 'mentioned_only'],
139
+ description: 'Who can reply to this thread',
140
+ },
141
+ },
142
+ },
143
+ },
144
+ {
145
+ name: 'threads_get_insights',
146
+ description: 'Get insights (analytics) for a specific thread or for the user account',
147
+ inputSchema: {
148
+ type: 'object',
149
+ properties: {
150
+ threadId: {
151
+ type: 'string',
152
+ description: 'The ID of the thread (omit for user-level insights)',
153
+ },
154
+ metrics: {
155
+ type: 'array',
156
+ items: { type: 'string' },
157
+ description: 'Metrics to retrieve (e.g., views, likes, replies, reposts, quotes)',
158
+ },
159
+ since: {
160
+ type: 'number',
161
+ description: 'Unix timestamp for start of time range',
162
+ },
163
+ until: {
164
+ type: 'number',
165
+ description: 'Unix timestamp for end of time range',
166
+ },
167
+ },
168
+ required: ['metrics'],
169
+ },
170
+ },
171
+ {
172
+ name: 'threads_get_replies',
173
+ description: 'Get replies to a specific thread',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ threadId: {
178
+ type: 'string',
179
+ description: 'The ID of the thread',
180
+ },
181
+ fields: {
182
+ type: 'array',
183
+ items: { type: 'string' },
184
+ description: 'Optional fields to retrieve for each reply',
185
+ },
186
+ reverse: {
187
+ type: 'boolean',
188
+ description: 'Whether to reverse the order of replies',
189
+ },
190
+ },
191
+ required: ['threadId'],
192
+ },
193
+ },
194
+ {
195
+ name: 'threads_get_conversation',
196
+ description: 'Get the full conversation thread including the original post and all replies',
197
+ inputSchema: {
198
+ type: 'object',
199
+ properties: {
200
+ threadId: {
201
+ type: 'string',
202
+ description: 'The ID of the thread',
203
+ },
204
+ fields: {
205
+ type: 'array',
206
+ items: { type: 'string' },
207
+ description: 'Optional fields to retrieve',
208
+ },
209
+ reverse: {
210
+ type: 'boolean',
211
+ description: 'Whether to reverse the order',
212
+ },
213
+ },
214
+ required: ['threadId'],
215
+ },
216
+ },
217
+ {
218
+ name: 'threads_reply_to_thread',
219
+ description: 'Reply to an existing thread',
220
+ inputSchema: {
221
+ type: 'object',
222
+ properties: {
223
+ threadId: {
224
+ type: 'string',
225
+ description: 'The ID of the thread to reply to',
226
+ },
227
+ text: {
228
+ type: 'string',
229
+ description: 'The text content of the reply',
230
+ },
231
+ replyControl: {
232
+ type: 'string',
233
+ enum: ['everyone', 'accounts_you_follow', 'mentioned_only'],
234
+ description: 'Who can reply to this reply',
235
+ },
236
+ },
237
+ required: ['threadId', 'text'],
238
+ },
239
+ },
240
+ ];
241
+ return { tools };
242
+ });
243
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
244
+ if (!this.client) {
245
+ throw new Error('Threads client not initialized. Please configure access token and user ID.');
246
+ }
247
+ const { name, arguments: args } = request.params;
248
+ try {
249
+ switch (name) {
250
+ case 'threads_get_profile': {
251
+ const params = GetProfileSchema.parse(args);
252
+ const profile = await this.client.getProfile(params.fields);
253
+ return {
254
+ content: [
255
+ {
256
+ type: 'text',
257
+ text: JSON.stringify(profile, null, 2),
258
+ },
259
+ ],
260
+ };
261
+ }
262
+ case 'threads_get_threads': {
263
+ const params = GetThreadsSchema.parse(args);
264
+ const threads = await this.client.getThreads(params);
265
+ return {
266
+ content: [
267
+ {
268
+ type: 'text',
269
+ text: JSON.stringify(threads, null, 2),
270
+ },
271
+ ],
272
+ };
273
+ }
274
+ case 'threads_get_thread': {
275
+ const params = GetThreadSchema.parse(args);
276
+ const thread = await this.client.getThread(params.threadId, params.fields);
277
+ return {
278
+ content: [
279
+ {
280
+ type: 'text',
281
+ text: JSON.stringify(thread, null, 2),
282
+ },
283
+ ],
284
+ };
285
+ }
286
+ case 'threads_create_thread': {
287
+ const params = CreateThreadSchema.parse(args);
288
+ const result = await this.client.createThread(params);
289
+ return {
290
+ content: [
291
+ {
292
+ type: 'text',
293
+ text: JSON.stringify(result, null, 2),
294
+ },
295
+ ],
296
+ };
297
+ }
298
+ case 'threads_get_insights': {
299
+ const params = GetInsightsSchema.parse(args);
300
+ const insights = params.threadId
301
+ ? await this.client.getThreadInsights(params.threadId, {
302
+ metric: params.metrics,
303
+ since: params.since,
304
+ until: params.until,
305
+ })
306
+ : await this.client.getUserInsights({
307
+ metric: params.metrics,
308
+ since: params.since,
309
+ until: params.until,
310
+ });
311
+ return {
312
+ content: [
313
+ {
314
+ type: 'text',
315
+ text: JSON.stringify(insights, null, 2),
316
+ },
317
+ ],
318
+ };
319
+ }
320
+ case 'threads_get_replies': {
321
+ const params = GetRepliesSchema.parse(args);
322
+ const replies = await this.client.getReplies(params.threadId, {
323
+ fields: params.fields,
324
+ reverse: params.reverse,
325
+ });
326
+ return {
327
+ content: [
328
+ {
329
+ type: 'text',
330
+ text: JSON.stringify(replies, null, 2),
331
+ },
332
+ ],
333
+ };
334
+ }
335
+ case 'threads_get_conversation': {
336
+ const params = GetConversationSchema.parse(args);
337
+ const conversation = await this.client.getConversation(params.threadId, {
338
+ fields: params.fields,
339
+ reverse: params.reverse,
340
+ });
341
+ return {
342
+ content: [
343
+ {
344
+ type: 'text',
345
+ text: JSON.stringify(conversation, null, 2),
346
+ },
347
+ ],
348
+ };
349
+ }
350
+ case 'threads_reply_to_thread': {
351
+ const params = ReplyToThreadSchema.parse(args);
352
+ const result = await this.client.replyToThread(params.threadId, params.text, params.replyControl);
353
+ return {
354
+ content: [
355
+ {
356
+ type: 'text',
357
+ text: JSON.stringify(result, null, 2),
358
+ },
359
+ ],
360
+ };
361
+ }
362
+ default:
363
+ throw new Error(`Unknown tool: ${name}`);
364
+ }
365
+ }
366
+ catch (error) {
367
+ if (error instanceof z.ZodError) {
368
+ throw new Error(`Invalid parameters: ${JSON.stringify(error.errors)}`);
369
+ }
370
+ throw error;
371
+ }
372
+ });
373
+ }
374
+ setClient(client) {
375
+ this.client = client;
376
+ }
377
+ async run() {
378
+ const transport = new StdioServerTransport();
379
+ await this.server.connect(transport);
380
+ }
381
+ }
382
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}