posterly-mcp-server 0.20.7 → 0.22.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.
- package/README.md +2 -1
- package/dist/index.js +10 -0
- package/dist/lib/api-client.d.ts +17 -0
- package/dist/lib/api-client.js +3 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/tools/create-post.d.ts +504 -36
- package/dist/tools/create-post.js +19 -4
- package/dist/tools/create-posts-batch.d.ts +196 -14
- package/dist/tools/delete-api-key.d.ts +20 -0
- package/dist/tools/delete-api-key.js +26 -0
- package/dist/tools/update-post.d.ts +224 -16
- package/dist/tools/update-post.js +11 -3
- package/package.json +2 -2
- package/src/index.ts +15 -0
- package/src/lib/api-client.ts +19 -0
- package/src/lib/version.ts +1 -1
- package/src/tools/create-post.ts +19 -4
- package/src/tools/delete-api-key.ts +31 -0
- package/src/tools/update-post.ts +11 -3
|
@@ -81,18 +81,28 @@ declare const platformSettingsSchema: z.ZodObject<{
|
|
|
81
81
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
82
82
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
83
83
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
84
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
84
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
85
85
|
poll: z.ZodOptional<z.ZodObject<{
|
|
86
86
|
options: z.ZodArray<z.ZodString, "many">;
|
|
87
87
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
88
|
+
question: z.ZodOptional<z.ZodString>;
|
|
89
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
90
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
88
91
|
}, "strip", z.ZodTypeAny, {
|
|
89
92
|
options: string[];
|
|
90
93
|
duration_minutes?: number | undefined;
|
|
94
|
+
question?: string | undefined;
|
|
95
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
96
|
+
allows_multiple_answers?: boolean | undefined;
|
|
91
97
|
}, {
|
|
92
98
|
options: string[];
|
|
93
99
|
duration_minutes?: number | undefined;
|
|
100
|
+
question?: string | undefined;
|
|
101
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
102
|
+
allows_multiple_answers?: boolean | undefined;
|
|
94
103
|
}>>;
|
|
95
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
104
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
105
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
96
106
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
97
107
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
98
108
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -121,7 +131,23 @@ declare const platformSettingsSchema: z.ZodObject<{
|
|
|
121
131
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
122
132
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
123
133
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
134
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
135
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
136
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
137
|
+
text: z.ZodString;
|
|
138
|
+
url: z.ZodString;
|
|
139
|
+
}, "strip", z.ZodTypeAny, {
|
|
140
|
+
url: string;
|
|
141
|
+
text: string;
|
|
142
|
+
}, {
|
|
143
|
+
url: string;
|
|
144
|
+
text: string;
|
|
145
|
+
}>, "many">>;
|
|
124
146
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
147
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
148
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
149
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
150
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
125
151
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
126
152
|
__type: z.ZodOptional<z.ZodString>;
|
|
127
153
|
post_type: z.ZodOptional<z.ZodString>;
|
|
@@ -129,18 +155,28 @@ declare const platformSettingsSchema: z.ZodObject<{
|
|
|
129
155
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
130
156
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
131
157
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
132
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
158
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
133
159
|
poll: z.ZodOptional<z.ZodObject<{
|
|
134
160
|
options: z.ZodArray<z.ZodString, "many">;
|
|
135
161
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
162
|
+
question: z.ZodOptional<z.ZodString>;
|
|
163
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
164
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
136
165
|
}, "strip", z.ZodTypeAny, {
|
|
137
166
|
options: string[];
|
|
138
167
|
duration_minutes?: number | undefined;
|
|
168
|
+
question?: string | undefined;
|
|
169
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
170
|
+
allows_multiple_answers?: boolean | undefined;
|
|
139
171
|
}, {
|
|
140
172
|
options: string[];
|
|
141
173
|
duration_minutes?: number | undefined;
|
|
174
|
+
question?: string | undefined;
|
|
175
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
176
|
+
allows_multiple_answers?: boolean | undefined;
|
|
142
177
|
}>>;
|
|
143
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
178
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
179
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
144
180
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
145
181
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
146
182
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -169,7 +205,23 @@ declare const platformSettingsSchema: z.ZodObject<{
|
|
|
169
205
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
170
206
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
171
207
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
208
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
209
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
210
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
211
|
+
text: z.ZodString;
|
|
212
|
+
url: z.ZodString;
|
|
213
|
+
}, "strip", z.ZodTypeAny, {
|
|
214
|
+
url: string;
|
|
215
|
+
text: string;
|
|
216
|
+
}, {
|
|
217
|
+
url: string;
|
|
218
|
+
text: string;
|
|
219
|
+
}>, "many">>;
|
|
172
220
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
221
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
222
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
223
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
224
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
173
225
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
174
226
|
__type: z.ZodOptional<z.ZodString>;
|
|
175
227
|
post_type: z.ZodOptional<z.ZodString>;
|
|
@@ -177,18 +229,28 @@ declare const platformSettingsSchema: z.ZodObject<{
|
|
|
177
229
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
178
230
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
179
231
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
180
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
232
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
181
233
|
poll: z.ZodOptional<z.ZodObject<{
|
|
182
234
|
options: z.ZodArray<z.ZodString, "many">;
|
|
183
235
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
236
|
+
question: z.ZodOptional<z.ZodString>;
|
|
237
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
238
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
184
239
|
}, "strip", z.ZodTypeAny, {
|
|
185
240
|
options: string[];
|
|
186
241
|
duration_minutes?: number | undefined;
|
|
242
|
+
question?: string | undefined;
|
|
243
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
244
|
+
allows_multiple_answers?: boolean | undefined;
|
|
187
245
|
}, {
|
|
188
246
|
options: string[];
|
|
189
247
|
duration_minutes?: number | undefined;
|
|
248
|
+
question?: string | undefined;
|
|
249
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
250
|
+
allows_multiple_answers?: boolean | undefined;
|
|
190
251
|
}>>;
|
|
191
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
252
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
253
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
192
254
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
193
255
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
194
256
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -217,7 +279,23 @@ declare const platformSettingsSchema: z.ZodObject<{
|
|
|
217
279
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
218
280
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
219
281
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
282
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
283
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
284
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
285
|
+
text: z.ZodString;
|
|
286
|
+
url: z.ZodString;
|
|
287
|
+
}, "strip", z.ZodTypeAny, {
|
|
288
|
+
url: string;
|
|
289
|
+
text: string;
|
|
290
|
+
}, {
|
|
291
|
+
url: string;
|
|
292
|
+
text: string;
|
|
293
|
+
}>, "many">>;
|
|
220
294
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
295
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
296
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
297
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
298
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
221
299
|
}, z.ZodTypeAny, "passthrough">>;
|
|
222
300
|
export declare const updatePostTool: {
|
|
223
301
|
name: string;
|
|
@@ -310,18 +388,28 @@ export declare const updatePostTool: {
|
|
|
310
388
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
311
389
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
312
390
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
313
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
391
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
314
392
|
poll: z.ZodOptional<z.ZodObject<{
|
|
315
393
|
options: z.ZodArray<z.ZodString, "many">;
|
|
316
394
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
395
|
+
question: z.ZodOptional<z.ZodString>;
|
|
396
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
397
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
317
398
|
}, "strip", z.ZodTypeAny, {
|
|
318
399
|
options: string[];
|
|
319
400
|
duration_minutes?: number | undefined;
|
|
401
|
+
question?: string | undefined;
|
|
402
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
403
|
+
allows_multiple_answers?: boolean | undefined;
|
|
320
404
|
}, {
|
|
321
405
|
options: string[];
|
|
322
406
|
duration_minutes?: number | undefined;
|
|
407
|
+
question?: string | undefined;
|
|
408
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
409
|
+
allows_multiple_answers?: boolean | undefined;
|
|
323
410
|
}>>;
|
|
324
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
411
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
412
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
325
413
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
326
414
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
327
415
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -350,7 +438,23 @@ export declare const updatePostTool: {
|
|
|
350
438
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
351
439
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
352
440
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
441
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
442
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
443
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
444
|
+
text: z.ZodString;
|
|
445
|
+
url: z.ZodString;
|
|
446
|
+
}, "strip", z.ZodTypeAny, {
|
|
447
|
+
url: string;
|
|
448
|
+
text: string;
|
|
449
|
+
}, {
|
|
450
|
+
url: string;
|
|
451
|
+
text: string;
|
|
452
|
+
}>, "many">>;
|
|
353
453
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
454
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
455
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
456
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
457
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
354
458
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
355
459
|
__type: z.ZodOptional<z.ZodString>;
|
|
356
460
|
post_type: z.ZodOptional<z.ZodString>;
|
|
@@ -358,18 +462,28 @@ export declare const updatePostTool: {
|
|
|
358
462
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
359
463
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
360
464
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
361
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
465
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
362
466
|
poll: z.ZodOptional<z.ZodObject<{
|
|
363
467
|
options: z.ZodArray<z.ZodString, "many">;
|
|
364
468
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
469
|
+
question: z.ZodOptional<z.ZodString>;
|
|
470
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
471
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
365
472
|
}, "strip", z.ZodTypeAny, {
|
|
366
473
|
options: string[];
|
|
367
474
|
duration_minutes?: number | undefined;
|
|
475
|
+
question?: string | undefined;
|
|
476
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
477
|
+
allows_multiple_answers?: boolean | undefined;
|
|
368
478
|
}, {
|
|
369
479
|
options: string[];
|
|
370
480
|
duration_minutes?: number | undefined;
|
|
481
|
+
question?: string | undefined;
|
|
482
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
483
|
+
allows_multiple_answers?: boolean | undefined;
|
|
371
484
|
}>>;
|
|
372
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
485
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
486
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
373
487
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
374
488
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
375
489
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -398,7 +512,23 @@ export declare const updatePostTool: {
|
|
|
398
512
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
399
513
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
400
514
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
515
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
516
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
517
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
518
|
+
text: z.ZodString;
|
|
519
|
+
url: z.ZodString;
|
|
520
|
+
}, "strip", z.ZodTypeAny, {
|
|
521
|
+
url: string;
|
|
522
|
+
text: string;
|
|
523
|
+
}, {
|
|
524
|
+
url: string;
|
|
525
|
+
text: string;
|
|
526
|
+
}>, "many">>;
|
|
401
527
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
528
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
529
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
530
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
531
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
402
532
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
403
533
|
__type: z.ZodOptional<z.ZodString>;
|
|
404
534
|
post_type: z.ZodOptional<z.ZodString>;
|
|
@@ -406,18 +536,28 @@ export declare const updatePostTool: {
|
|
|
406
536
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
407
537
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
408
538
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
409
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
539
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
410
540
|
poll: z.ZodOptional<z.ZodObject<{
|
|
411
541
|
options: z.ZodArray<z.ZodString, "many">;
|
|
412
542
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
543
|
+
question: z.ZodOptional<z.ZodString>;
|
|
544
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
545
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
413
546
|
}, "strip", z.ZodTypeAny, {
|
|
414
547
|
options: string[];
|
|
415
548
|
duration_minutes?: number | undefined;
|
|
549
|
+
question?: string | undefined;
|
|
550
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
551
|
+
allows_multiple_answers?: boolean | undefined;
|
|
416
552
|
}, {
|
|
417
553
|
options: string[];
|
|
418
554
|
duration_minutes?: number | undefined;
|
|
555
|
+
question?: string | undefined;
|
|
556
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
557
|
+
allows_multiple_answers?: boolean | undefined;
|
|
419
558
|
}>>;
|
|
420
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
559
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
560
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
421
561
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
422
562
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
423
563
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -446,7 +586,23 @@ export declare const updatePostTool: {
|
|
|
446
586
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
447
587
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
448
588
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
589
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
590
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
591
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
592
|
+
text: z.ZodString;
|
|
593
|
+
url: z.ZodString;
|
|
594
|
+
}, "strip", z.ZodTypeAny, {
|
|
595
|
+
url: string;
|
|
596
|
+
text: string;
|
|
597
|
+
}, {
|
|
598
|
+
url: string;
|
|
599
|
+
text: string;
|
|
600
|
+
}>, "many">>;
|
|
449
601
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
602
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
603
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
604
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
605
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
450
606
|
}, z.ZodTypeAny, "passthrough">>>;
|
|
451
607
|
confirm: z.ZodLiteral<true>;
|
|
452
608
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -484,18 +640,28 @@ export declare const updatePostTool: {
|
|
|
484
640
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
485
641
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
486
642
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
487
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
643
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
488
644
|
poll: z.ZodOptional<z.ZodObject<{
|
|
489
645
|
options: z.ZodArray<z.ZodString, "many">;
|
|
490
646
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
647
|
+
question: z.ZodOptional<z.ZodString>;
|
|
648
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
649
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
491
650
|
}, "strip", z.ZodTypeAny, {
|
|
492
651
|
options: string[];
|
|
493
652
|
duration_minutes?: number | undefined;
|
|
653
|
+
question?: string | undefined;
|
|
654
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
655
|
+
allows_multiple_answers?: boolean | undefined;
|
|
494
656
|
}, {
|
|
495
657
|
options: string[];
|
|
496
658
|
duration_minutes?: number | undefined;
|
|
659
|
+
question?: string | undefined;
|
|
660
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
661
|
+
allows_multiple_answers?: boolean | undefined;
|
|
497
662
|
}>>;
|
|
498
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
663
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
664
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
499
665
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
500
666
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
501
667
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -524,7 +690,23 @@ export declare const updatePostTool: {
|
|
|
524
690
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
525
691
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
526
692
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
693
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
694
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
695
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
696
|
+
text: z.ZodString;
|
|
697
|
+
url: z.ZodString;
|
|
698
|
+
}, "strip", z.ZodTypeAny, {
|
|
699
|
+
url: string;
|
|
700
|
+
text: string;
|
|
701
|
+
}, {
|
|
702
|
+
url: string;
|
|
703
|
+
text: string;
|
|
704
|
+
}>, "many">>;
|
|
527
705
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
706
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
707
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
708
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
709
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
528
710
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
529
711
|
}, {
|
|
530
712
|
post_id: number;
|
|
@@ -561,18 +743,28 @@ export declare const updatePostTool: {
|
|
|
561
743
|
media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
562
744
|
reel_cover_url: z.ZodOptional<z.ZodString>;
|
|
563
745
|
reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
|
|
564
|
-
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
|
|
746
|
+
reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
|
|
565
747
|
poll: z.ZodOptional<z.ZodObject<{
|
|
566
748
|
options: z.ZodArray<z.ZodString, "many">;
|
|
567
749
|
duration_minutes: z.ZodOptional<z.ZodNumber>;
|
|
750
|
+
question: z.ZodOptional<z.ZodString>;
|
|
751
|
+
duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
|
|
752
|
+
allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
|
|
568
753
|
}, "strip", z.ZodTypeAny, {
|
|
569
754
|
options: string[];
|
|
570
755
|
duration_minutes?: number | undefined;
|
|
756
|
+
question?: string | undefined;
|
|
757
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
758
|
+
allows_multiple_answers?: boolean | undefined;
|
|
571
759
|
}, {
|
|
572
760
|
options: string[];
|
|
573
761
|
duration_minutes?: number | undefined;
|
|
762
|
+
question?: string | undefined;
|
|
763
|
+
duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
|
|
764
|
+
allows_multiple_answers?: boolean | undefined;
|
|
574
765
|
}>>;
|
|
575
|
-
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
|
|
766
|
+
reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
|
|
767
|
+
topic_tag: z.ZodOptional<z.ZodString>;
|
|
576
768
|
text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
577
769
|
text_format_preset_id: z.ZodOptional<z.ZodString>;
|
|
578
770
|
document_title: z.ZodOptional<z.ZodString>;
|
|
@@ -601,7 +793,23 @@ export declare const updatePostTool: {
|
|
|
601
793
|
event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
602
794
|
offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
603
795
|
cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
796
|
+
notify_subscribers: z.ZodOptional<z.ZodBoolean>;
|
|
797
|
+
add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
|
|
798
|
+
buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
799
|
+
text: z.ZodString;
|
|
800
|
+
url: z.ZodString;
|
|
801
|
+
}, "strip", z.ZodTypeAny, {
|
|
802
|
+
url: string;
|
|
803
|
+
text: string;
|
|
804
|
+
}, {
|
|
805
|
+
url: string;
|
|
806
|
+
text: string;
|
|
807
|
+
}>, "many">>;
|
|
604
808
|
langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
809
|
+
content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
|
|
810
|
+
quote_url: z.ZodOptional<z.ZodString>;
|
|
811
|
+
disable_quotes: z.ZodOptional<z.ZodBoolean>;
|
|
812
|
+
ai_generated: z.ZodOptional<z.ZodBoolean>;
|
|
605
813
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
606
814
|
}>;
|
|
607
815
|
execute(client: PosterlyClient, input: {
|
|
@@ -23,9 +23,10 @@ const platformSettingsSchema = z.object({
|
|
|
23
23
|
media_alt_texts: z.record(z.string()).optional(),
|
|
24
24
|
reel_cover_url: z.string().optional(),
|
|
25
25
|
reel_thumb_offset: z.number().nonnegative().optional(),
|
|
26
|
-
reply_settings: z.enum(['everyone', 'following', 'mentionedUsers']).optional(),
|
|
27
|
-
poll: z.object({ options: z.array(z.string()), duration_minutes: z.number().positive().optional() }).optional(),
|
|
28
|
-
reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only']).optional(),
|
|
26
|
+
reply_settings: z.enum(['everyone', 'following', 'mentionedUsers', 'subscribers', 'verified']).optional(),
|
|
27
|
+
poll: z.object({ options: z.array(z.string()), duration_minutes: z.number().positive().optional(), question: z.string().optional(), duration: z.enum(['ONE_DAY', 'THREE_DAYS', 'SEVEN_DAYS', 'FOURTEEN_DAYS']).optional(), allows_multiple_answers: z.boolean().optional() }).optional(),
|
|
28
|
+
reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only', 'followers_only', 'parent_post_author_only']).optional(),
|
|
29
|
+
topic_tag: z.string().optional(),
|
|
29
30
|
text_attachment: z.record(z.unknown()).optional(),
|
|
30
31
|
text_format_preset_id: z.string().optional(),
|
|
31
32
|
document_title: z.string().optional(),
|
|
@@ -54,7 +55,14 @@ const platformSettingsSchema = z.object({
|
|
|
54
55
|
event: z.record(z.unknown()).optional(),
|
|
55
56
|
offer: z.record(z.unknown()).optional(),
|
|
56
57
|
cta: z.record(z.unknown()).optional(),
|
|
58
|
+
notify_subscribers: z.boolean().optional(),
|
|
59
|
+
add_shorts_hashtag: z.boolean().optional(),
|
|
60
|
+
buttons: z.array(z.object({ text: z.string(), url: z.string() })).optional(),
|
|
57
61
|
langs: z.array(z.string()).optional(),
|
|
62
|
+
content_label: z.enum(['sexual', 'nudity', 'porn', 'graphic-media']).optional(),
|
|
63
|
+
quote_url: z.string().optional(),
|
|
64
|
+
disable_quotes: z.boolean().optional(),
|
|
65
|
+
ai_generated: z.boolean().optional(),
|
|
58
66
|
}).passthrough();
|
|
59
67
|
export const updatePostTool = {
|
|
60
68
|
name: 'update_post',
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "posterly-mcp-server",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for posterly: schedule social media posts from Claude
|
|
3
|
+
"version": "0.22.0",
|
|
4
|
+
"description": "MCP server for posterly: schedule and publish social media posts across 11 platforms from any MCP client (Claude, ChatGPT, Cursor, Windsurf, Cline, and more)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://www.poster.ly/mcp",
|
|
7
7
|
"repository": {
|
package/src/index.ts
CHANGED
|
@@ -58,6 +58,7 @@ import { getConnectLinkTool } from './tools/get-connect-link.js';
|
|
|
58
58
|
import { createConnectSessionTool } from './tools/create-connect-session.js';
|
|
59
59
|
import { getConnectSessionTool } from './tools/get-connect-session.js';
|
|
60
60
|
import { createApiKeyTool } from './tools/create-api-key.js';
|
|
61
|
+
import { deleteApiKeyTool } from './tools/delete-api-key.js';
|
|
61
62
|
import { listOAuthClientsTool } from './tools/list-oauth-clients.js';
|
|
62
63
|
import { createOAuthClientTool } from './tools/create-oauth-client.js';
|
|
63
64
|
import { updateOAuthClientTool } from './tools/update-oauth-client.js';
|
|
@@ -225,6 +226,20 @@ server.tool(
|
|
|
225
226
|
}
|
|
226
227
|
);
|
|
227
228
|
|
|
229
|
+
server.tool(
|
|
230
|
+
deleteApiKeyTool.name,
|
|
231
|
+
deleteApiKeyTool.description,
|
|
232
|
+
deleteApiKeyTool.inputSchema.shape,
|
|
233
|
+
async (input) => {
|
|
234
|
+
try {
|
|
235
|
+
const text = await deleteApiKeyTool.execute(client, input as any);
|
|
236
|
+
return { content: [{ type: 'text' as const, text }] };
|
|
237
|
+
} catch (err: any) {
|
|
238
|
+
return { content: [{ type: 'text' as const, text: `Error: ${err.message}` }], isError: true };
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
|
|
228
243
|
server.tool(
|
|
229
244
|
listOAuthClientsTool.name,
|
|
230
245
|
listOAuthClientsTool.description,
|
package/src/lib/api-client.ts
CHANGED
|
@@ -200,6 +200,21 @@ export type CreateApiKeyResponse = {
|
|
|
200
200
|
};
|
|
201
201
|
};
|
|
202
202
|
|
|
203
|
+
export type DeleteApiKeyResponse = {
|
|
204
|
+
revoked: true;
|
|
205
|
+
already_revoked: boolean;
|
|
206
|
+
api_key: {
|
|
207
|
+
id: string;
|
|
208
|
+
name: string;
|
|
209
|
+
key_prefix: string;
|
|
210
|
+
scopes: ApiKeyScope[];
|
|
211
|
+
workspace_id?: string | null;
|
|
212
|
+
expires_at?: string | null;
|
|
213
|
+
created_at: string;
|
|
214
|
+
is_revoked?: boolean;
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
|
|
203
218
|
export type AskSupportResponse = {
|
|
204
219
|
success: boolean;
|
|
205
220
|
workspace_id: string;
|
|
@@ -734,6 +749,10 @@ export class PosterlyClient {
|
|
|
734
749
|
return this.request('POST', '/api-keys', data);
|
|
735
750
|
}
|
|
736
751
|
|
|
752
|
+
async deleteApiKey(keyId: string, data: { confirm: true }): Promise<DeleteApiKeyResponse> {
|
|
753
|
+
return this.request('DELETE', `/api-keys/${encodeURIComponent(keyId)}`, data);
|
|
754
|
+
}
|
|
755
|
+
|
|
737
756
|
async listAccounts(params?: { workspace_id?: string }): Promise<Account[]> {
|
|
738
757
|
const searchParams = new URLSearchParams();
|
|
739
758
|
if (params?.workspace_id) searchParams.set('workspace_id', params.workspace_id);
|
package/src/lib/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const POSTERLY_MCP_VERSION = '0.20.
|
|
1
|
+
export const POSTERLY_MCP_VERSION = '0.20.8';
|
package/src/tools/create-post.ts
CHANGED
|
@@ -28,13 +28,17 @@ export const platformSettingsSchema = z.object({
|
|
|
28
28
|
reel_cover_url: z.string().optional(),
|
|
29
29
|
reel_thumb_offset: z.number().nonnegative().optional(),
|
|
30
30
|
// X
|
|
31
|
-
reply_settings: z.enum(['everyone', 'following', 'mentionedUsers']).optional(),
|
|
31
|
+
reply_settings: z.enum(['everyone', 'following', 'mentionedUsers', 'subscribers', 'verified']).optional(),
|
|
32
32
|
poll: z.object({
|
|
33
33
|
options: z.array(z.string()),
|
|
34
|
-
duration_minutes: z.number().positive().optional(),
|
|
34
|
+
duration_minutes: z.number().positive().optional(), // X poll length in minutes
|
|
35
|
+
question: z.string().optional(), // LinkedIn/Telegram poll question (required for those)
|
|
36
|
+
duration: z.enum(['ONE_DAY', 'THREE_DAYS', 'SEVEN_DAYS', 'FOURTEEN_DAYS']).optional(), // LinkedIn poll length
|
|
37
|
+
allows_multiple_answers: z.boolean().optional(), // Telegram poll: allow multiple selections
|
|
35
38
|
}).optional(),
|
|
36
39
|
// Threads
|
|
37
|
-
reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only']).optional(),
|
|
40
|
+
reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only', 'followers_only', 'parent_post_author_only']).optional(),
|
|
41
|
+
topic_tag: z.string().optional(), // Threads single discovery topic tag
|
|
38
42
|
text_attachment: z.record(z.unknown()).optional(),
|
|
39
43
|
// Facebook
|
|
40
44
|
text_format_preset_id: z.string().optional(),
|
|
@@ -70,8 +74,19 @@ export const platformSettingsSchema = z.object({
|
|
|
70
74
|
event: z.record(z.unknown()).optional(),
|
|
71
75
|
offer: z.record(z.unknown()).optional(),
|
|
72
76
|
cta: z.record(z.unknown()).optional(),
|
|
77
|
+
// YouTube
|
|
78
|
+
notify_subscribers: z.boolean().optional(),
|
|
79
|
+
add_shorts_hashtag: z.boolean().optional(),
|
|
80
|
+
// Telegram inline CTA buttons
|
|
81
|
+
buttons: z.array(z.object({ text: z.string(), url: z.string() })).optional(),
|
|
73
82
|
// Bluesky
|
|
74
83
|
langs: z.array(z.string()).optional(),
|
|
84
|
+
content_label: z.enum(['sexual', 'nudity', 'porn', 'graphic-media']).optional(), // Bluesky content warning
|
|
85
|
+
quote_url: z.string().optional(), // Bluesky post URL/AT-URI to quote
|
|
86
|
+
disable_quotes: z.boolean().optional(), // Bluesky: prevent quote-posts of this post
|
|
87
|
+
// tags (z.array of strings) also serve as Bluesky hidden discovery tags
|
|
88
|
+
// AI-content disclosure (TikTok is_aigc, X made_with_ai, YouTube containsSyntheticMedia, Pinterest ai_disclosures)
|
|
89
|
+
ai_generated: z.boolean().optional(),
|
|
75
90
|
}).passthrough();
|
|
76
91
|
|
|
77
92
|
export const createPostPayloadInputSchema = z.object({
|
|
@@ -174,7 +189,7 @@ export const createPostTool = {
|
|
|
174
189
|
'Provide either account_id OR username+platform to identify the account. If scheduled_at is omitted, the post publishes immediately. If workspace_id is omitted, the server resolves one from the social account, falling back to the caller\'s default (personal) workspace - pass workspace_id explicitly if the user has more than one workspace.\n\n' +
|
|
175
190
|
'MEDIA URLS: Posterly storage URLs are used as-is. Third-party HTTP(S) media URLs are copied into Posterly storage before the post is saved, so API-created posts do not later fail on expired signed URLs. Short-lived signed URLs must still be live when this tool runs. You can also call `upload_media_from_url` first if you want to upload once and reuse the returned Posterly URL across posts.\n\n' +
|
|
176
191
|
'THREADS: Pass `thread_posts` (an array of 2+ strings) to schedule a multi-post thread on X (Twitter) or Threads (Meta). The first entry is the lead post; the rest are published as replies in the same chain. X entries are capped at 280 characters each (4000 for verified, 25000 for organization accounts); Threads entries are capped at 500 characters each. When `thread_posts` is set, `caption` is ignored.\n\n' +
|
|
177
|
-
'PLATFORM SETTINGS: Pass `platform_settings` for composer-equivalent controls: Facebook story/reel/backgrounds, YouTube title/privacy/thumbnail/playlist, LinkedIn document titles/mentions/video thumbnails, TikTok direct-post privacy/toggles/commercial disclosure, Pinterest post_type (image/video/carousel), board (from pinterest.boards helper), title, link, and cover_image_url (video Pins), GBP event/offer/CTA, X reply settings/polls, Threads reply controls/text attachments, Bluesky languages/alt text, and Instagram feed/story/reel/carousel/collaborators/first comments/trial Reels. `instagram_settings` remains as a backwards-compatible alias.\n\n' +
|
|
192
|
+
'PLATFORM SETTINGS: Pass `platform_settings` for composer-equivalent controls: Facebook story/reel/backgrounds, YouTube title/privacy/thumbnail/playlist, LinkedIn document titles/mentions/polls (poll.question, poll.options 2-4, poll.duration ONE_DAY|THREE_DAYS|SEVEN_DAYS|FOURTEEN_DAYS; text-only)/video thumbnails, TikTok direct-post privacy/toggles/commercial disclosure, Pinterest post_type (image/video/carousel), board (from pinterest.boards helper), title, link, and cover_image_url (video Pins), GBP event/offer/CTA, X reply settings/polls, Threads reply controls/text attachments, Bluesky languages/alt text, and Instagram feed/story/reel/carousel/collaborators/first comments/trial Reels. `instagram_settings` remains as a backwards-compatible alias.\n\n' +
|
|
178
193
|
'TIKTOK MEDIA: TikTok supports a single video or a photo slideshow of 1 to 35 images, never multiple videos. Image media auto-detects as a slideshow, so you usually do not set post_type or media_type for photos and every image is posted. Pass `platform_settings.media_type: "PHOTO"` to force a slideshow explicitly.',
|
|
179
194
|
inputSchema: createPostInputSchema,
|
|
180
195
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { DeleteApiKeyResponse, PosterlyClient } from '../lib/api-client.js';
|
|
3
|
+
import { code, mdKeyValue, mdSection, mdTitle } from '../lib/format.js';
|
|
4
|
+
|
|
5
|
+
function formatDeletedApiKey(result: DeleteApiKeyResponse): string {
|
|
6
|
+
const key = result.api_key;
|
|
7
|
+
return [
|
|
8
|
+
mdTitle(result.already_revoked ? 'API key was already revoked' : 'API key revoked'),
|
|
9
|
+
mdSection('Details', mdKeyValue([
|
|
10
|
+
['Key ID', code(key.id)],
|
|
11
|
+
['Name', key.name],
|
|
12
|
+
['Prefix', code(key.key_prefix)],
|
|
13
|
+
['Workspace', key.workspace_id ? code(key.workspace_id) : 'all accessible workspaces'],
|
|
14
|
+
])),
|
|
15
|
+
].join('\n\n');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const deleteApiKeyTool = {
|
|
19
|
+
name: 'delete_api_key',
|
|
20
|
+
description:
|
|
21
|
+
'Revoke a Posterly API key owned by the authenticated user. DESTRUCTIVE: call whoami or use a known key ID, show the user the exact key ID/prefix/name if available, and get explicit confirmation before calling. Cannot revoke the key currently authenticating this request, OAuth-issued keys, or managed assistant keys.',
|
|
22
|
+
inputSchema: z.object({
|
|
23
|
+
key_id: z.string().uuid().describe('API key ID to revoke. This is the API key resource ID, not the secret pst_live_ value.'),
|
|
24
|
+
confirm: z.literal(true).describe('Must be true after the user explicitly confirms API key revocation.'),
|
|
25
|
+
}),
|
|
26
|
+
|
|
27
|
+
async execute(client: PosterlyClient, input: { key_id: string; confirm: true }) {
|
|
28
|
+
const result = await client.deleteApiKey(input.key_id, { confirm: input.confirm });
|
|
29
|
+
return formatDeletedApiKey(result);
|
|
30
|
+
},
|
|
31
|
+
};
|