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.
@@ -25,13 +25,17 @@ export const platformSettingsSchema = z.object({
25
25
  reel_cover_url: z.string().optional(),
26
26
  reel_thumb_offset: z.number().nonnegative().optional(),
27
27
  // X
28
- reply_settings: z.enum(['everyone', 'following', 'mentionedUsers']).optional(),
28
+ reply_settings: z.enum(['everyone', 'following', 'mentionedUsers', 'subscribers', 'verified']).optional(),
29
29
  poll: z.object({
30
30
  options: z.array(z.string()),
31
- duration_minutes: z.number().positive().optional(),
31
+ duration_minutes: z.number().positive().optional(), // X poll length in minutes
32
+ question: z.string().optional(), // LinkedIn/Telegram poll question (required for those)
33
+ duration: z.enum(['ONE_DAY', 'THREE_DAYS', 'SEVEN_DAYS', 'FOURTEEN_DAYS']).optional(), // LinkedIn poll length
34
+ allows_multiple_answers: z.boolean().optional(), // Telegram poll: allow multiple selections
32
35
  }).optional(),
33
36
  // Threads
34
- reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only']).optional(),
37
+ reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only', 'followers_only', 'parent_post_author_only']).optional(),
38
+ topic_tag: z.string().optional(), // Threads single discovery topic tag
35
39
  text_attachment: z.record(z.unknown()).optional(),
36
40
  // Facebook
37
41
  text_format_preset_id: z.string().optional(),
@@ -67,8 +71,19 @@ export const platformSettingsSchema = z.object({
67
71
  event: z.record(z.unknown()).optional(),
68
72
  offer: z.record(z.unknown()).optional(),
69
73
  cta: z.record(z.unknown()).optional(),
74
+ // YouTube
75
+ notify_subscribers: z.boolean().optional(),
76
+ add_shorts_hashtag: z.boolean().optional(),
77
+ // Telegram inline CTA buttons
78
+ buttons: z.array(z.object({ text: z.string(), url: z.string() })).optional(),
70
79
  // Bluesky
71
80
  langs: z.array(z.string()).optional(),
81
+ content_label: z.enum(['sexual', 'nudity', 'porn', 'graphic-media']).optional(), // Bluesky content warning
82
+ quote_url: z.string().optional(), // Bluesky post URL/AT-URI to quote
83
+ disable_quotes: z.boolean().optional(), // Bluesky: prevent quote-posts of this post
84
+ // tags (z.array of strings) also serve as Bluesky hidden discovery tags
85
+ // AI-content disclosure (TikTok is_aigc, X made_with_ai, YouTube containsSyntheticMedia, Pinterest ai_disclosures)
86
+ ai_generated: z.boolean().optional(),
72
87
  }).passthrough();
73
88
  export const createPostPayloadInputSchema = z.object({
74
89
  account_id: z.string().optional().describe('Social account ID (from list_accounts)'),
@@ -158,7 +173,7 @@ export const createPostTool = {
158
173
  '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' +
159
174
  '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' +
160
175
  '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' +
161
- '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' +
176
+ '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' +
162
177
  '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.',
163
178
  inputSchema: createPostInputSchema,
164
179
  async execute(client, input) {
@@ -96,18 +96,28 @@ export declare const createPostsBatchTool: {
96
96
  media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
97
97
  reel_cover_url: z.ZodOptional<z.ZodString>;
98
98
  reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
99
- reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
99
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
100
100
  poll: z.ZodOptional<z.ZodObject<{
101
101
  options: z.ZodArray<z.ZodString, "many">;
102
102
  duration_minutes: z.ZodOptional<z.ZodNumber>;
103
+ question: z.ZodOptional<z.ZodString>;
104
+ duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
105
+ allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
103
106
  }, "strip", z.ZodTypeAny, {
104
107
  options: string[];
105
108
  duration_minutes?: number | undefined;
109
+ question?: string | undefined;
110
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
111
+ allows_multiple_answers?: boolean | undefined;
106
112
  }, {
107
113
  options: string[];
108
114
  duration_minutes?: number | undefined;
115
+ question?: string | undefined;
116
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
117
+ allows_multiple_answers?: boolean | undefined;
109
118
  }>>;
110
- reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
119
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
120
+ topic_tag: z.ZodOptional<z.ZodString>;
111
121
  text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
112
122
  text_format_preset_id: z.ZodOptional<z.ZodString>;
113
123
  document_title: z.ZodOptional<z.ZodString>;
@@ -137,7 +147,23 @@ export declare const createPostsBatchTool: {
137
147
  event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
138
148
  offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
139
149
  cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
150
+ notify_subscribers: z.ZodOptional<z.ZodBoolean>;
151
+ add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
152
+ buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
153
+ text: z.ZodString;
154
+ url: z.ZodString;
155
+ }, "strip", z.ZodTypeAny, {
156
+ url: string;
157
+ text: string;
158
+ }, {
159
+ url: string;
160
+ text: string;
161
+ }>, "many">>;
140
162
  langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
163
+ content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
164
+ quote_url: z.ZodOptional<z.ZodString>;
165
+ disable_quotes: z.ZodOptional<z.ZodBoolean>;
166
+ ai_generated: z.ZodOptional<z.ZodBoolean>;
141
167
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
142
168
  __type: z.ZodOptional<z.ZodString>;
143
169
  post_type: z.ZodOptional<z.ZodString>;
@@ -145,18 +171,28 @@ export declare const createPostsBatchTool: {
145
171
  media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
146
172
  reel_cover_url: z.ZodOptional<z.ZodString>;
147
173
  reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
148
- reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
174
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
149
175
  poll: z.ZodOptional<z.ZodObject<{
150
176
  options: z.ZodArray<z.ZodString, "many">;
151
177
  duration_minutes: z.ZodOptional<z.ZodNumber>;
178
+ question: z.ZodOptional<z.ZodString>;
179
+ duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
180
+ allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
152
181
  }, "strip", z.ZodTypeAny, {
153
182
  options: string[];
154
183
  duration_minutes?: number | undefined;
184
+ question?: string | undefined;
185
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
186
+ allows_multiple_answers?: boolean | undefined;
155
187
  }, {
156
188
  options: string[];
157
189
  duration_minutes?: number | undefined;
190
+ question?: string | undefined;
191
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
192
+ allows_multiple_answers?: boolean | undefined;
158
193
  }>>;
159
- reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
194
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
195
+ topic_tag: z.ZodOptional<z.ZodString>;
160
196
  text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
161
197
  text_format_preset_id: z.ZodOptional<z.ZodString>;
162
198
  document_title: z.ZodOptional<z.ZodString>;
@@ -186,7 +222,23 @@ export declare const createPostsBatchTool: {
186
222
  event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
187
223
  offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
188
224
  cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
225
+ notify_subscribers: z.ZodOptional<z.ZodBoolean>;
226
+ add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
227
+ buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
228
+ text: z.ZodString;
229
+ url: z.ZodString;
230
+ }, "strip", z.ZodTypeAny, {
231
+ url: string;
232
+ text: string;
233
+ }, {
234
+ url: string;
235
+ text: string;
236
+ }>, "many">>;
189
237
  langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
238
+ content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
239
+ quote_url: z.ZodOptional<z.ZodString>;
240
+ disable_quotes: z.ZodOptional<z.ZodBoolean>;
241
+ ai_generated: z.ZodOptional<z.ZodBoolean>;
190
242
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
191
243
  __type: z.ZodOptional<z.ZodString>;
192
244
  post_type: z.ZodOptional<z.ZodString>;
@@ -194,18 +246,28 @@ export declare const createPostsBatchTool: {
194
246
  media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
195
247
  reel_cover_url: z.ZodOptional<z.ZodString>;
196
248
  reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
197
- reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
249
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
198
250
  poll: z.ZodOptional<z.ZodObject<{
199
251
  options: z.ZodArray<z.ZodString, "many">;
200
252
  duration_minutes: z.ZodOptional<z.ZodNumber>;
253
+ question: z.ZodOptional<z.ZodString>;
254
+ duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
255
+ allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
201
256
  }, "strip", z.ZodTypeAny, {
202
257
  options: string[];
203
258
  duration_minutes?: number | undefined;
259
+ question?: string | undefined;
260
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
261
+ allows_multiple_answers?: boolean | undefined;
204
262
  }, {
205
263
  options: string[];
206
264
  duration_minutes?: number | undefined;
265
+ question?: string | undefined;
266
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
267
+ allows_multiple_answers?: boolean | undefined;
207
268
  }>>;
208
- reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
269
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
270
+ topic_tag: z.ZodOptional<z.ZodString>;
209
271
  text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
210
272
  text_format_preset_id: z.ZodOptional<z.ZodString>;
211
273
  document_title: z.ZodOptional<z.ZodString>;
@@ -235,7 +297,23 @@ export declare const createPostsBatchTool: {
235
297
  event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
236
298
  offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
237
299
  cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
300
+ notify_subscribers: z.ZodOptional<z.ZodBoolean>;
301
+ add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
302
+ buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
303
+ text: z.ZodString;
304
+ url: z.ZodString;
305
+ }, "strip", z.ZodTypeAny, {
306
+ url: string;
307
+ text: string;
308
+ }, {
309
+ url: string;
310
+ text: string;
311
+ }>, "many">>;
238
312
  langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
313
+ content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
314
+ quote_url: z.ZodOptional<z.ZodString>;
315
+ disable_quotes: z.ZodOptional<z.ZodBoolean>;
316
+ ai_generated: z.ZodOptional<z.ZodBoolean>;
239
317
  }, z.ZodTypeAny, "passthrough">>>;
240
318
  workspace_id: z.ZodOptional<z.ZodString>;
241
319
  }, "strip", z.ZodTypeAny, {
@@ -276,18 +354,28 @@ export declare const createPostsBatchTool: {
276
354
  media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
277
355
  reel_cover_url: z.ZodOptional<z.ZodString>;
278
356
  reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
279
- reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
357
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
280
358
  poll: z.ZodOptional<z.ZodObject<{
281
359
  options: z.ZodArray<z.ZodString, "many">;
282
360
  duration_minutes: z.ZodOptional<z.ZodNumber>;
361
+ question: z.ZodOptional<z.ZodString>;
362
+ duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
363
+ allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
283
364
  }, "strip", z.ZodTypeAny, {
284
365
  options: string[];
285
366
  duration_minutes?: number | undefined;
367
+ question?: string | undefined;
368
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
369
+ allows_multiple_answers?: boolean | undefined;
286
370
  }, {
287
371
  options: string[];
288
372
  duration_minutes?: number | undefined;
373
+ question?: string | undefined;
374
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
375
+ allows_multiple_answers?: boolean | undefined;
289
376
  }>>;
290
- reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
377
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
378
+ topic_tag: z.ZodOptional<z.ZodString>;
291
379
  text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
292
380
  text_format_preset_id: z.ZodOptional<z.ZodString>;
293
381
  document_title: z.ZodOptional<z.ZodString>;
@@ -317,7 +405,23 @@ export declare const createPostsBatchTool: {
317
405
  event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
318
406
  offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
319
407
  cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
408
+ notify_subscribers: z.ZodOptional<z.ZodBoolean>;
409
+ add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
410
+ buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
411
+ text: z.ZodString;
412
+ url: z.ZodString;
413
+ }, "strip", z.ZodTypeAny, {
414
+ url: string;
415
+ text: string;
416
+ }, {
417
+ url: string;
418
+ text: string;
419
+ }>, "many">>;
320
420
  langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
421
+ content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
422
+ quote_url: z.ZodOptional<z.ZodString>;
423
+ disable_quotes: z.ZodOptional<z.ZodBoolean>;
424
+ ai_generated: z.ZodOptional<z.ZodBoolean>;
321
425
  }, z.ZodTypeAny, "passthrough"> | undefined;
322
426
  }, {
323
427
  workspace_id?: string | undefined;
@@ -357,18 +461,28 @@ export declare const createPostsBatchTool: {
357
461
  media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
358
462
  reel_cover_url: z.ZodOptional<z.ZodString>;
359
463
  reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
360
- reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
464
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
361
465
  poll: z.ZodOptional<z.ZodObject<{
362
466
  options: z.ZodArray<z.ZodString, "many">;
363
467
  duration_minutes: z.ZodOptional<z.ZodNumber>;
468
+ question: z.ZodOptional<z.ZodString>;
469
+ duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
470
+ allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
364
471
  }, "strip", z.ZodTypeAny, {
365
472
  options: string[];
366
473
  duration_minutes?: number | undefined;
474
+ question?: string | undefined;
475
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
476
+ allows_multiple_answers?: boolean | undefined;
367
477
  }, {
368
478
  options: string[];
369
479
  duration_minutes?: number | undefined;
480
+ question?: string | undefined;
481
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
482
+ allows_multiple_answers?: boolean | undefined;
370
483
  }>>;
371
- reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
484
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
485
+ topic_tag: z.ZodOptional<z.ZodString>;
372
486
  text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
373
487
  text_format_preset_id: z.ZodOptional<z.ZodString>;
374
488
  document_title: z.ZodOptional<z.ZodString>;
@@ -398,7 +512,23 @@ export declare const createPostsBatchTool: {
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"> | undefined;
403
533
  }>, "many">;
404
534
  confirm: z.ZodLiteral<true>;
@@ -442,18 +572,28 @@ export declare const createPostsBatchTool: {
442
572
  media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
443
573
  reel_cover_url: z.ZodOptional<z.ZodString>;
444
574
  reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
445
- reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
575
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
446
576
  poll: z.ZodOptional<z.ZodObject<{
447
577
  options: z.ZodArray<z.ZodString, "many">;
448
578
  duration_minutes: z.ZodOptional<z.ZodNumber>;
579
+ question: z.ZodOptional<z.ZodString>;
580
+ duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
581
+ allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
449
582
  }, "strip", z.ZodTypeAny, {
450
583
  options: string[];
451
584
  duration_minutes?: number | undefined;
585
+ question?: string | undefined;
586
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
587
+ allows_multiple_answers?: boolean | undefined;
452
588
  }, {
453
589
  options: string[];
454
590
  duration_minutes?: number | undefined;
591
+ question?: string | undefined;
592
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
593
+ allows_multiple_answers?: boolean | undefined;
455
594
  }>>;
456
- reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
595
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
596
+ topic_tag: z.ZodOptional<z.ZodString>;
457
597
  text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
458
598
  text_format_preset_id: z.ZodOptional<z.ZodString>;
459
599
  document_title: z.ZodOptional<z.ZodString>;
@@ -483,7 +623,23 @@ export declare const createPostsBatchTool: {
483
623
  event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
484
624
  offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
485
625
  cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
626
+ notify_subscribers: z.ZodOptional<z.ZodBoolean>;
627
+ add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
628
+ buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
629
+ text: z.ZodString;
630
+ url: z.ZodString;
631
+ }, "strip", z.ZodTypeAny, {
632
+ url: string;
633
+ text: string;
634
+ }, {
635
+ url: string;
636
+ text: string;
637
+ }>, "many">>;
486
638
  langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
639
+ content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
640
+ quote_url: z.ZodOptional<z.ZodString>;
641
+ disable_quotes: z.ZodOptional<z.ZodBoolean>;
642
+ ai_generated: z.ZodOptional<z.ZodBoolean>;
487
643
  }, z.ZodTypeAny, "passthrough"> | undefined;
488
644
  }[];
489
645
  }, {
@@ -526,18 +682,28 @@ export declare const createPostsBatchTool: {
526
682
  media_alt_texts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
527
683
  reel_cover_url: z.ZodOptional<z.ZodString>;
528
684
  reel_thumb_offset: z.ZodOptional<z.ZodNumber>;
529
- reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers"]>>;
685
+ reply_settings: z.ZodOptional<z.ZodEnum<["everyone", "following", "mentionedUsers", "subscribers", "verified"]>>;
530
686
  poll: z.ZodOptional<z.ZodObject<{
531
687
  options: z.ZodArray<z.ZodString, "many">;
532
688
  duration_minutes: z.ZodOptional<z.ZodNumber>;
689
+ question: z.ZodOptional<z.ZodString>;
690
+ duration: z.ZodOptional<z.ZodEnum<["ONE_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS"]>>;
691
+ allows_multiple_answers: z.ZodOptional<z.ZodBoolean>;
533
692
  }, "strip", z.ZodTypeAny, {
534
693
  options: string[];
535
694
  duration_minutes?: number | undefined;
695
+ question?: string | undefined;
696
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
697
+ allows_multiple_answers?: boolean | undefined;
536
698
  }, {
537
699
  options: string[];
538
700
  duration_minutes?: number | undefined;
701
+ question?: string | undefined;
702
+ duration?: "ONE_DAY" | "THREE_DAYS" | "SEVEN_DAYS" | "FOURTEEN_DAYS" | undefined;
703
+ allows_multiple_answers?: boolean | undefined;
539
704
  }>>;
540
- reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only"]>>;
705
+ reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
706
+ topic_tag: z.ZodOptional<z.ZodString>;
541
707
  text_attachment: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
542
708
  text_format_preset_id: z.ZodOptional<z.ZodString>;
543
709
  document_title: z.ZodOptional<z.ZodString>;
@@ -567,7 +733,23 @@ export declare const createPostsBatchTool: {
567
733
  event: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
568
734
  offer: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
569
735
  cta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
736
+ notify_subscribers: z.ZodOptional<z.ZodBoolean>;
737
+ add_shorts_hashtag: z.ZodOptional<z.ZodBoolean>;
738
+ buttons: z.ZodOptional<z.ZodArray<z.ZodObject<{
739
+ text: z.ZodString;
740
+ url: z.ZodString;
741
+ }, "strip", z.ZodTypeAny, {
742
+ url: string;
743
+ text: string;
744
+ }, {
745
+ url: string;
746
+ text: string;
747
+ }>, "many">>;
570
748
  langs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
749
+ content_label: z.ZodOptional<z.ZodEnum<["sexual", "nudity", "porn", "graphic-media"]>>;
750
+ quote_url: z.ZodOptional<z.ZodString>;
751
+ disable_quotes: z.ZodOptional<z.ZodBoolean>;
752
+ ai_generated: z.ZodOptional<z.ZodBoolean>;
571
753
  }, z.ZodTypeAny, "passthrough"> | undefined;
572
754
  }[];
573
755
  }>;
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ import type { PosterlyClient } from '../lib/api-client.js';
3
+ export declare const deleteApiKeyTool: {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: z.ZodObject<{
7
+ key_id: z.ZodString;
8
+ confirm: z.ZodLiteral<true>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ confirm: true;
11
+ key_id: string;
12
+ }, {
13
+ confirm: true;
14
+ key_id: string;
15
+ }>;
16
+ execute(client: PosterlyClient, input: {
17
+ key_id: string;
18
+ confirm: true;
19
+ }): Promise<string>;
20
+ };
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { code, mdKeyValue, mdSection, mdTitle } from '../lib/format.js';
3
+ function formatDeletedApiKey(result) {
4
+ const key = result.api_key;
5
+ return [
6
+ mdTitle(result.already_revoked ? 'API key was already revoked' : 'API key revoked'),
7
+ mdSection('Details', mdKeyValue([
8
+ ['Key ID', code(key.id)],
9
+ ['Name', key.name],
10
+ ['Prefix', code(key.key_prefix)],
11
+ ['Workspace', key.workspace_id ? code(key.workspace_id) : 'all accessible workspaces'],
12
+ ])),
13
+ ].join('\n\n');
14
+ }
15
+ export const deleteApiKeyTool = {
16
+ name: 'delete_api_key',
17
+ description: '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.',
18
+ inputSchema: z.object({
19
+ key_id: z.string().uuid().describe('API key ID to revoke. This is the API key resource ID, not the secret pst_live_ value.'),
20
+ confirm: z.literal(true).describe('Must be true after the user explicitly confirms API key revocation.'),
21
+ }),
22
+ async execute(client, input) {
23
+ const result = await client.deleteApiKey(input.key_id, { confirm: input.confirm });
24
+ return formatDeletedApiKey(result);
25
+ },
26
+ };