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.
@@ -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.20.7",
4
- "description": "MCP server for posterly: schedule social media posts from Claude Desktop",
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,
@@ -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);
@@ -1 +1 @@
1
- export const POSTERLY_MCP_VERSION = '0.20.7';
1
+ export const POSTERLY_MCP_VERSION = '0.20.8';
@@ -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
+ };