posterly-mcp-server 0.50.4 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -2
  3. package/dist/lib/version.d.ts +1 -1
  4. package/dist/lib/version.js +1 -1
  5. package/dist/tools/create-post.d.ts +180 -0
  6. package/dist/tools/create-post.js +5 -0
  7. package/dist/tools/create-posts-batch.d.ts +70 -0
  8. package/dist/tools/manage-google-business-media.js +1 -1
  9. package/dist/tools/update-post.d.ts +80 -0
  10. package/dist/tools/update-post.js +1 -0
  11. package/dist/tools/validate-post.d.ts +100 -0
  12. package/package.json +11 -4
  13. package/server.json +4 -5
  14. package/RELEASING.md +0 -115
  15. package/SUBMISSIONS.md +0 -109
  16. package/scripts/test-alias-transport.mjs +0 -368
  17. package/scripts/test-claude-directory-profile.mjs +0 -38
  18. package/scripts/test-client-header-sanitization.mjs +0 -78
  19. package/scripts/test-payload-builders.mjs +0 -210
  20. package/scripts/test-tool-annotations.mjs +0 -68
  21. package/src/generated/platform-manifest.ts +0 -753
  22. package/src/index.ts +0 -291
  23. package/src/lib/alias-transport.ts +0 -245
  24. package/src/lib/api-client.ts +0 -2638
  25. package/src/lib/claude-directory-profile.ts +0 -94
  26. package/src/lib/format.ts +0 -446
  27. package/src/lib/preview-token-core.ts +0 -157
  28. package/src/lib/preview-token.ts +0 -54
  29. package/src/lib/tool-annotations.ts +0 -47
  30. package/src/lib/tool-registry.ts +0 -538
  31. package/src/lib/tool-runtime.ts +0 -117
  32. package/src/lib/version.ts +0 -8
  33. package/src/tools/ask-support.ts +0 -55
  34. package/src/tools/audit-google-business-profile.ts +0 -57
  35. package/src/tools/cancel-subscription.ts +0 -50
  36. package/src/tools/connect-account.ts +0 -91
  37. package/src/tools/create-api-key.ts +0 -41
  38. package/src/tools/create-connect-session.ts +0 -55
  39. package/src/tools/create-media-drop.ts +0 -41
  40. package/src/tools/create-post.ts +0 -430
  41. package/src/tools/create-posts-batch.ts +0 -80
  42. package/src/tools/create-signed-upload.ts +0 -29
  43. package/src/tools/create-webhook.ts +0 -34
  44. package/src/tools/delete-api-key.ts +0 -31
  45. package/src/tools/delete-post.ts +0 -86
  46. package/src/tools/disconnect-account.ts +0 -30
  47. package/src/tools/dismiss-suggestion.ts +0 -22
  48. package/src/tools/downgrade-subscription.ts +0 -29
  49. package/src/tools/find-slot.ts +0 -101
  50. package/src/tools/generate-captions.ts +0 -77
  51. package/src/tools/generate-image.ts +0 -108
  52. package/src/tools/generate-video.ts +0 -45
  53. package/src/tools/get-agent-signup-info.ts +0 -47
  54. package/src/tools/get-credits.ts +0 -38
  55. package/src/tools/get-post.ts +0 -49
  56. package/src/tools/get-signup-session.ts +0 -100
  57. package/src/tools/get-subscription.ts +0 -31
  58. package/src/tools/get-updates.ts +0 -55
  59. package/src/tools/get-video-options.ts +0 -30
  60. package/src/tools/get-x-posting-quota.ts +0 -25
  61. package/src/tools/list-accounts.ts +0 -202
  62. package/src/tools/list-activity.ts +0 -65
  63. package/src/tools/list-analytics.ts +0 -447
  64. package/src/tools/list-brands.ts +0 -175
  65. package/src/tools/list-comments.ts +0 -125
  66. package/src/tools/list-conversations.ts +0 -119
  67. package/src/tools/list-google-business-media.ts +0 -33
  68. package/src/tools/list-google-business-reviews.ts +0 -165
  69. package/src/tools/list-jobs.ts +0 -91
  70. package/src/tools/list-media.ts +0 -69
  71. package/src/tools/list-oauth-clients.ts +0 -18
  72. package/src/tools/list-platforms.ts +0 -149
  73. package/src/tools/list-post-suggestions.ts +0 -69
  74. package/src/tools/list-posts.ts +0 -120
  75. package/src/tools/list-publishing-pauses.ts +0 -98
  76. package/src/tools/list-webhooks.ts +0 -29
  77. package/src/tools/list-workspace-members.ts +0 -75
  78. package/src/tools/manage-comment.ts +0 -142
  79. package/src/tools/manage-conversation.ts +0 -89
  80. package/src/tools/manage-google-business-media.ts +0 -147
  81. package/src/tools/manage-google-business-review.ts +0 -139
  82. package/src/tools/manage-oauth-client.ts +0 -116
  83. package/src/tools/manage-publishing-pause.ts +0 -62
  84. package/src/tools/manage-webhook.ts +0 -103
  85. package/src/tools/manage-workspace-member.ts +0 -163
  86. package/src/tools/pause-subscription.ts +0 -26
  87. package/src/tools/resume-subscription.ts +0 -15
  88. package/src/tools/run-video-function.ts +0 -32
  89. package/src/tools/start-signup.ts +0 -150
  90. package/src/tools/submit-agent-feedback.ts +0 -47
  91. package/src/tools/submit-product-feedback.ts +0 -56
  92. package/src/tools/trigger-platform-helper.ts +0 -34
  93. package/src/tools/update-post.ts +0 -334
  94. package/src/tools/upload-media.ts +0 -107
  95. package/src/tools/validate-post.ts +0 -42
  96. package/src/tools/webhook-events.ts +0 -20
  97. package/src/tools/whoami.ts +0 -262
  98. package/tsconfig.json +0 -14
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Grassroots Marketing LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -25,7 +25,7 @@ Posterly also exposes the same authenticated toolset over HTTP at [poster.ly/mcp
25
25
  - Agent reference: `https://www.poster.ly/llms-full.txt`
26
26
  - Signup and API-key acquisition: `https://www.poster.ly/agents/signup`
27
27
  - Smithery: `https://smithery.ai/servers/awpthorp/posterly`
28
- - Source: `https://github.com/awpthorp/posterly/tree/main/mcp-server`
28
+ - Source: `https://github.com/awpthorp/posterly-mcp-server`
29
29
 
30
30
  The official MCP Registry metadata is in `server.json`. Its canonical registry
31
31
  name is `io.github.awpthorp/posterly`, matching this package's `mcpName`.
@@ -123,7 +123,7 @@ Add the same server definition to your Cursor MCP settings:
123
123
 
124
124
  ## Available tools
125
125
 
126
- `posterly-mcp-server@0.50.4` exposes 64 tools covering 100 actions. The hosted HTTP endpoint exposes the same catalog minus the three signup tools: 61 tools covering 97 actions.
126
+ `posterly-mcp-server@0.51.0` exposes 64 tools covering 100 actions. The hosted HTTP endpoint exposes the same catalog minus the three signup tools: 61 tools covering 97 actions.
127
127
 
128
128
  Many tools pick what to do with one parameter: `view` (reads), `action` (writes), or `type`. A few pick their mode from which parameters you pass (for example `update_post` with `status` changes the status instead of editing). Every tool description names all of its views and actions.
129
129
 
@@ -1 +1 @@
1
- export declare const POSTERLY_MCP_VERSION = "0.50.4";
1
+ export declare const POSTERLY_MCP_VERSION = "0.51.0";
@@ -5,4 +5,4 @@
5
5
  // tool set (minus the intentional pre-auth signup tools that only this stdio
6
6
  // package exposes). `npm run check:mcp-parity` enforces both the version match
7
7
  // and the tool-list match, and runs in the pre-commit hook.
8
- export const POSTERLY_MCP_VERSION = '0.50.4';
8
+ export const POSTERLY_MCP_VERSION = '0.51.0';
@@ -265,6 +265,16 @@ export declare const platformSettingsSchema: z.ZodObject<{
265
265
  question?: string | undefined;
266
266
  allows_multiple_answers?: boolean | undefined;
267
267
  }>>;
268
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
269
+ title: z.ZodString;
270
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
271
+ }, "strip", z.ZodTypeAny, {
272
+ title: string;
273
+ cover?: "none" | "first_image" | undefined;
274
+ }, {
275
+ title: string;
276
+ cover?: "none" | "first_image" | undefined;
277
+ }>>>;
268
278
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
269
279
  topic_tag: z.ZodOptional<z.ZodString>;
270
280
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -404,6 +414,16 @@ export declare const platformSettingsSchema: z.ZodObject<{
404
414
  question?: string | undefined;
405
415
  allows_multiple_answers?: boolean | undefined;
406
416
  }>>;
417
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
418
+ title: z.ZodString;
419
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
420
+ }, "strip", z.ZodTypeAny, {
421
+ title: string;
422
+ cover?: "none" | "first_image" | undefined;
423
+ }, {
424
+ title: string;
425
+ cover?: "none" | "first_image" | undefined;
426
+ }>>>;
407
427
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
408
428
  topic_tag: z.ZodOptional<z.ZodString>;
409
429
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -543,6 +563,16 @@ export declare const platformSettingsSchema: z.ZodObject<{
543
563
  question?: string | undefined;
544
564
  allows_multiple_answers?: boolean | undefined;
545
565
  }>>;
566
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
567
+ title: z.ZodString;
568
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
569
+ }, "strip", z.ZodTypeAny, {
570
+ title: string;
571
+ cover?: "none" | "first_image" | undefined;
572
+ }, {
573
+ title: string;
574
+ cover?: "none" | "first_image" | undefined;
575
+ }>>>;
546
576
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
547
577
  topic_tag: z.ZodOptional<z.ZodString>;
548
578
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -915,6 +945,16 @@ export declare const createPostPayloadInputSchema: z.ZodObject<{
915
945
  question?: string | undefined;
916
946
  allows_multiple_answers?: boolean | undefined;
917
947
  }>>;
948
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
949
+ title: z.ZodString;
950
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
951
+ }, "strip", z.ZodTypeAny, {
952
+ title: string;
953
+ cover?: "none" | "first_image" | undefined;
954
+ }, {
955
+ title: string;
956
+ cover?: "none" | "first_image" | undefined;
957
+ }>>>;
918
958
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
919
959
  topic_tag: z.ZodOptional<z.ZodString>;
920
960
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1054,6 +1094,16 @@ export declare const createPostPayloadInputSchema: z.ZodObject<{
1054
1094
  question?: string | undefined;
1055
1095
  allows_multiple_answers?: boolean | undefined;
1056
1096
  }>>;
1097
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1098
+ title: z.ZodString;
1099
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1100
+ }, "strip", z.ZodTypeAny, {
1101
+ title: string;
1102
+ cover?: "none" | "first_image" | undefined;
1103
+ }, {
1104
+ title: string;
1105
+ cover?: "none" | "first_image" | undefined;
1106
+ }>>>;
1057
1107
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1058
1108
  topic_tag: z.ZodOptional<z.ZodString>;
1059
1109
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1193,6 +1243,16 @@ export declare const createPostPayloadInputSchema: z.ZodObject<{
1193
1243
  question?: string | undefined;
1194
1244
  allows_multiple_answers?: boolean | undefined;
1195
1245
  }>>;
1246
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1247
+ title: z.ZodString;
1248
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1249
+ }, "strip", z.ZodTypeAny, {
1250
+ title: string;
1251
+ cover?: "none" | "first_image" | undefined;
1252
+ }, {
1253
+ title: string;
1254
+ cover?: "none" | "first_image" | undefined;
1255
+ }>>>;
1196
1256
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1197
1257
  topic_tag: z.ZodOptional<z.ZodString>;
1198
1258
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1395,6 +1455,16 @@ export declare const createPostPayloadInputSchema: z.ZodObject<{
1395
1455
  question?: string | undefined;
1396
1456
  allows_multiple_answers?: boolean | undefined;
1397
1457
  }>>;
1458
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1459
+ title: z.ZodString;
1460
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1461
+ }, "strip", z.ZodTypeAny, {
1462
+ title: string;
1463
+ cover?: "none" | "first_image" | undefined;
1464
+ }, {
1465
+ title: string;
1466
+ cover?: "none" | "first_image" | undefined;
1467
+ }>>>;
1398
1468
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1399
1469
  topic_tag: z.ZodOptional<z.ZodString>;
1400
1470
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1596,6 +1666,16 @@ export declare const createPostPayloadInputSchema: z.ZodObject<{
1596
1666
  question?: string | undefined;
1597
1667
  allows_multiple_answers?: boolean | undefined;
1598
1668
  }>>;
1669
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1670
+ title: z.ZodString;
1671
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1672
+ }, "strip", z.ZodTypeAny, {
1673
+ title: string;
1674
+ cover?: "none" | "first_image" | undefined;
1675
+ }, {
1676
+ title: string;
1677
+ cover?: "none" | "first_image" | undefined;
1678
+ }>>>;
1599
1679
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1600
1680
  topic_tag: z.ZodOptional<z.ZodString>;
1601
1681
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1969,6 +2049,16 @@ export declare const createPostInputSchema: z.ZodObject<{
1969
2049
  question?: string | undefined;
1970
2050
  allows_multiple_answers?: boolean | undefined;
1971
2051
  }>>;
2052
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2053
+ title: z.ZodString;
2054
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
2055
+ }, "strip", z.ZodTypeAny, {
2056
+ title: string;
2057
+ cover?: "none" | "first_image" | undefined;
2058
+ }, {
2059
+ title: string;
2060
+ cover?: "none" | "first_image" | undefined;
2061
+ }>>>;
1972
2062
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1973
2063
  topic_tag: z.ZodOptional<z.ZodString>;
1974
2064
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -2108,6 +2198,16 @@ export declare const createPostInputSchema: z.ZodObject<{
2108
2198
  question?: string | undefined;
2109
2199
  allows_multiple_answers?: boolean | undefined;
2110
2200
  }>>;
2201
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2202
+ title: z.ZodString;
2203
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
2204
+ }, "strip", z.ZodTypeAny, {
2205
+ title: string;
2206
+ cover?: "none" | "first_image" | undefined;
2207
+ }, {
2208
+ title: string;
2209
+ cover?: "none" | "first_image" | undefined;
2210
+ }>>>;
2111
2211
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
2112
2212
  topic_tag: z.ZodOptional<z.ZodString>;
2113
2213
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -2247,6 +2347,16 @@ export declare const createPostInputSchema: z.ZodObject<{
2247
2347
  question?: string | undefined;
2248
2348
  allows_multiple_answers?: boolean | undefined;
2249
2349
  }>>;
2350
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2351
+ title: z.ZodString;
2352
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
2353
+ }, "strip", z.ZodTypeAny, {
2354
+ title: string;
2355
+ cover?: "none" | "first_image" | undefined;
2356
+ }, {
2357
+ title: string;
2358
+ cover?: "none" | "first_image" | undefined;
2359
+ }>>>;
2250
2360
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
2251
2361
  topic_tag: z.ZodOptional<z.ZodString>;
2252
2362
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -2452,6 +2562,16 @@ export declare const createPostInputSchema: z.ZodObject<{
2452
2562
  question?: string | undefined;
2453
2563
  allows_multiple_answers?: boolean | undefined;
2454
2564
  }>>;
2565
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2566
+ title: z.ZodString;
2567
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
2568
+ }, "strip", z.ZodTypeAny, {
2569
+ title: string;
2570
+ cover?: "none" | "first_image" | undefined;
2571
+ }, {
2572
+ title: string;
2573
+ cover?: "none" | "first_image" | undefined;
2574
+ }>>>;
2455
2575
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
2456
2576
  topic_tag: z.ZodOptional<z.ZodString>;
2457
2577
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -2654,6 +2774,16 @@ export declare const createPostInputSchema: z.ZodObject<{
2654
2774
  question?: string | undefined;
2655
2775
  allows_multiple_answers?: boolean | undefined;
2656
2776
  }>>;
2777
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2778
+ title: z.ZodString;
2779
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
2780
+ }, "strip", z.ZodTypeAny, {
2781
+ title: string;
2782
+ cover?: "none" | "first_image" | undefined;
2783
+ }, {
2784
+ title: string;
2785
+ cover?: "none" | "first_image" | undefined;
2786
+ }>>>;
2657
2787
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
2658
2788
  topic_tag: z.ZodOptional<z.ZodString>;
2659
2789
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -3056,6 +3186,16 @@ export declare const createPostTool: {
3056
3186
  question?: string | undefined;
3057
3187
  allows_multiple_answers?: boolean | undefined;
3058
3188
  }>>;
3189
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
3190
+ title: z.ZodString;
3191
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
3192
+ }, "strip", z.ZodTypeAny, {
3193
+ title: string;
3194
+ cover?: "none" | "first_image" | undefined;
3195
+ }, {
3196
+ title: string;
3197
+ cover?: "none" | "first_image" | undefined;
3198
+ }>>>;
3059
3199
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
3060
3200
  topic_tag: z.ZodOptional<z.ZodString>;
3061
3201
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -3195,6 +3335,16 @@ export declare const createPostTool: {
3195
3335
  question?: string | undefined;
3196
3336
  allows_multiple_answers?: boolean | undefined;
3197
3337
  }>>;
3338
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
3339
+ title: z.ZodString;
3340
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
3341
+ }, "strip", z.ZodTypeAny, {
3342
+ title: string;
3343
+ cover?: "none" | "first_image" | undefined;
3344
+ }, {
3345
+ title: string;
3346
+ cover?: "none" | "first_image" | undefined;
3347
+ }>>>;
3198
3348
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
3199
3349
  topic_tag: z.ZodOptional<z.ZodString>;
3200
3350
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -3334,6 +3484,16 @@ export declare const createPostTool: {
3334
3484
  question?: string | undefined;
3335
3485
  allows_multiple_answers?: boolean | undefined;
3336
3486
  }>>;
3487
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
3488
+ title: z.ZodString;
3489
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
3490
+ }, "strip", z.ZodTypeAny, {
3491
+ title: string;
3492
+ cover?: "none" | "first_image" | undefined;
3493
+ }, {
3494
+ title: string;
3495
+ cover?: "none" | "first_image" | undefined;
3496
+ }>>>;
3337
3497
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
3338
3498
  topic_tag: z.ZodOptional<z.ZodString>;
3339
3499
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -3539,6 +3699,16 @@ export declare const createPostTool: {
3539
3699
  question?: string | undefined;
3540
3700
  allows_multiple_answers?: boolean | undefined;
3541
3701
  }>>;
3702
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
3703
+ title: z.ZodString;
3704
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
3705
+ }, "strip", z.ZodTypeAny, {
3706
+ title: string;
3707
+ cover?: "none" | "first_image" | undefined;
3708
+ }, {
3709
+ title: string;
3710
+ cover?: "none" | "first_image" | undefined;
3711
+ }>>>;
3542
3712
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
3543
3713
  topic_tag: z.ZodOptional<z.ZodString>;
3544
3714
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -3741,6 +3911,16 @@ export declare const createPostTool: {
3741
3911
  question?: string | undefined;
3742
3912
  allows_multiple_answers?: boolean | undefined;
3743
3913
  }>>;
3914
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
3915
+ title: z.ZodString;
3916
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
3917
+ }, "strip", z.ZodTypeAny, {
3918
+ title: string;
3919
+ cover?: "none" | "first_image" | undefined;
3920
+ }, {
3921
+ title: string;
3922
+ cover?: "none" | "first_image" | undefined;
3923
+ }>>>;
3744
3924
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
3745
3925
  topic_tag: z.ZodOptional<z.ZodString>;
3746
3926
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -71,6 +71,10 @@ export const platformSettingsSchema = z.object({
71
71
  duration: z.enum(['ONE_DAY', 'THREE_DAYS', 'SEVEN_DAYS', 'FOURTEEN_DAYS']).optional(), // LinkedIn poll length
72
72
  allows_multiple_answers: z.boolean().optional(), // Telegram poll: allow multiple selections
73
73
  }).optional(),
74
+ article: z.object({
75
+ title: z.string(), // X Article title (required)
76
+ cover: z.enum(['first_image', 'none']).optional(), // Use the first attached image as the cover (default) or none
77
+ }).nullable().optional(), // X Article (needs X Premium): the caption is the Markdown body. null turns Article mode off
74
78
  // Threads
75
79
  reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only', 'followers_only', 'parent_post_author_only']).optional(),
76
80
  topic_tag: z.string().optional(), // Threads single discovery topic tag
@@ -322,6 +326,7 @@ export const createPostTool = {
322
326
  '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' +
323
327
  '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` with `url` first if you want to upload once and reuse the returned posterly URL across posts.\n\n' +
324
328
  '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' +
329
+ 'X ARTICLES: To publish on X as a long-form Article, pass `platform_settings.article` ({ title, cover?: "first_image" | "none" }) for an X account. The caption becomes the Article body and is written as Markdown (headings, bold, italic, lists, quotes, code blocks, tables, dividers). Reference attached images with `![caption](media:1)`. Needs an X Premium account; polls, threads, paid partnership, video, and GIFs are not allowed with an Article.\n\n' +
325
330
  'PLATFORM SETTINGS: Pass `platform_settings` for composer-equivalent controls: Facebook story/reel/backgrounds, YouTube title/privacy/thumbnail/brandPartner, LinkedIn document titles/mentions/polls/content_call_to_action_label (including BUY_NOW and SHOP_NOW), TikTok direct-post privacy/toggles/commercial disclosure, Pinterest board/title/link/product_tags, GBP event/offer/CTA/recurrence, X reply settings/polls/paid_partnership, Threads reply controls/text attachments/ghost posts/spoilers/reply approvals/GIPHY, Telegram polls/buttons/video cover/live photo, Slack markdown/blocks, Mastodon visibility/quote/poll (media+poll allowed), and Instagram feed/story/reel/carousel/native media tags/collaborators/first comments/trial Reels/is_ai_generated/audio_id/caption add-ons. Instagram caption add-ons (`caption_addon`, or `poll_attachment` / `is_comment_prompt_used`) need a Facebook Login account, a non-empty caption, and a feed photo, Reel, or carousel parent. Stories are rejected. A poll and a comment prompt cannot be combined. For Instagram, @username in caption is only a caption mention; `user_tags` creates native media tags and `collaborators` sends co-author invitations only when the selected Meta-linked account reports those capabilities. Call `list_platforms` with `view: "schema"` and the account ID first. `instagram_settings` remains as a backwards-compatible alias.\n\n' +
326
331
  '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.',
327
332
  inputSchema: createPostInputSchema,
@@ -280,6 +280,16 @@ export declare const createPostsBatchTool: {
280
280
  question?: string | undefined;
281
281
  allows_multiple_answers?: boolean | undefined;
282
282
  }>>;
283
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
284
+ title: z.ZodString;
285
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
286
+ }, "strip", z.ZodTypeAny, {
287
+ title: string;
288
+ cover?: "none" | "first_image" | undefined;
289
+ }, {
290
+ title: string;
291
+ cover?: "none" | "first_image" | undefined;
292
+ }>>>;
283
293
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
284
294
  topic_tag: z.ZodOptional<z.ZodString>;
285
295
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -419,6 +429,16 @@ export declare const createPostsBatchTool: {
419
429
  question?: string | undefined;
420
430
  allows_multiple_answers?: boolean | undefined;
421
431
  }>>;
432
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
433
+ title: z.ZodString;
434
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
435
+ }, "strip", z.ZodTypeAny, {
436
+ title: string;
437
+ cover?: "none" | "first_image" | undefined;
438
+ }, {
439
+ title: string;
440
+ cover?: "none" | "first_image" | undefined;
441
+ }>>>;
422
442
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
423
443
  topic_tag: z.ZodOptional<z.ZodString>;
424
444
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -558,6 +578,16 @@ export declare const createPostsBatchTool: {
558
578
  question?: string | undefined;
559
579
  allows_multiple_answers?: boolean | undefined;
560
580
  }>>;
581
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
582
+ title: z.ZodString;
583
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
584
+ }, "strip", z.ZodTypeAny, {
585
+ title: string;
586
+ cover?: "none" | "first_image" | undefined;
587
+ }, {
588
+ title: string;
589
+ cover?: "none" | "first_image" | undefined;
590
+ }>>>;
561
591
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
562
592
  topic_tag: z.ZodOptional<z.ZodString>;
563
593
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -760,6 +790,16 @@ export declare const createPostsBatchTool: {
760
790
  question?: string | undefined;
761
791
  allows_multiple_answers?: boolean | undefined;
762
792
  }>>;
793
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
794
+ title: z.ZodString;
795
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
796
+ }, "strip", z.ZodTypeAny, {
797
+ title: string;
798
+ cover?: "none" | "first_image" | undefined;
799
+ }, {
800
+ title: string;
801
+ cover?: "none" | "first_image" | undefined;
802
+ }>>>;
763
803
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
764
804
  topic_tag: z.ZodOptional<z.ZodString>;
765
805
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -961,6 +1001,16 @@ export declare const createPostsBatchTool: {
961
1001
  question?: string | undefined;
962
1002
  allows_multiple_answers?: boolean | undefined;
963
1003
  }>>;
1004
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1005
+ title: z.ZodString;
1006
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1007
+ }, "strip", z.ZodTypeAny, {
1008
+ title: string;
1009
+ cover?: "none" | "first_image" | undefined;
1010
+ }, {
1011
+ title: string;
1012
+ cover?: "none" | "first_image" | undefined;
1013
+ }>>>;
964
1014
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
965
1015
  topic_tag: z.ZodOptional<z.ZodString>;
966
1016
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1166,6 +1216,16 @@ export declare const createPostsBatchTool: {
1166
1216
  question?: string | undefined;
1167
1217
  allows_multiple_answers?: boolean | undefined;
1168
1218
  }>>;
1219
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1220
+ title: z.ZodString;
1221
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1222
+ }, "strip", z.ZodTypeAny, {
1223
+ title: string;
1224
+ cover?: "none" | "first_image" | undefined;
1225
+ }, {
1226
+ title: string;
1227
+ cover?: "none" | "first_image" | undefined;
1228
+ }>>>;
1169
1229
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1170
1230
  topic_tag: z.ZodOptional<z.ZodString>;
1171
1231
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1370,6 +1430,16 @@ export declare const createPostsBatchTool: {
1370
1430
  question?: string | undefined;
1371
1431
  allows_multiple_answers?: boolean | undefined;
1372
1432
  }>>;
1433
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1434
+ title: z.ZodString;
1435
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1436
+ }, "strip", z.ZodTypeAny, {
1437
+ title: string;
1438
+ cover?: "none" | "first_image" | undefined;
1439
+ }, {
1440
+ title: string;
1441
+ cover?: "none" | "first_image" | undefined;
1442
+ }>>>;
1373
1443
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1374
1444
  topic_tag: z.ZodOptional<z.ZodString>;
1375
1445
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -40,7 +40,7 @@ export const manageGoogleBusinessMediaTool = {
40
40
  workspace_id: z.string().optional().describe('Filter to a workspace ID from whoami.'),
41
41
  account_id: z.number().int().positive().optional().describe('Google Business account ID from list_accounts.'),
42
42
  location_id: z.string().optional().describe(LOCATION_ID_DESCRIPTION),
43
- source_url: z.string().url().optional().describe('add: public https URL of the photo or video (from upload_media).'),
43
+ source_url: z.string().url().optional().describe('add: public https URL of the photo or video (from upload_media). Photos must be JPG or PNG, 10 KB to 5 MB.'),
44
44
  category: z.enum(CATEGORIES).optional().describe('add: which gallery category to add the media to.'),
45
45
  media_format: z.enum(['PHOTO', 'VIDEO']).optional().describe('add: defaults to PHOTO. Use VIDEO for videos (Google caps profile videos at 30s / 75MB).'),
46
46
  media_name: z.string().min(1).optional().describe('delete: full media resource name from list_google_business_media (accounts/.../locations/.../media/...).'),
@@ -270,6 +270,16 @@ declare const platformSettingsSchema: z.ZodObject<{
270
270
  question?: string | undefined;
271
271
  allows_multiple_answers?: boolean | undefined;
272
272
  }>>;
273
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
274
+ title: z.ZodString;
275
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
276
+ }, "strip", z.ZodTypeAny, {
277
+ title: string;
278
+ cover?: "none" | "first_image" | undefined;
279
+ }, {
280
+ title: string;
281
+ cover?: "none" | "first_image" | undefined;
282
+ }>>>;
273
283
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
274
284
  topic_tag: z.ZodOptional<z.ZodString>;
275
285
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -409,6 +419,16 @@ declare const platformSettingsSchema: z.ZodObject<{
409
419
  question?: string | undefined;
410
420
  allows_multiple_answers?: boolean | undefined;
411
421
  }>>;
422
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
423
+ title: z.ZodString;
424
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
425
+ }, "strip", z.ZodTypeAny, {
426
+ title: string;
427
+ cover?: "none" | "first_image" | undefined;
428
+ }, {
429
+ title: string;
430
+ cover?: "none" | "first_image" | undefined;
431
+ }>>>;
412
432
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
413
433
  topic_tag: z.ZodOptional<z.ZodString>;
414
434
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -548,6 +568,16 @@ declare const platformSettingsSchema: z.ZodObject<{
548
568
  question?: string | undefined;
549
569
  allows_multiple_answers?: boolean | undefined;
550
570
  }>>;
571
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
572
+ title: z.ZodString;
573
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
574
+ }, "strip", z.ZodTypeAny, {
575
+ title: string;
576
+ cover?: "none" | "first_image" | undefined;
577
+ }, {
578
+ title: string;
579
+ cover?: "none" | "first_image" | undefined;
580
+ }>>>;
551
581
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
552
582
  topic_tag: z.ZodOptional<z.ZodString>;
553
583
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -945,6 +975,16 @@ export declare const updatePostTool: {
945
975
  question?: string | undefined;
946
976
  allows_multiple_answers?: boolean | undefined;
947
977
  }>>;
978
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
979
+ title: z.ZodString;
980
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
981
+ }, "strip", z.ZodTypeAny, {
982
+ title: string;
983
+ cover?: "none" | "first_image" | undefined;
984
+ }, {
985
+ title: string;
986
+ cover?: "none" | "first_image" | undefined;
987
+ }>>>;
948
988
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
949
989
  topic_tag: z.ZodOptional<z.ZodString>;
950
990
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1084,6 +1124,16 @@ export declare const updatePostTool: {
1084
1124
  question?: string | undefined;
1085
1125
  allows_multiple_answers?: boolean | undefined;
1086
1126
  }>>;
1127
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1128
+ title: z.ZodString;
1129
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1130
+ }, "strip", z.ZodTypeAny, {
1131
+ title: string;
1132
+ cover?: "none" | "first_image" | undefined;
1133
+ }, {
1134
+ title: string;
1135
+ cover?: "none" | "first_image" | undefined;
1136
+ }>>>;
1087
1137
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1088
1138
  topic_tag: z.ZodOptional<z.ZodString>;
1089
1139
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1223,6 +1273,16 @@ export declare const updatePostTool: {
1223
1273
  question?: string | undefined;
1224
1274
  allows_multiple_answers?: boolean | undefined;
1225
1275
  }>>;
1276
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1277
+ title: z.ZodString;
1278
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1279
+ }, "strip", z.ZodTypeAny, {
1280
+ title: string;
1281
+ cover?: "none" | "first_image" | undefined;
1282
+ }, {
1283
+ title: string;
1284
+ cover?: "none" | "first_image" | undefined;
1285
+ }>>>;
1226
1286
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1227
1287
  topic_tag: z.ZodOptional<z.ZodString>;
1228
1288
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1433,6 +1493,16 @@ export declare const updatePostTool: {
1433
1493
  question?: string | undefined;
1434
1494
  allows_multiple_answers?: boolean | undefined;
1435
1495
  }>>;
1496
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1497
+ title: z.ZodString;
1498
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1499
+ }, "strip", z.ZodTypeAny, {
1500
+ title: string;
1501
+ cover?: "none" | "first_image" | undefined;
1502
+ }, {
1503
+ title: string;
1504
+ cover?: "none" | "first_image" | undefined;
1505
+ }>>>;
1436
1506
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1437
1507
  topic_tag: z.ZodOptional<z.ZodString>;
1438
1508
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -1641,6 +1711,16 @@ export declare const updatePostTool: {
1641
1711
  question?: string | undefined;
1642
1712
  allows_multiple_answers?: boolean | undefined;
1643
1713
  }>>;
1714
+ article: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1715
+ title: z.ZodString;
1716
+ cover: z.ZodOptional<z.ZodEnum<["first_image", "none"]>>;
1717
+ }, "strip", z.ZodTypeAny, {
1718
+ title: string;
1719
+ cover?: "none" | "first_image" | undefined;
1720
+ }, {
1721
+ title: string;
1722
+ cover?: "none" | "first_image" | undefined;
1723
+ }>>>;
1644
1724
  reply_control: z.ZodOptional<z.ZodEnum<["everyone", "accounts_you_follow", "mentioned_only", "followers_only", "parent_post_author_only"]>>;
1645
1725
  topic_tag: z.ZodOptional<z.ZodString>;
1646
1726
  share_to_instagram: z.ZodOptional<z.ZodBoolean>;
@@ -66,6 +66,7 @@ const platformSettingsSchema = z.object({
66
66
  reel_thumb_offset: z.number().nonnegative().optional(),
67
67
  reply_settings: z.enum(['everyone', 'following', 'mentionedUsers', 'subscribers', 'verified']).optional(),
68
68
  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(),
69
+ article: z.object({ title: z.string(), cover: z.enum(['first_image', 'none']).optional() }).nullable().optional(),
69
70
  reply_control: z.enum(['everyone', 'accounts_you_follow', 'mentioned_only', 'followers_only', 'parent_post_author_only']).optional(),
70
71
  topic_tag: z.string().optional(),
71
72
  share_to_instagram: z.boolean().optional(), // Threads: also share the published post to the linked Instagram account as a Story